首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS:不好的Mic输入延迟测量结果

iOS:不好的Mic输入延迟测量结果
EN

Stack Overflow用户
提问于 2013-05-21 21:10:27
回答 3查看 1.9K关注 0票数 0

我正在运行一个测试,以测量我的iPhone应用程序的基本延迟,结果令人失望:50 my的直接测试应用程序。该应用程序只是拿起麦克风输入和播放它使用相同的渲染回调,没有其他音频单位或处理涉及。因此,就这样的基本情况而言,结果似乎太糟糕了。我需要一些提示,看看结果是否合理,或者我的测试中有设计缺陷。

测试的基本思想是有三个角色:

  1. 我的手指折断作为参考声源。
  2. 一个简单的iOS播放程序(使用内置麦克风)作为#1的第一个侦听器。
  3. 作为#1的第二个侦听器和iOS输出的唯一侦听器(通过通过iOS耳机插孔连接的扬声器),Mac (带有USB麦克风和Audacity)作为第二个侦听器。

然后,随着奥迪在录音模式,Mac会同时从我的手指和它的“克隆”从iOS扬声器近距离接收。最后,我只需直观地观察奥迪的记录轨迹中的波形,并测量两个记录快照的峰值之间的时间间隔。

这绝不是一个超级精确的测量,但至少Mac记录管道的固有延迟应该以这种方式被抵消。因此,误差主要来自于峰值距离的测量,我认为峰值距离应该比音频管道延迟小得多,可以忽略。

我期待20毫秒或更低的延迟,但很明显,结果给我50~60毫秒。我的ASBD使用kAudioFormatFlagsCanonical和kAudioFormatLinearPCM作为格式。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-05-21 21:50:09

我将总结Paul R的评论作为答案,它解决了我的问题:

以44.1 kHz采样率,50 ms对应于2048左右的总缓冲区大小,这似乎并不不合理,因为您有一个记录和一个回放路径。

我不知道缓冲区大小是2048,而且您的记录回放环测试中可能有多个缓冲区,但是测试中的有效总缓冲区大小似乎可能是2048,这似乎并不不合理。当然,如果您只对记录延迟感兴趣,正如问题的标题所示,那么您将需要找到一种方法来区分回放延迟。

票数 0
EN

Stack Overflow用户

发布于 2013-11-30 20:35:49

50 mS比大小为1024的2个音频缓冲器(一个输出,一个输入)的持续时间长约4 mS,采样速率为44.1 kHz。

17 mS比长度为256的2个缓冲器的持续时间多5 mS。

因此,看起来iOS音频延迟大约是5 mS加上两个缓冲区的持续时间(音频输出缓冲区的持续时间加上填充输入缓冲区所需的时间).在你特定的iOS设备上。

一些iOS设备可以支持128个样本的更短的音频缓冲区大小。

票数 1
EN

Stack Overflow用户

发布于 2014-01-11 17:00:01

您可以使用核心音频,并设置音频会话具有非常低的延迟。可以使用buffer size to be smaller设置AudioSessionSetProperty(kAudioSessionProperty_PreferredHardwareIOBufferDuration,...

使用较小的缓冲区会使音频回调发生得更频繁,同时获取较小的音频块。请记住,这只是对音频系统的一个建议。iOS将根据您的采样率和整数幂2使用一个回调时间合适的值。

一旦设置了缓冲区持续时间,就可以使用AudioSessionGetProperty(kAudioSessionProperty_CurrentHardwareIOBufferDuration,...获得系统将使用的实际缓冲区持续时间。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16679537

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档