Playing/stopping sounds

  • Thread starter Thread starter Geoff Callaghan
  • Start date Start date
G

Geoff Callaghan

I have a problem with playing and stopping sounds. I have several forms,
each of which starts up with a sound file. However, if you move from one
form to the next without waiting for the sound file to finish, the next
sound file doesn't play. I've tried stopping the sound when the form closes,
and even doing a check on the PLAYING boolean before starting the next
sound, but nothing seems to work. Any suggestions?
 
Geoff said:
I have a problem with playing and stopping sounds.


I use the following class (made static because it's use it ubiquitous in
my code)


public class APIMedia
{
[Flags]
private enum PlaySoundFlags : int {
SND_SYNC = 0x0000, // play synchronously (default)
SND_ASYNC = 0x0001, // play asynchronously
SND_NODEFAULT = 0x0002, // silence (!default) if sound not
found
SND_MEMORY = 0x0004, // pszSound points to a memory file
SND_LOOP = 0x0008, // loop the sound until next
sndPlaySound
SND_NOSTOP = 0x0010, // don't stop any currently
playing sound
SND_NOWAIT = 0x00002000, // don't wait if the driver is busy
SND_ALIAS = 0x00010000, // name is a registry alias
SND_ALIAS_ID = 0x00110000, // alias is a predefined ID
SND_FILENAME = 0x00020000, // name is file name
SND_RESOURCE = 0x00040004 // name is resource name or atom
}
//--------------------------------------------------------------------------------------------------------

public static void Play ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_ASYNC );
}
//--------------------------------------------------------------------------------------------------------

public static void PlayWait ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_SYNC );
}
//--------------------------------------------------------------------------------------------------------

[ DllImport("coredll.dll", EntryPoint="PlaySound") ]
private extern static int PlaySound ( String lpszName, int
hModule, int dwFlags );
}
//--------------------------------------------------------------------------------------------------------


BTW this code is a clean up (for my use) of code already posted.
 
I'm sure that works fine, but is there a visual basic equivalent? The
player.play function does not allow for a second parameter.


William Bates said:
Geoff said:
I have a problem with playing and stopping sounds.


I use the following class (made static because it's use it ubiquitous in
my code)


public class APIMedia
{
[Flags]
private enum PlaySoundFlags : int {
SND_SYNC = 0x0000, // play synchronously (default)
SND_ASYNC = 0x0001, // play asynchronously
SND_NODEFAULT = 0x0002, // silence (!default) if sound not
found
SND_MEMORY = 0x0004, // pszSound points to a memory file
SND_LOOP = 0x0008, // loop the sound until next
sndPlaySound
SND_NOSTOP = 0x0010, // don't stop any currently
playing sound
SND_NOWAIT = 0x00002000, // don't wait if the driver is busy
SND_ALIAS = 0x00010000, // name is a registry alias
SND_ALIAS_ID = 0x00110000, // alias is a predefined ID
SND_FILENAME = 0x00020000, // name is file name
SND_RESOURCE = 0x00040004 // name is resource name or atom
}
//--------------------------------------------------------------------------
------------------------------

public static void Play ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_ASYNC );
}
//--------------------------------------------------------------------------
------------------------------

public static void PlayWait ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_SYNC );
}
//--------------------------------------------------------------------------
------------------------------

[ DllImport("coredll.dll", EntryPoint="PlaySound") ]
private extern static int PlaySound ( String lpszName, int
hModule, int dwFlags );
}
//--------------------------------------------------------------------------
 
1. There are plenty of C# to VB converters out there, plus learning to port
from one to the other is a very good exercise. You can't expect every
sample for what you want to do to be written in your language of choice.
2. What would the "second parameter" you're asking for do?


--
Chris Tacke
Co-founder
OpenNETCF.org
Are you using the SDF? Let's do a case study.
Email us at d c s @ o p e n n e t c f . c o m
http://www.opennetcf.org/donate


Geoff Callaghan said:
I'm sure that works fine, but is there a visual basic equivalent? The
player.play function does not allow for a second parameter.


