我正在尝试输出音频样本,并使用http://www.codeproject.com/KB/audio-video/cswavplay.aspx中的cswavplay这样做,而后者又似乎使用了winmm.dll中的DllImports

我确实使用8位样本来播放它,但是当我尝试将其馈入16位样本时却失败了。我尽了最大的努力来挖掘代码,并且我这样理解:

每当cswavplay完成播放最后一个缓冲区时,我都会得到一个指向缓冲区的指针。它工作一次,播放一个缓冲区,有时...
例如,当我尝试使用44100的缓冲区大小来更清楚地听到播放了多少声音时,我得到了各种各样有趣的异常,AccessViolationException。但是,当我在WaveOut类(属于cswavplay的一部分)内的各个位置放置断点时,似乎它使用的所有对象(例如缓冲区和AutoResetEvent实例)都没有在第二次迭代中存活。我最好的猜测是这些问题与线程或GC有关。异常似乎是随机的,我实在经验不足,无法完全理解发生了什么。

我要求以下任意一项:

1)关于可能是什么的疯狂猜测

2)关于可能是什么问题的有根据的猜测

3)指向使用C#实时输出声音的另一种方法的指针

我并不是要对我未编写的软件进行彻底的错误跟踪,所以不要介意cswavplay ...

归根结底,我可能在这里做错了什么,但是很难知道我何时没有得到相关的异常(exception)(沿着BufferAllocationException之类的东西)。

编辑:

感谢您对其他声音API的所有建议。他们似乎都假定一个.wav文件。对不起,我不清楚,我没有播放.wav文件,我实时合成样本。

最佳答案

DirectSound,对于.NET,XNA framework浮现在我的脑海。有很多very high quality samples out,如何使用.NET来同时播放声音和动画图形。

关于c# - 线程困境,至少我认为是,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8042119/

10-10 12:35