internal SoundEffect(SharpDX.XAudio2.XAudio2 device, SharpDX.Multimedia.SoundStream waveStream) { if (waveStream == null) throw new ArgumentNullException("waveStream"); this.audioBuffer = new SharpDX.XAudio2.AudioBuffer(); this.audioBuffer.Stream = waveStream; this.audioBuffer.AudioBytes = (int)waveStream.Length; this.sourceVoice = new SharpDX.XAudio2.SourceVoice(device, waveStream.Format); }
protected override void Dispose(bool disposing) { if (disposing) { if (this.sourceVoice != null) { this.sourceVoice.Dispose(); this.sourceVoice = null; } if (this.audioBuffer != null) { this.audioBuffer.Stream.Close(); this.audioBuffer = null; } } }
public AudioSource(WaveFormat format) { WaveFormat = format; mSourceVoice = new SharpDX.XAudio2.SourceVoice( AudioDevice.XAudio, new SharpDX.Multimedia.WaveFormat( WaveFormat.SampleRate, WaveFormat.Bits, WaveFormat.Channels)); mStreamBuffer = new SharpDX.DataBuffer[mBufferCount]; mCurrentBuffer = 0; mSourceVoice.BufferEnd += (IntPtr obj) => { mStreamBufferTask?.Wait(); mStreamBufferTask?.Dispose(); mStreamBufferTask = new Task(SubmitAudioBuffer); mStreamBufferTask.Start(); }; }