4

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

先感谢您!

4

4 回答 4

9

这是我用来测量音频输出延迟的方法:

  • 为您的应用程序创建一个简单的 UI,其中包含一个或多个按钮,当您按下它们时会播放声音。我建议使用具有近乎瞬时起音的声音(即很快达到全振幅的声音)。
  • 调高 Android 设备的音量并将其靠近其他设备(例如您的 PC 或其他手机)的麦克风。
  • 使用您的应用程序通过点击按钮来播放一些声音。用力敲击它们,以使敲击本身清晰可辨。
  • 在第二台设备上记录所有这些。
  • 完成后,在声音编辑器(例如 Audacity)中打开录音,然后测量敲击声与播放结果之间的距离(即时间)。您可能想要取几个这样的距离的平均值或中位数。

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


更新:在 Google 的 Glenn Kasten 的留言板帖子中,他链接到几个页面,这些页面描述了测量音频延迟的更准确方法。我想我可以在这里添加它们以供参考。是描述测量往返延迟的页面,这是另一个描述仅测量输出延迟的页面。

于 2013-07-29T09:39:31.730 回答
4

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

于 2014-02-20T01:45:31.403 回答
1

另一个很好的测试方法是使用通过 OpenSL|ES 提供的 LED 接口。使用它(并在LDR的帮助下),您可以记录 LED 亮起和发出声音之间的时间。

这是谷歌人在为自己的设备执行此操作时使用的方法之一。在这个视频中,他们深入探讨了这一点,以及更多关于 android 中低延迟音频的主题

于 2013-10-13T16:42:30.733 回答
1

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

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

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

3) 现在通过不同的麦克风 (PC) 记录输出并发出敲击声,例如打响指

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

这将是您的往返延误

虽然我回复晚了,希望这会有所帮助

问候,虾

于 2014-10-28T20:03:56.350 回答