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]