How to play a WAV sound file with DirectX in C# for Windows 8

Many people use the Mediaelement to play soundfiles in their apps. For my liitle app this wasn’t good enough. I build an app where I want to be able to press a button very fast and everytime a sound should be played. Mediaelement didn’t handle the soundplaying fast enough for me. On Windows Phone I could use XNA but that’s not available on Windows 8. The alternative is DirectX, since I don’t want to write any C++ code anymore I needed to find something else. But there is a very nice library which wraps DirectX in C# for you which is called SharpDX.

So type this in your packagemanger console:

Install-Package SharpDX.XAudio2

This will add the audio part of DirectX to your project. In your code load the correct wav file:

XAudio2 xaudio;
WaveFormat waveFormat;
AudioBuffer buffer;
SoundStream soundstream;

xaudio = new XAudio2();
var masteringsound = new MasteringVoice(xaudio);

var nativefilestream = new NativeFileStream(
@”Assets\squeeze.wav”,
NativeFileMode.Open,
NativeFileAccess.Read,
NativeFileShare.Read);

soundstream = new SoundStream(nativefilestream);

waveFormat = soundstream.Format;
buffer = new AudioBuffer
{
Stream = soundstream.ToDataStream(),
AudioBytes = (int)soundstream.Length,
Flags = BufferFlags.EndOfStream
};

In the click event of my button I have the following code to start playing the sound:

SourceVoice sourceVoice;

sourceVoice = new SourceVoice(xaudio, waveFormat, true);
sourceVoice.SubmitSourceBuffer(buffer, soundstream.DecodedPacketsInfo);
sourceVoice.Start();

Download [SOURCE]