In .NETCF v3.5 there is a new namespace - System.Media which brings audio support
to the Compact Framework. Previously the common way to add sounds to your application
was to use the PlaySound API (either P/Invoking yourself or using one of many wrappers).
Now that the framework itself has built-in support, which matches the desktop .NET
v2.0 framework it makes sense to standardise on the SoundPlayer component.
There are some differences in behaviour which you'll need to be aware of. When you
specify a filename this doesn't simply call through to the native APIs passing the
filename, the file is first loaded into memory and then the WaveOut APIs are used
to play it. This means that if you simply create a new SoundPlayer and call Play the
file will not be loaded, the Play method will have to first load the file contents,
and then play the sound. This will create a noticable delay before the sound is heard.
The class allows you to load the file at any time prior to calling play - you can
use either Load or LoadAsync to do this. Once the file is loaded
the Play method will be able to immediately begin playing the file. Exactly where
you call the Load/LoadAsync method will depend on your application design.
Keeping a large audio file cached will tie up valuable memory, you should dispose
of the SoundPlayer instance once you have finished with it.
Read the complete post at http://peterfoot.net/SystemMediaSoundPlayerVersusThePlaySoundAPI.aspx