首页 > 解决方案 > 为什么 WASAPI 环回捕获会产生可变缓冲区?

问题描述

使用 NAudio 捕获麦克风每次都会记录完全相同数量的缓冲区数据。但我正在尝试使用 WASAPI Loopback Capture 并获得许多比我预期更大的数据包。使用 500ms 的设置audioBufferMillisecondsLength,我希望每个回调事件有 192,000 个字节,但我看到的大小如下:

192000
195840
195840
195840
218880
218880
218880
218880
218880
218880
215040
226560
215040
230400
215040
218880
222720
192000
192000
195840
192000
192000
195840
...

在较长的记录中,我发现每个事件的平均字节数为 195,951.2095,这使得该记录无法与当时的其他事件同步。

是什么导致了这种可变性,如果录音的实际长度很难像这样预测,我该如何将这样的录音与任何东西对齐?

标签: winapiaudionaudiowasapi

解决方案


环回捕获暴露了从播放管道复制的数据,而播放管道又具有自己的缓冲区粒度。然后,环回捕获不会暴露任何静默:因此有时您也会看到部分缓冲区。

可变缓冲区大小是可以的,你有完美的方式来同步数据。如果缓冲区之间存在间隙,则您有一个不连续标志来指示这一点。否则,无论缓冲区大小如何,数据都是连续的。


推荐阅读