| sagewithin 2005-02-20, 8:58 pm |
| 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.
|