音訊預熱

音頻預熱是指設備中的音頻放大器電路完全供電並達到正常工作狀態所需的時間。音訊預熱時間的主要貢獻者是電源管理和任何用於穩定電路的「消除爆音」邏輯。

本文檔介紹如何測量音訊預熱時間以及減少預熱時間的可能方法。

測量輸出預熱

AudioFlinger 的 FastMixer 執行緒自動測量輸出預熱並將其報告為dumpsys media.audio_flinger指令輸出的一部分。在預熱時,FastMixer 重複呼叫write() ,直到兩個write()之間的時間達到預期的時間。 FastMixer 透過查看硬體抽象層 (HAL) write()穩定所需的時間來確定音訊預熱。

若要測量音訊預熱,請針對內建揚聲器和有線耳機以及在啟動後的不同時間執行以下步驟。每個輸出設備和設備啟動後的預熱時間通常不同:

  1. 確保 FastMixer 已啟用。
  2. 透過在裝置上選擇設定 > 聲音 > 觸控聲音來啟用觸控聲音。
  3. 確保音訊已關閉至少三秒鐘。五秒或更長時間更好,因為硬體本身可能有自己的電源邏輯,超出了 AudioFlinger 的三秒。
  4. 按 Home,您應該會聽到咔噠聲。
  5. 執行以下命令來接收測量的預熱:
    adb shell dumpsys media.audio_flinger | grep measuredWarmup
    

    您應該看到如下輸出:

    sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
    

    measuredWarmup=X是第一組 HAL write()完成所需的 X 毫秒數。

    warmupCycles=Xwrite()的執行時間與預期相符之前需要多少個 HAL 寫入請求。

  6. 進行五次測量並記錄所有測量值以及平均值。如果它們並非全部大致相同,則測量結果可能不正確。例如,如果您在音訊關閉後沒有等待足夠長的時間,您將看到比平均值更短的預熱時間。

測量輸入預熱

目前沒有提供用於測量音頻輸入預熱的工具。但是,可以透過觀察startRecording()返回所需的時間來估計輸入預熱時間。

減少預熱時間

通常可以透過以下組合來減少預熱時間:

  • 良好的電路設計
  • 內核設備驅動程式中的精確時間延遲
  • 同時而不是依序執行獨立的預熱操作
  • 讓電路保持通電狀態或不重新配置時脈(增加空閒功耗)
  • 快取計算參數

但是,請注意過度優化。您可能會發現需要在較短的預熱時間與電源轉換時不產生爆音之間進行權衡。