示例#1
0
 private void CleanupPlayback()
 {
     if (_soundOut != null)
     {
         _soundOut.Dispose();
         _soundOut = null;
     }
     if (_sampleSource != null)
     {
         _sampleSource.Dispose();
         _sampleSource = null;
     }
 }
示例#2
0
        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;
            }
        }