我正在使用NAudio和ASIO播放一系列wav文件。我需要使用ASIO,因为声卡只支持它。我能够以这种方式玩每个wav:
waveRead = new WaveFileReader(completeStreamMS); //completeStreamMS is a memorystream
waveRead.Position = 0;
pcm = new WaveChannel32(waveRead);
reductionStream = new BlockAlignReductionStream(pcm);
reductionStream.Position = 0;
waveOutDevice.Init(reductionStream);
waveOutDevice.Play();
现在我需要在启动wav之前插入1秒的静音。我找到的唯一方法是使用OffsetSampleProvider,但如果我喜欢这个
ISampleProvider isp = WaveExtensionMethods.ToSampleProvider(waveRead);
var offset = new SampleProviders.OffsetSampleProvider(isp);
offset.DelayBy = TimeSpan.FromSeconds(1);
var wp = new SampleProviders.SampleToWaveProvider(offset);
waveOutDevice.Init(wp);`
waveOutDevice.Play();
第一个wav播放得很好,但是一旦我停止()waveOutDevice或者我尝试重新实现一个新的,程序的执行就停在那个位置
System.ExecutionEngineException
Cannot intercept exception. Debugged program can not be continued and properties can not be evaluated.
我无法理解为什么。请帮忙。 感谢
答案 0 :(得分:0)
使用ASIO,最好只打开一次输出设备,让它继续播放然后更改其输入。例如,您可以添加和删除用作输入的MixingSampleProvider
项。