private void DirectSound_Start(object sender, EventArgs e) { soundStream = new SoundStream(File.OpenRead(loadFilePath)); WaveFormat format = soundStream.Format; AudioBuffer buffer = new AudioBuffer { Stream = soundStream.ToDataStream(), AudioBytes = (int)soundStream.Length, Flags = BufferFlags.EndOfStream }; soundStream.Close(); sourceVoice = new SourceVoice(xAudio2, format, true); sourceVoice.SubmitSourceBuffer(buffer, soundStream.DecodedPacketsInfo); sourceVoice.Start(); if (directSoundEffect == 0) { SharpDX.XAPO.Fx.Echo effectEcho = new SharpDX.XAPO.Fx.Echo(xAudio2); EffectDescriptor effectDescriptor = new EffectDescriptor(effectEcho); sourceVoice.SetEffectChain(effectDescriptor); sourceVoice.EnableEffect(0); } else if (directSoundEffect == 1) { SharpDX.XAPO.Fx.Reverb effectReverb = new SharpDX.XAPO.Fx.Reverb(xAudio2); EffectDescriptor effectDescriptor = new EffectDescriptor(effectReverb); sourceVoice.SetEffectChain(effectDescriptor); sourceVoice.EnableEffect(0); } }
/// <summary> /// SharpDX XAudio2 sample. Plays a generated sound with some reverb. /// </summary> static void Main(string[] args) { var xaudio2 = new XAudio2(); var masteringVoice = new MasteringVoice(xaudio2); var waveFormat = new WaveFormat(44100, 32, 2); var sourceVoice = new SourceVoice(xaudio2, waveFormat); int bufferSize = waveFormat.ConvertLatencyToByteSize(60000); var dataStream = new DataStream(bufferSize, true, true); int numberOfSamples = bufferSize / waveFormat.BlockAlign; for (int i = 0; i < numberOfSamples; i++) { // cos(2 * PI * (220 + 4 * cos(2 * PI * 10 * t)) * t) * 0.5 double vibrato = Math.Cos(2 * Math.PI * 10.0 * i / waveFormat.SampleRate); float value = (float)(Math.Cos(2 * Math.PI * (220.0 + 4.0 * vibrato) * i / waveFormat.SampleRate) * 0.5); dataStream.Write(value); dataStream.Write(value); } dataStream.Position = 0; var audioBuffer = new AudioBuffer { Stream = dataStream, Flags = BufferFlags.EndOfStream, AudioBytes = bufferSize }; var reverb = new Reverb(xaudio2); var effectDescriptor = new EffectDescriptor(reverb); sourceVoice.SetEffectChain(effectDescriptor); sourceVoice.EnableEffect(0); sourceVoice.SubmitSourceBuffer(audioBuffer, null); sourceVoice.Start(); Console.WriteLine("Play sound"); for (int i = 0; i < 60; i++) { Console.Write("."); Console.Out.Flush(); Thread.Sleep(1000); } }