playsound (winmm)
Last changed: -71.188.245.175

.
Summary
Plays a PCM sound file from a filename, resource name or registry alias

C# Signature:

[DllImport("winmm.dll", SetLastError=true)]
static extern bool PlaySound(string pszSound,
   System.UIntPtr hmod, uint fdwSound);

/// <summary>
/// Play Sound in bytes
/// </summary>
/// <param name="pszSound">Wave File Data</param>
/// <param name="hmod"></param>
/// <param name="dwFlag">Play Flag</param>
/// <returns>succeed return true</returns>
[DllImport("winmm.dll", SetLastError=true)]
public static extern bool PlaySound(byte[] pszSound, IntPtr hmod, SoundFlags dwFlag);

///If you want to test with Button_Click() ,below code is show
[System.Runtime.InteropServices.DllImport("winmm.dll", SetLastError=true)]
static extern bool PlaySound(string pszSound,System.UIntPtr hmod, uint fdwSound);

private void button2_Click(object sender, System.EventArgs e)
{
  UIntPtr ip = UIntPtr.Zero;
  bool result =
    PlaySound(
     @"C:\Documents and Settings\All Users\Documents\My Music\Sample Music\New Stories (Highway Blues).wma"
     ,ip
     ,0);
}

VB Signature:

<DllImport("winmm.dll")> _
Shared Function PlaySound( _
   ByVal szSound As String, _
   ByVal hModule As IntPtr, _
   ByVal flags As Integer) As Integer
End Function

Notes:

    [Flags]
    public enum SoundFlags : int
    {
        /// <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
    }

Tips & Tricks:

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.

Sample Code:

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

Alternative Managed API:

In .Net 2.0 you can use the System.Media.SoundPlayer class instead:

Sample Code:

        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

Pub!

Documentation
PlaySound on MSDN