Playing/stopping sounds

  • Thread starter Geoff Callaghan
  • 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?
 
W

William Bates

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.
 
G

Geoff Callaghan

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 );
}
//--------------------------------------------------------------------------
 
C

Chris Tacke, eMVP

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 );
}
//--------------------------------------------------------------------------
 
G

Geoff Callaghan

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.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top