是否可以设置NAudio的Read所请求的样本数量?

时间:2010-08-21 13:39:44

标签: c# naudio

我正在使用naudio生成脉宽调制音频信号,用于控制一对伺服。目前我正在使用Mark Heath编写的WaveProvider32类(http://mark-dot-net.blogspot.com/2009/10/playback-of-sine-wave-in-naudio.html)来实现IWaveProvider接口。采样率为44100

音频信号基本上是块N宽,其中信号的第一部分所有值都是高的,并且对于块的其余部分,值是低的。由于读取操作要求的样本多于块的宽度,因此只需重复信号直到填满缓冲区。我遇到的问题是缓冲区的长度不是我的信号块宽度的倍数,所以最后一个块的一部分被切断了哪个螺丝与伺服器一起使其抽搐。我意识到我可以做一些代码功能来跟踪它并抵消下一次读取的开始,但如果我可以设置WaveProvider必须立即提供的值的数量,那么我会更容易,这样我就可以使它成为多个(或者可能是信号块大小的确切宽度)。

这可能吗?

1 个答案:

答案 0 :(得分:0)

Read函数请求的数据量由您选择的IWaveOut实现以及它所运行的缓冲区的延迟和数量决定。您需要创建一个中间IWaveProvider,以确保底层提供程序的Read方法始终要求正确的数字。看看我为类似问题创建的BlockAlignReductionStream