为什么iOS音频捕获回调时间间隔不平稳?

问题描述 投票:0回答:1

我编写我的iOS应用来录制音频。

我叫session.setPreferredIOBufferDuration(0.001)来设置持续时间,并记录两个回调时间的间隔。

这是我的iPhone 8的数据:

max =  198 avg =  2.75314 min =  0 
======================================================
4 2 2 3 5 3 1 3 6 1
2 2 6 0 5 3 1 3 3 5
1 3 3 2 3 5 1 3 3 3
3 4 1 4 3 2 4 2 3 3
3 3 3 3 2 3 3 3 5 1
3 2 3 3 3 3 3 5 1 3
3 3 3 3 3 3 4 1 3 3
3 3 3 2 3 4 2 3 3 3
3 4 5 0 2 3 3 3 3 3
3 3 3 3 2 3 4 2 3 3
3 3 3 3 3 3 4 2 2 4
3 2 4 2 3 2 4 3 4 2
2 3 3 3 3 2 4 3 5 1
2 4 2 3 2 3 4 3 3 2
4 5 1 2 3 4 2 4 1 3
3 3 3 5 2 2 2 4 2 3
3 3 3 6 0 3 3 3 2 3
3 3 4 2 3 3 2 3 3 3
3 3 3 3 5 1 2 3 3 3
3 3 4 4 1 2 3 3 4 2
3 3 3 3 3 2 3 6 0 3
3 3 4 2 3 3 3 2 5 1

这是我的iPhone 7的数据:

max =  246 avg =  2.59249 min =  0 
======================================================
3 2 3 2 3 3 5 2 2 3
3 3 3 4 2 2 3 3 3 3
221 0 0 0 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
1 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 1 0
0 0 0 0 0 0 2 0 0 0
0 0 0 0 0 0 0 1 7 1
1 3 2 3 3 3 3 2 4 4
1 3 4 2 3 3 5 4 0 2
3 5 2 3 2 3 3 4 2 3
2 6 0 4 2 3 3 3 4 3
1 3 3 3 5 3 1 3 3 2

如您所见,最大值与我设置为AudioSession的1ms距离很远。而且iPhone 7更经常出现庞大的数字。

为什么iOS无法顺利调用我的回调?我可以做一些事情,例如设置一些首选项,以获得更平滑的数据吗?

谢谢。

ios audio audiounit
1个回答
0
投票

1)首选的缓冲区持续时间只是对OS的建议。大多数情况下,取决于设备型号的硬件功能。当前所有iOS设备均支持256帧。较小的数字可能仅在某些iOS设备型号上有效。但是iOS设备可以为每个音频单元回调自由使用不同的缓冲区大小(因此,持续时间)。有时会这样做(由于电源管理,音频路由更改,硬件启动/停止问题等)

2)音频单元缓冲区回调开始之间的间隔非常一致。延迟问题通常是回调内的代码花费太长时间的结果。您是否遵守所有音频上下文实时规则? (没有长时间的操作,没有Swift,没有Objective C消息传递,没有锁,没有内存管理,没有文件读写,没有UI调用等)

© www.soinside.com 2019 - 2024. All rights reserved.