0

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

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

那可能吗?

4

1 回答 1

0

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

于 2010-09-27T10:20:25.533 回答