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]