PlaySound (winmm)
Last changed: -71.188.245.175

.
Summary
TODO - a short description

C# Signature:

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

VB Signature:

Public Declare Auto Function PlaySound Lib "winmm.dll" Alias "PlaySound" _
    (ByVal pszSound As String, ByVal hmod As Long, ByVal fdwSound As Long) _
    As Boolean

Notes:

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

Tips & Tricks:

Sometimes when using SND_ASYNC, your sound will be clipped at the beginning or the end of the sound. One workaround is to play all sounds in another thread using SND_SYNC.

Sample Code:

    public static void Play (string strFileName)
    {
        PlaySound (strFileName, UIntPtr.Zero, SoundFlags.SND_FILENAME | SoundFlags.SND_ASYNC);
    }

    // Calling with the the SND_MEMORY flag
    public static void Play(string strFileName)
    {
        // a more usefull scenario would be extracting the sound file from the assembly resources
        // NOTE: function must be declared with the CharSet parameter to CharSet.Auto

        StreamReader reader = new StreamReader(strFileName, Encoding.Unicode);
        string soundString = reader.ReadToEnd();

        PlaySound(soundString, UIntPtr.Zero, SoundFlags.SND_MEMORY);
    }

Alternative Managed API:

Do you know one? Please contribute it!

Documentation
PlaySound on MSDN