如何在Android上使用OpenSL测量音频延迟?

时间:2013-07-26 07:05:05

标签: android android-audiorecord opensl

我使用OpenSL在Android上录制和播放音频。您能否告诉我如何测量延迟,以便找到最佳音频配置(缓冲区,采样率)。

提前谢谢!

4 个答案:

答案 0 :(得分:9)

以下是我用来衡量音频输出延迟的方法:

  • 为您的应用创建一个简单的用户界面,其中有一个或多个按钮可在您按下时播放声音。我建议使用接近瞬时攻击的声音(即非常快速达到全振幅的声音)。
  • 在Android设备上调高音量并将其靠近其他设备的麦克风(例如您的电脑或其他手机)。
  • 点击按钮,使用您的应用播放一些声音。轻敲它们以使水龙头本身清晰可听。
  • 在第二台设备上录制所有这些内容。
  • 完成后,在声音编辑器(例如Audacity)中打开录音,并测量敲击声音与结果播放之间的距离(即时间)。你可能想要取几个这样的距离的平均值或中位数。

这种测量方式具有易于执行的优点。缺点是您的结果也包括触摸延迟。触摸事件以60 Hz的频率生成,这意味着除了音频输出延迟之外,您还可以获得大约16 ms的额外延迟。这使得使用此方法测量非常小的延迟差异几乎是不可能的。


更新:在Google的Glenn Kasten发布的留言板帖子中,他链接了几页,描述了更准确的音频延迟测量方法。我想我可以在这里添加它们以供参考。描述测量往返延迟的Here's the page和描述仅测量输出延迟的here's another page

答案 1 :(得分:4)

您是否尝试过此应用来衡量它? https://play.google.com/store/apps/details?id=com.levien.audiobuffersize 该应用程序由来自Google的Raph Levien创建,他正在创建一个结果为http://audiobuffersize.appspot.com/的数据库(如您所见,已经有很多结果)这是一个非常快速的测试,可以计算出最佳的缓冲区大小和设备的采样率以及实现的最低延迟。从我认为如果很多用户上传他们的结果,我们将能够知道有多少/哪些设备准备好接收低延迟音频...

答案 2 :(得分:1)

另一种非常好的测试方法是使用OpenSL | ES提供的LED接口。使用此(并借助于LDR),您可以记录指示灯亮起和发出声音之间的时间。

这是google用户为自己的设备执行此操作时使用的方法之一。他们进入了这个问题,还有更多关于android中低延迟音频的主题,in this video.

答案 3 :(得分:1)

添加@ Michael的方法或找出输出延迟,如果您对往返延迟感兴趣,即要播放的记录。然后

1)只需运行一个简单的音频环回应用程序(确保缓冲区和排队正确完成)。

2)保持音量最好低以避免反馈回声,但是eccho应该仍然存在且可听见

3)现在通过不同的麦克风(PC)录制输出并发出敲击声,就像对齐手指一样

4)将音频从第二个麦克风(PC)导入到goldwave或audacity,并测量快照和从设备播放的快照之间的延迟

这将是您的往返延迟

虽然我很晚才回复,希望这有帮助

的问候, Shrish