[DllImport("winmm.dll", SetLastError=true)]
static extern bool PlaySound(string pszSound, UIntPtr hmod, uint fdwSound);
[DllImport("winmm.dll", SetLastError=true)]
static extern bool PlaySound(byte[] pszSound, IntPtr hmod, SoundFlags fdwSound);
<DllImport("winmm.dll")> _
Shared Function PlaySound( _
ByVal szSound As String, _
ByVal hModule As UIntPtr, _
ByVal fdwSound As Integer) As Integer
End Function
You will need these flags for the fdwSound parameter
[Flags]
public enum SoundFlags
{
/// <summary>play synchronously (default)</summary>
SND_SYNC = 0x0000,
/// <summary>play asynchronously</summary>
SND_ASYNC = 0x0001,
/// <summary>silence (!default) if sound not found</summary>
SND_NODEFAULT = 0x0002,
/// <summary>pszSound points to a memory file</summary>
SND_MEMORY = 0x0004,
/// <summary>loop the sound until next sndPlaySound</summary>
SND_LOOP = 0x0008,
/// <summary>don't stop any currently playing sound</summary>
SND_NOSTOP = 0x0010,
/// <summary>Stop Playing Wave</summary>
SND_PURGE = 0x40,
/// <summary>don't wait if the driver is busy</summary>
SND_NOWAIT = 0x00002000,
/// <summary>name is a registry alias</summary>
SND_ALIAS = 0x00010000,
/// <summary>alias is a predefined id</summary>
SND_ALIAS_ID = 0x00110000,
/// <summary>name is file name</summary>
SND_FILENAME = 0x00020000,
/// <summary>name is resource name or atom</summary>
SND_RESOURCE = 0x00040004
}
To play a sound looping both SND_LOOP and SND_ASYNC flags have to be specified. Looped sounds only stop when PlaySound is called with pszSound set to NULL.
public static void Play (string strFileName)
{
PlaySound (strFileName, UIntPtr.Zero, (uint)(SoundFlags.SND_FILENAME | SoundFlags.SND_ASYNC));
}
public static void Play (byte[] waveData)
{
PlaySound (waveData, IntPtr.Zero, PlayFlags.SND_ASYNC | PlayFlags.SND_MEMORY);
}
private void button2_Click(object sender, System.EventArgs e)
{
UIntPtr ip = UIntPtr.Zero;
bool result = PlaySound(@"C:\path\to\wav\file.wav" ,ip ,0);
}
In .Net 2.0 you can use the System.Media.SoundPlayer class instead:
SoundPlayer sound = new SoundPlayer(@"C:\Windows\Media\tada.wav");
sound.Load(); // can also be called asychronously i.e. LoadAsync()
sound.Play(); // default is to play asyncronously