Jump to content

Please Help! Still can't play WAV file Smartphone


Recommended Posts

Guest sagewithin
Posted

Hi everyone:

I hope someone can help me with this as I don't understand what's going on. I am trying to play a WAV file on the smartphone and can't get it to work for the life of me. I want to play it from a resource file, but I can't even get it to play from the a regular filename. Here's the code I'm using:

Public Class Sound

Private m_soundBytes() As Byte

Private m_fileName As String

Public Declare Function WCE_PlaySound Lib "CoreDll.dll" Alias "PlaySound" (ByVal szSound As String, ByVal hMod As IntPtr, ByVal flags As Integer) As Integer

Public Declare Function WCE_PlaySoundBytes Lib "CoreDll.dll" Alias "PlaySound" (ByVal szSound() As Byte, ByVal hMod As IntPtr, ByVal flags As Integer) As Integer

Private Enum Flags

SND_SYNC = &H0 ' play synchronously (default)

SND_ASYNC = &H1 ' play asynchronously

SND_NODEFAULT = &H2 ' silence (!default) if sound not found

SND_MEMORY = &H4 ' pszSound points to a memory file

SND_LOOP = &H8 ' loop the sound until next sndPlaySound

SND_NOSTOP = &H10 ' don't stop any currently playing sound

SND_NOWAIT = &H2000 ' don't wait if the driver is busy

SND_ALIAS = &H10000 ' name is a registry alias

SND_ALIAS_ID = &H110000 ' alias is a predefined ID

SND_FILENAME = &H20000 ' name is file name

SND_RESOURCE = &H40004 ' name is resource name or atom

End Enum

' Construct the Sound object to play sound data from the specified file.

Public Sub New(ByVal fileName As String)

m_fileName = fileName

End Sub

' Construct the Sound object to play sound data from the specified stream.

Public Sub New(ByVal stream As Stream)

' read the data from the stream

m_soundBytes = New Byte(stream.Length) {}

stream.Read(m_soundBytes, 0, Fix(stream.Length))

End Sub 'New

' Play the sound

Public Sub Play()

' If a file name has been registered, call WCE_PlaySound,

' otherwise call WCE_PlaySoundBytes.

If Not (m_fileName Is Nothing) Then

MessageBox.Show(WCE_PlaySound(m_fileName, IntPtr.Zero, Fix(Flags.SND_SYNC Or Flags.SND_FILENAME)))

Else

MessageBox.Show(WCE_PlaySoundBytes(m_soundBytes, IntPtr.Zero, Fix(Flags.SND_ASYNC Or Flags.SND_MEMORY)))

End If

End Sub

End Class

And then to call the sound file (as content):

Dim mySound As New Sound(dirProgram & "FANFAR1.WAV")

mySound.Play()

OR (this WAV file is an embedded resource)

Dim mySound As New Sound([Assembly].GetExecutingAssembly().GetManifestResourceStream("myname.HIT.WAV"))

mySound.Play()

The function to play the sound file returns a 0, which I assume means it didn't work. I don't get any errors or anything. The file just doesn't play.

As a side note, if I use the following, I AM able to get the function to return 1 and the sound DOES play:

Dim mySound As New Sound("SystemAsterisk")

mySound.Play()

Does anyone have any idea why this isn't working?? Please help!

Thanks in advance.

Guest sagewithin
Posted

As it turns out, there was a problem with the WAV file. It was set at an incompatible bit rate. Once I changed the file to 11,025 Hz 16-bit (or 8-bit), it worked perfectly.

Hi everyone:

I hope someone can help me with this as I don't understand what's going on. I am trying to play a WAV file on the smartphone and can't get it to work for the life of me. I want to play it from a resource file, but I can't even get it to play from the a regular filename. Here's the code I'm using:

Please sign in to comment

You will be able to leave a comment after signing in



Sign In Now
×
×
  • Create New...

Important Information

By using this site, you agree to our Terms of Use.