【问题标题】:How to measure audio latency using OpenSL on Android?如何在 Android 上使用 OpenSL 测量音频延迟?
【发布时间】:2013-07-26 08:20:31
【问题描述】:

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

提前谢谢你!

【问题讨论】:

    标签: android android-audiorecord opensl


    【解决方案1】:

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

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

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


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

    【讨论】:

    • 谢谢!这是个好主意! (附注:出于某些原因,我可能会在 19 小时内奖励赏金。我不会忘记的:))
    【解决方案2】:

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

    【讨论】:

    • 但是你在哪里看到延迟?
    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

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

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

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

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

      这将是您的往返延误

      虽然回复晚了,希望对你有帮助

      问候, 虾肉

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-12-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多