測量音訊延遲

本頁介紹了測量輸入和輸出延遲的常用方法。

測量輸出延遲

有多種技術可用於測量輸出延遲,這些技術具有不同程度的準確性和易於運行的程度,如下所述。另請參閱測試電路以取得範例測試環境。

LED 和示波器測試

此測試測量與設備 LED 指示燈相關的延遲。如果您的生產設備沒有 LED,您可以將 LED 安裝在原型設備上。為了在具有裸露電路的原型設備上獲得更高的精度,請將示波器探頭直接連接到 LED 以繞過光感測器延遲。

如果您無法在生產設備或原型設備上安裝 LED,請嘗試以下解決方法:

  • 使用通用輸入/輸出 (GPIO) 引腳來實現相同目的。
  • 使用 JTAG 或其他偵錯連接埠。
  • 使用螢幕背光。這可能存在風險,因為背光可能具有不可忽略的延遲,並且可能導致延遲讀數不準確。

要進行此測試:

  1. 運行一個應用程序,在輸出音訊的同時定期使 LED 發出脈衝。

    注意:要獲得有用的結果,在測試應用程式中使用正確的 API 至關重要,這樣您才能練習快速音訊輸出路徑。請參閱減少後台延遲的設計

  2. 在 LED 旁邊放置一個光感測器。
  3. 將雙通道示波器的探頭連接到有線耳機插孔(線路輸出)和光感測器。
  4. 使用示波器測量觀察線路輸出訊號與光感測器訊號之間的時間差。

時間差是近似的音訊輸出延遲(假設 LED 延遲和光感測器延遲均為零)。通常,LED 和光感測器的延遲時間相對較低,約為一毫秒或更短,低到足以忽略不計。

測量往返延遲

往返延遲是輸出延遲和輸入延遲總和。

拉森試驗

最簡單的延遲測試之一是音訊回饋(拉森效應)測試。這透過對脈衝響應環路進行計時來提供組合輸出和輸入延遲的粗略測量。由於測試的性質,該測試本身對於詳細分析不是很有用,但它對於校準其他測試和建立上限非常有用。

此方法不會分解組件時間,這在輸出延遲和輸入延遲獨立時很重要。因此,不建議使用此方法來單獨測量精確的輸出延遲或輸入延遲值,但對於建立粗略估計可能很有用。

裝置揚聲器的輸出延遲可能明顯大於耳機連接器的輸出延遲。這是由於揚聲器的校正和保護。

要進行此測試:

  1. 運行一個應用程序,從麥克風捕獲音訊並立即透過揚聲器播放捕獲的資料。
  2. 在外部創建聲音,例如用麥克風敲擊鉛筆。此雜訊產生回饋環路。或者,可以使用軟體將脈衝注入到迴路中。
  3. 測量反饋脈衝之間的時間以獲得輸出延遲、輸入延遲和應用程式開銷的總和。

以下是獲取用於拉森測試的應用程式的一些資源:

音訊環回加密狗

Dr. Rick O'Rang 音訊環回轉接器可輕鬆測量耳機連接器上的往返延遲。下圖示範了向環路注入一次脈衝,然後讓反饋環路振盪的結果。振盪週期就是往返延遲。具體設備、軟體版本、測試條件這裡不做具體說明。顯示的結果不應進行推論。

往返測量

圖 1.往返測量

您可能需要移除 USB 連接線以減少噪音,並調整音量以獲得穩定的振盪。

測量輸入延遲

輸入延遲比輸出延遲更難測量。以下測試可能會有所幫助。

一種方法是先使用 LED 和示波器方法來確定輸出延遲,然後使用音訊回饋 (Larsen) 測試來確定輸出延遲和輸入延遲總和。這兩個測量值之間的差異是輸入延遲。

另一種技術是在原型設備上使用 GPIO 引腳。在外部,向設備提供音訊訊號的同時對 GPIO 輸入施加脈衝。運行一個應用程式來比較 GPIO 訊號和音訊資料的到達時間差異。

減少延遲

為了實現低音訊延遲,請特別注意整個系統的調度、中斷處理、電源管理和裝置驅動程式設計。您的目標是防止平台的任何部分阻塞SCHED_FIFO音訊線程超過幾毫秒。透過採用這種系統方法,您可以減少音訊延遲並獲得整體效能更可預測的附帶好處。

當音訊欠載確實發生時,通常僅在某些條件下或僅在轉換時才能偵測到。嘗試透過啟動新應用程式並快速捲動各種顯示器來給系統施加壓力。但請注意,某些測試條件壓力太大,以至於超出了設計目標。例如,取得錯誤報告會為系統帶來巨大的負載,在這種情況下出現欠載是可以接受的。

測試欠載時:

  • 在應用處理器之後配置任何 DSP,以使其增加最小的延遲。
  • 在不同條件下執行測試,例如開啟或關閉螢幕、插入或拔出 USB、開啟或關閉 WiFi、開啟或關閉藍牙、開啟或關閉電話和數據無線電。
  • 選擇您非常熟悉且容易聽到低音的相對安靜的音樂。
  • 使用有線耳機以獲得額外的靈敏度。
  • 讓自己休息一下,這樣就不會出現「耳朵疲勞」。

一旦找到了欠載運行的根本原因,就可以減少緩衝區數量和大小以利用這一點。在分析欠載運行並修復欠載運行原因之前急於減少緩衝區數量和大小的方法只會導致挫折感。

工具

systrace是一個出色的通用工具,用於診斷系統級效能故障。

dumpsys media.audio_flinger的輸出還包含一個有用的部分,稱為「簡單移動統計」。它總結了每個音訊混音和 I/O 週期所用時間的變化。理想情況下,所有時間測量值應大約等於平均或標稱循環時間。如果您看到非常低的最小值或很高的最大值,則表示有問題,可能是較高的調度延遲或中斷停用時間。輸出的尾部特別有用,因為它突出顯示了超出 +/- 3 標準差的變異性。