winapi - 为什么 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,这使得该记录无法与当时的其他事件同步。
是什么导致了这种可变性,如果录音的实际长度很难像这样预测,我该如何将这样的录音与任何东西对齐?
解决方案
环回捕获暴露了从播放管道复制的数据,而播放管道又具有自己的缓冲区粒度。然后,环回捕获不会暴露任何静默:因此有时您也会看到部分缓冲区。
可变缓冲区大小是可以的,你有完美的方式来同步数据。如果缓冲区之间存在间隙,则您有一个不连续标志来指示这一点。否则,无论缓冲区大小如何,数据都是连续的。
推荐阅读
- java - 实体映射中序列的增量大小设置为[50],而关联的数据库序列增量大小为1
- android - Android Studio-Kotlin:价值
这是我的 php 文件:我想根据 donasi 表中的最后一个 id 将数据插入 detaildonasi
<?php $conn = new mysqli("localhost","root",
- ios - 处理 json 中接收的字符串和 int
- android - 实时数据更新数据绑定上的嵌套滚动视图跳转
- wordpress - 搜索结果中的 Woocommerce 标签
- c# - SDL#:为什么将 IntPtr 初始化为 null?
- swift - 如何在 IBAction 中快速选择三个按钮之一
- android - 如何在离子中显示共享底页以进行文件共享?
- .net-core-3.1 - 未找到 ModelItem 和 ModelTreeManager。System.Activities.Presentation 缺少 .net core 3.1
- javascript - 在查询结果后传递参数(ExpressJS)