本页介绍了用于测量输入和输出延迟的常用方法。
测量输出延迟
有多种技术可用于测量输出延迟,这些技术具有不同的准确度和运行简易度,如下所述。另请参阅测试电路,了解测试环境示例。
LED 和示波器测试
此测试测量与设备 LED 指示灯相关的延迟。如果您的生产设备没有 LED 指示灯,您可以在原型外形尺寸设备上安装 LED 指示灯。为了在具有裸露电路的原型设备上获得更高的精度,请将示波器探头直接连接到 LED,以绕过光传感器延迟。
如果您的生产设备或原型设备都无法安装 LED,请尝试以下解决方法
- 将通用输入/输出 (GPIO) 引脚用于相同目的。
- 使用 JTAG 或其他调试端口。
- 使用屏幕背光。这可能存在风险,因为背光可能具有不可忽略的延迟,并可能导致不准确的延迟读数。
要进行此测试
- 运行一个应用,该应用在输出音频的同时定期脉冲 LED。
注意: 要获得有用的结果,至关重要的是在测试应用中使用正确的 API,以便您正在执行快速音频输出路径。有关背景信息,请参阅 降低延迟的设计。
- 将光传感器放置在 LED 旁边。
- 将双通道示波器的探头连接到有线耳机插孔(线路输出)和光传感器。
- 使用示波器测量观察到的线路输出信号与光传感器信号之间的时间差。
时间差是近似的音频输出延迟,假设 LED 延迟和光传感器延迟均为零。通常,LED 和光传感器各自具有相对较低的延迟,约为一毫秒或更短,这足够低,可以忽略不计。
测量往返延迟
往返延迟是输出延迟和输入延迟的总和。
拉森测试
最简单的延迟测试之一是音频反馈(拉森效应)测试。这通过对脉冲响应环路进行计时,提供对组合输出和输入延迟的粗略测量。由于测试的性质,此测试本身对于详细分析不是很有用,但它可用于校准其他测试以及建立上限。
此方法不会分解组件时间,当输出延迟和输入延迟相互独立时,这一点很重要。因此,不建议使用此方法来单独测量精确的输出延迟或输入延迟值,但可能有助于建立粗略的估计值。
到设备扬声器的输出延迟可能明显大于到耳机连接器的输出延迟。这是由于扬声器校正和保护造成的。
要进行此测试
- 运行一个应用,该应用从麦克风捕获音频,并立即通过扬声器播放捕获的数据。
- 在外部创建一个声音,例如用铅笔敲击麦克风。此噪声会产生反馈环路。或者,可以使用软件将脉冲注入环路。
- 测量反馈脉冲之间的时间,以获得输出延迟、输入延迟和应用开销的总和。
以下是一些用于获取拉森测试应用的资源
- Dr. Rick O'Rang loopback 应用是一个用于音频反馈测试的 Android 应用。您可以从 Google Play 下载该应用或从 GitHub 获取源代码。
- 我们还在 slesTestFeedback.cpp 发布了一个示例实现。这是一个命令行应用,使用平台构建环境构建;但是,将代码应用于其他环境应该很简单。您还需要位于
audio_utils
库中的非阻塞 FIFO 代码。
音频环回适配器
Dr. Rick O'Rang 音频环回适配器对于测量耳机连接器上的往返延迟非常方便。下图演示了将脉冲单次注入环路,然后允许反馈环路振荡的结果。振荡周期是往返延迟。此处未指定特定设备、软件版本和测试条件。所示结果不应外推。

图 1. 往返测量
您可能需要移除 USB 电缆以减少噪声,并调整音量级别以获得稳定的振荡。
测量输入延迟
输入延迟比输出延迟更难测量。以下测试可能有所帮助。
一种方法是首先使用 LED 和示波器方法确定输出延迟,然后使用音频反馈(拉森)测试来确定输出延迟和输入延迟的总和。这两个测量值之间的差值是输入延迟。
另一种技术是在原型设备上使用 GPIO 引脚。在外部,在向设备发送音频信号的同时脉冲 GPIO 输入。运行一个应用,该应用比较 GPIO 信号和音频数据的到达时间差。
降低延迟
为了实现低音频延迟,请在整个系统中特别注意调度、中断处理、电源管理和设备驱动程序设计。您的目标是防止平台的任何部分阻止 SCHED_FIFO
音频线程超过几毫秒。通过采用这种系统方法,您可以降低音频延迟,并获得更可预测的整体性能的额外好处。
音频欠载,当它们确实发生时,通常仅在某些条件下或仅在转换时可检测到。尝试通过启动新应用并在各种显示屏上快速滚动来对系统施加压力。但请注意,某些测试条件非常苛刻,以至于超出了设计目标。例如,获取错误报告会对系统造成如此巨大的负载,以至于在这种情况下出现欠载可能是可以接受的。
在测试欠载时
- 配置应用处理器之后的任何 DSP,使其添加的延迟最小。
- 在不同条件下运行测试,例如屏幕开启或关闭、USB 插入或拔出、WiFi 开启或关闭、蓝牙开启或关闭以及电话和数据无线电开启或关闭。
- 选择您非常熟悉的相对安静的音乐,并且很容易在其中听到欠载。
- 使用有线耳机以获得额外的灵敏度。
- 给自己休息时间,以免产生“耳朵疲劳”。
一旦找到欠载的根本原因,请减少缓冲区计数和大小以利用这一点。在分析欠载并解决欠载原因之前,急于减少缓冲区计数和大小只会导致挫败感。
工具
systrace
是一个出色的通用工具,用于诊断系统级性能故障。
dumpsys media.audio_flinger
的输出还包含一个名为“简单移动统计”的有用部分。这总结了每个音频混合和 I/O 周期的经过时间的可变性。理想情况下,所有时间测量值都应大约等于平均值或标称周期时间。如果您看到非常低的最小值或非常高的最大值,则表明存在问题,可能是高调度延迟或中断禁用时间。输出的尾部部分尤其有帮助,因为它突出了超出 +/- 3 个标准差的可变性。