William Bates said:
Geoff said:
I have a problem with playing and stopping sounds.


I use the following class (made static because it's use it ubiquitous in
my code)


public class APIMedia
{
[Flags]
private enum PlaySoundFlags : int {
SND_SYNC = 0x0000, // play synchronously (default)
SND_ASYNC = 0x0001, // play asynchronously
SND_NODEFAULT = 0x0002, // silence (!default) if sound not
found
SND_MEMORY = 0x0004, // pszSound points to a memory file
SND_LOOP = 0x0008, // loop the sound until next
sndPlaySound
SND_NOSTOP = 0x0010, // don't stop any currently
playing sound
SND_NOWAIT = 0x00002000, // don't wait if the driver is busy
SND_ALIAS = 0x00010000, // name is a registry alias
SND_ALIAS_ID = 0x00110000, // alias is a predefined ID
SND_FILENAME = 0x00020000, // name is file name
SND_RESOURCE = 0x00040004 // name is resource name or atom
}
//--------------------------------------------------------------------------
------------------------------

public static void Play ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_ASYNC );
}
//--------------------------------------------------------------------------
------------------------------

public static void PlayWait ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_SYNC );
}
//--------------------------------------------------------------------------
------------------------------

[ DllImport("coredll.dll", EntryPoint="PlaySound") ]
private extern static int PlaySound ( String lpszName, int
hModule, int dwFlags );
}
//--------------------------------------------------------------------------
 
The previous example showed a C# function that played a sound, but also
allowed for a constant for various options. The visual basic method does not
have this functionality. I don't see how porting this function to visual
basic would help in this case. I guess what I would like to do is configure
the player to stop the currently running wave file if it receives a new one.
Currently, I have gotten around the problem by issuing a "stop", waiting a
second, and then playing the new file. This seems clumsy to me.


Chris Tacke said:
1. There are plenty of C# to VB converters out there, plus learning to port
from one to the other is a very good exercise. You can't expect every
sample for what you want to do to be written in your language of choice.
2. What would the "second parameter" you're asking for do?


--
Chris Tacke
Co-founder
OpenNETCF.org
Are you using the SDF? Let's do a case study.
Email us at d c s @ o p e n n e t c f . c o m
http://www.opennetcf.org/donate


Geoff Callaghan said:
I'm sure that works fine, but is there a visual basic equivalent? The
player.play function does not allow for a second parameter.


William Bates said:
Geoff Callaghan wrote:
I have a problem with playing and stopping sounds.


I use the following class (made static because it's use it ubiquitous in
my code)


public class APIMedia
{
[Flags]
private enum PlaySoundFlags : int {
SND_SYNC = 0x0000, // play synchronously (default)
SND_ASYNC = 0x0001, // play asynchronously
SND_NODEFAULT = 0x0002, // silence (!default) if sound not
found
SND_MEMORY = 0x0004, // pszSound points to a memory file
SND_LOOP = 0x0008, // loop the sound until next
sndPlaySound
SND_NOSTOP = 0x0010, // don't stop any currently
playing sound
SND_NOWAIT = 0x00002000, // don't wait if the driver is busy
SND_ALIAS = 0x00010000, // name is a registry alias
SND_ALIAS_ID = 0x00110000, // alias is a predefined ID
SND_FILENAME = 0x00020000, // name is file name
SND_RESOURCE = 0x00040004 // name is resource name or atom
}
//--------------------------------------------------------------------------
------------------------------
public static void Play ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_ASYNC );
}
//--------------------------------------------------------------------------
------------------------------
public static void PlayWait ( String FileName )
{
PlaySound ( FileName, 0, (int)PlaySoundFlags.SND_SYNC );
}
//--------------------------------------------------------------------------
------------------------------
[ DllImport("coredll.dll", EntryPoint="PlaySound") ]
private extern static int PlaySound ( String lpszName, int
hModule, int dwFlags );
}
//--------------------------------------------------------------------------
------------------------------
BTW this code is a clean up (for my use) of code already posted.
 
Back
Top