AruaS
AruaS

Reputation: 43

VB.NET: Can't load audio from resources

I'm trying to add multiple sounds on an application using a Public function... When I use the absolute path for my sounds everything works perfectly, but when I'm trying to load them from Resources I don't get any sound output.. Any ideas what's wrong?

Public Class Form1

    Public Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Integer, ByVal hwndCallback As Integer) As Integer

    Dim musicAlias As String = "myAudio"


    'Dim musicPath As String = "C:\Users\Teo\Documents\Visual Studio 2015\Projects\test\test\Resources\sound.mp3"
    'Dim musicPath As String = "Resources\sound.mp3"
    'Dim musicPath As String = My.Resources.ResourceManager.GetObject("sound.mp3")
    Dim musicPath2 As String = "C:\Users\Teo\Desktop\sound.mp3"


    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        mciSendString("Open " & musicPath & " alias " & musicAlias, CStr(0), 0, 0)
        mciSendString("play " & musicAlias, CStr(0), 0, 0)
    End Sub
End Class

The last one works perfectly, I tried every one of the above... The three comments above are different ways I tried to make it work, but all failed...

Upvotes: 0

Views: 1527

Answers (2)

HardCode
HardCode

Reputation: 6756

I know this has an answer marked correct, but once you have a sound file in your Resources, it's much easier this way:

My.Computer.Audio.Play(My.Resources.MyCoolSound, AudioPlayMode.Background)

No reason to use an API call.

Upvotes: 1

Reza Aghaei
Reza Aghaei

Reputation: 125197

You can load the file from resources and cache them locally and play them.

Open Resources.resx file under My Project. Then add your file for example YourFileName.mp3 to the resources by choosing Add Existing File... then when you want to play the file, use this code:

Dim file As String = System.IO.Path.Combine(Application.StartupPath, "YourFileName.mp3")
If (Not System.IO.File.Exists(file)) Then
    System.IO.File.WriteAllBytes(file, My.Resources.YourFileName)
End If

'Now the file exists locally
'Play the file here

Upvotes: 1

Related Questions