我正在尝试输出音频样本,并使用来自http://www.codeproject.com/KB/audio-video/cswavplay.aspx的cswavplay,这反过来似乎使用来自winmm.dll的DllImports
。
我确实使用8位样本来玩,但是当我试图给它16位样本时,它失败得很惨。我尽我所能挖掘代码,我理解它如下:
我得到一个指针,缓冲区填充每次cswavplay完成播放最后一个缓冲区。它工作一次迭代,它播放一个缓冲区,有时…我得到各种有趣的异常,AccessViolationException刚才,例如,当我试图使用44100的缓冲区大小更清楚地听到多少得到播放。但是当我在WaveOut类(cswavplay的一部分)的各个地方放置断点时,它使用的对象(如缓冲区和AutoResetEvent的实例)似乎都没有在第二次迭代中存活。我最好的猜测是,这些问题与线程或GC有关。这些例外似乎是随机的,我太没有经验了,无法完全理解发生了什么。
我要求以下任何一个:
1)胡乱猜测可能是什么问题
2)有根据的猜测可能是什么问题
3)指向使用c#实时输出声音的另一种方法
我不是要求对不是我写的软件进行彻底的bug跟踪,所以不要介意cswavplay…
在一天结束的时候,我可能在这里做错了什么,但是很难知道什么时候我没有得到一个相关的异常(沿着BufferAllocationException
或其他东西)…
编辑:
感谢所有关于其他声音API的建议。它们似乎都假定是。wav文件。我很抱歉不是很清楚,我不是播放。wav文件,我合成样品在实时
DirectSound和。net的XNA框架出现在我的脑海中。这里有很多非常高质量的示例,如何在。net中同时播放声音和动画图形。