是否可以设置 NAudio 读取请求的样本数?

Posted

技术标签:

【中文标题】是否可以设置 NAudio 读取请求的样本数?【英文标题】:Is it possible to set the # of samples requested by NAudio's Read? 【发布时间】:2010-08-21 13:39:44 【问题描述】:

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

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

这可能吗?

【问题讨论】:

【参考方案1】:

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

【讨论】:

以上是关于是否可以设置 NAudio 读取请求的样本数?的主要内容,如果未能解决你的问题,请参考以下文章

声音分析仪使用 naudio 处理 48000 个样本/秒的声音。我可以使用 1024 的循环样本大小吗?

AVAssetReader 读取音频,然后失败

NAudio WaveStream 和多通道

使用 NAudio 读取包含作品音频的 MemoryStream

NAudio 和 Midi 文件读取

Naudio wav格式问题