本頁介紹了測量輸入和輸出延遲的常用方法。
測量輸出延遲
有幾種技術可用於測量輸出延遲,具有不同程度的準確度和易於運行,如下所述。另請參閱測試電路以獲取示例測試環境。
LED和示波器測試
該測試測量與設備 LED 指示燈相關的延遲。如果您的生產設備沒有 LED,您可以將 LED 安裝在原型設備上。為了在具有裸露電路的原型設備上獲得更高的精度,請將一個示波器探頭直接連接到 LED 以繞過光傳感器延遲。
如果您無法在生產設備或原型設備上安裝 LED,請嘗試以下解決方法:
- 為相同目的使用通用輸入/輸出 (GPIO) 引腳。
- 使用 JTAG 或其他調試端口。
- 使用屏幕背光。這可能是有風險的,因為背光可能具有不可忽略的延遲,並可能導致延遲讀數不准確。
要進行此測試:
- 運行一個應用程序,該應用程序在輸出音頻的同時周期性地脈衝 LED。
注意:要獲得有用的結果,在測試應用程序中使用正確的 API 至關重要,這樣您就可以使用快速音頻輸出路徑。有關背景,請參閱減少延遲的設計。
- 在 LED 旁邊放置一個光傳感器。
- 將雙通道示波器的探頭連接到有線耳機插孔(線路輸出)和光傳感器。
- 使用示波器測量觀察線路輸出信號與光傳感器信號之間的時間差。
時間差是近似的音頻輸出延遲,假設 LED 延遲和光傳感器延遲都為零。通常,LED 和光傳感器都具有大約 1 毫秒或更短的相對較低的延遲,這足夠低到可以忽略不計。
測量往返延遲
往返延遲是輸出延遲和輸入延遲的總和。
拉森檢驗
最簡單的延遲測試之一是音頻反饋(拉森效應)測試。這通過定時脈衝響應循環提供了組合輸出和輸入延遲的粗略測量。由於測試的性質,該測試本身對於詳細分析不是很有用,但它對於校准其他測試和建立上限很有用。
此方法不會分解組件時間,這在輸出延遲和輸入延遲獨立時很重要。因此,不建議使用此方法單獨測量精確的輸出延遲或輸入延遲值,但可能對建立粗略估計有用。
設備上揚聲器的輸出延遲可能遠大於耳機連接器的輸出延遲。這是由於揚聲器校正和保護。
要進行此測試:
- 運行從麥克風捕獲音頻並立即通過揚聲器播放捕獲的數據的應用程序。
- 在外部創建聲音,例如用麥克風敲擊鉛筆。這種噪聲會產生一個反饋迴路。或者,可以使用軟件將脈衝注入循環。
- 測量反饋脈沖之間的時間以獲得輸出延遲、輸入延遲和應用程序開銷的總和。
以下是獲取用於 Larsen 測試的應用程序的一些資源:
- Dr. Rick O'Rang loopback 應用程序是一款用於音頻反饋測試的 Android 應用程序。您可以從 Google Play 下載應用程序或從 GitHub 獲取源代碼。
- 我們還在slesTestFeedback.cpp上發布了一個示例實現。這是一個命令行應用程序,使用平台構建環境構建;但是,在其他環境中採用代碼應該很簡單。您還需要位於
audio_utils
庫中的非阻塞FIFO 代碼。
音頻環回加密狗
Dr. Rick O'Rang 音頻環回加密狗可方便地測量耳機連接器上的往返延遲。下圖展示了向迴路中註入一次脈衝,然後讓反饋迴路振蕩的結果。振盪週期是往返延遲。具體器件、軟件版本、測試條件在此不作說明。顯示的結果不應外推。
您可能需要拔下 USB 線以減少噪音,並調整音量以獲得穩定的振盪。
測量輸入延遲
輸入延遲比輸出延遲更難測量。以下測試可能會有所幫助。
一種方法是首先使用 LED 和示波器方法確定輸出延遲,然後使用音頻反饋 (Larsen) 測試確定輸出延遲和輸入延遲之和。這兩個測量值之間的差異是輸入延遲。
另一種技術是在原型設備上使用 GPIO 引腳。在外部,向設備提供音頻信號的同時脈衝 GPIO 輸入。運行一個應用程序,比較 GPIO 信號和音頻數據的到達時間差異。
減少延遲
要實現低音頻延遲,請在整個系統中特別注意調度、中斷處理、電源管理和設備驅動程序設計。您的目標是防止平台的任何部分阻塞SCHED_FIFO
音頻線程超過幾毫秒。通過採用這種系統化的方法,您可以減少音頻延遲並獲得整體性能更可預測的附帶好處。
音頻欠載發生時,通常僅在某些條件下或僅在轉換時才能檢測到。嘗試通過啟動新應用程序和快速滾動各種顯示器來給系統施加壓力。但請注意,某些測試條件壓力太大,超出了設計目標。例如,獲取錯誤報告會給系統帶來如此巨大的負載,以至於在這種情況下出現欠載是可以接受的。
測試欠載時:
- 在應用處理器之後配置任何 DSP,以便它增加最小的延遲。
- 在不同條件下運行測試,例如打開或關閉屏幕、插入或拔出 USB、打開或關閉 WiFi、打開或關閉藍牙以及打開或關閉電話和數據無線電。
- 選擇你非常熟悉的相對安靜的音樂,並且很容易聽到低調的音樂。
- 使用有線耳機以獲得額外的靈敏度。
- 讓自己休息一下,這樣你就不會感到“耳朵疲勞”。
一旦您找到了欠載的根本原因,請減少緩衝區計數和大小以利用這一點。在分析欠載和修復欠載原因之前減少緩衝區計數和大小的急切方法只會導致挫敗感。
工具
systrace
是一個出色的通用工具,用於診斷系統級性能故障。
dumpsys media.audio_flinger
的輸出還包含一個有用的部分,稱為“簡單移動統計信息”。這匯總了每個音頻混合和 I/O 週期的經過時間的可變性。理想情況下,所有時間測量值應該大約等於平均或標稱週期時間。如果您看到非常低的最小值或非常高的最大值,這表明存在問題,可能是高調度延遲或中斷禁用時間。輸出的尾部特別有用,因為它突出了超出 +/- 3 個標準偏差的可變性。