我正在使用AsioOut
,因为需要尽可能减少延迟。由于我一次只能运行1个AsioOut,因此我使用MixingWaveProvider32
同时播放多个声音。我遇到的问题是我不知道如何在不暂停所有其他声音的情况下正确删除1个声音。
我可以轻松地将IWaveProvider
(我的情况下为AudioFileReader
)添加到MixingWaveProvider32
,只需将其添加为输入流即可,但如果我尝试以同样的方式将其删除音频开始出现故障(我认为它循环了最后一个可用的缓冲区)。我可以通过在交换声音之前停止AsioOut
来防止这种情况,但这会带来两个问题:
AsioOut.Stop()
上进行软锁定(该方法永远不会完成)。如何在不遇到这些问题的情况下正确删除1个声音?
答案 0 :(得分:0)
我怀疑这是MixingWaveProvider32
中的一个错误,因为WaveBuffer
和Array.Clear
的组合可能无法清除足够的缓冲区,导致您描述的故障声音。
我建议您尝试使用MixingSampleProvider
,这是MixingWaveProvider32
答案 1 :(得分:0)
我自己找到了一个解决方案:将所有声音通过WaveChannel32
运行,然后将其放入MixingWaveProvider32
我可以随时添加和删除声音,而无需停止AsioOut
任何音频故障。