C# 我想至少是这样

C# 我想至少是这样,c#,audio,waveout,C#,Audio,Waveout,我正在尝试输出音频样本,并使用cswavplay进行输出,而cswavplay似乎反过来使用了winmm.dll中的DllImports 我确实使用了8位样本让它玩起来,但是当我尝试向它输入16位样本时,它失败得很惨。我尽可能深入地研究代码,我的理解如下: 每次cswavplay播放完最后一个缓冲区,我都会得到一个指向缓冲区的指针来填充。它为一次迭代工作,它回放一个缓冲区,有时。。。 我得到了各种各样有趣的异常,比如刚才我试图使用44100的缓冲区大小来更清楚地听到播放了多少。但是,当我在Wav

我正在尝试输出音频样本,并使用cswavplay进行输出,而cswavplay似乎反过来使用了winmm.dll中的
DllImports

我确实使用了8位样本让它玩起来,但是当我尝试向它输入16位样本时,它失败得很惨。我尽可能深入地研究代码,我的理解如下:

每次cswavplay播放完最后一个缓冲区,我都会得到一个指向缓冲区的指针来填充。它为一次迭代工作,它回放一个缓冲区,有时。。。 我得到了各种各样有趣的异常,比如刚才我试图使用44100的缓冲区大小来更清楚地听到播放了多少。但是,当我在WaveOut类(cswavplay的一部分)中的不同位置放置断点时,它使用的对象(如缓冲区和AutoResetEvent的实例)在第二次迭代中似乎都不存在。我最好的猜测是这些问题与线程或GC有关。例外情况似乎很随机,我太缺乏经验,无法完全理解发生了什么

我要求以下任何一项:

1) 胡乱猜测可能是什么问题

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

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

我不是在要求对我没有编写的软件进行彻底的bug跟踪,所以不要介意cswavplay

一天结束时,我可能在这里做错了什么,但很难知道什么时候我没有得到相关的异常(类似于
BufferAllocationException
之类的)

编辑:


感谢所有关于其他声音API的建议。它们似乎都假定为.wav文件。我很抱歉说不清楚,我不是在玩.wav文件,我是实时合成样本的。

对于.NET,我想到了它。使用.NET同时播放声音和动画图形的方法有很多。

GC。别这么想。穿线?也许,您使用线程吗?我只能在(II)中提供,但在每个样本16位操作中使用每个样本8位代码可能会导致缓冲区溢出。访问冲突异常和缺少对象——您可能正处于GC过早地吃掉您的数据的正确轨道上——看起来像是对不安全代码的半生不熟的尝试。在不安全的代码中,您是否可以通过正确的封送处理从头开始执行此操作?您是否尝试过
SoundPlayer
类@ssamuel I当时正在输出8位样本,WaveOut配置为8位。然而,它似乎无法在16位模式下工作…@ssamuel问题是,我甚至无法开始四分之一烘焙任何东西,更不用说从头开始;)也许我应该放弃买一只宠物(谢谢,尽管与我已经拥有的“几乎”起作用的东西相比,它看起来太麻烦了……明天我会给自己煮一些浓咖啡,卷起袖子,看看我是否不能播放那该死的DirectSound。。。