private void CleanupPlayback() { if (_soundOut != null) { _soundOut.Dispose(); _soundOut = null; } if (_sampleSource != null) { _sampleSource.Dispose(); _sampleSource = null; } }
public void Open(string filename, MMDevice device) { CleanupPlayback(); _peakMeter = CodecFactory.Instance.GetCodec(filename) .ToSampleSource() .AppendSource(Equalizer.Create10BandEqualizer, out _equalizer) .ToMono() .AppendSource(src => new PeakMeter(src)); _pitchShifter = _peakMeter .AppendSource(src => new PitchShifter(src)); _sampleSource = _pitchShifter .AppendSource(x => new BiQuadFilterSource(x)); _soundOut = new WasapiOut() { Latency = 100, Device = device }; _soundOut.Initialize(_sampleSource.ToWaveSource()); if (PlaybackStopped != null) { _soundOut.Stopped += PlaybackStopped; } }