音頻預熱是設備中的音頻放大器電路完全供電並達到其正常工作狀態所需的時間。音頻預熱時間的主要貢獻者是電源管理和任何穩定電路的“de-pop”邏輯。
本文檔描述瞭如何測量音頻預熱時間以及減少預熱時間的可能方法。
測量輸出預熱
AudioFlinger 的 FastMixer 線程自動測量輸出預熱並將其作為dumpsys media.audio_flinger
命令輸出的一部分進行報告。在預熱時,FastMixer 重複調用write()
直到兩個write()
之間的時間達到預期的數量。 FastMixer 通過查看硬件抽象層 (HAL) write()
需要多長時間來穩定音頻來確定音頻預熱。
要測量音頻預熱,請在啟動後的不同時間對內置揚聲器和有線耳機執行這些步驟。每個輸出設備和啟動設備後的預熱時間通常不同:
- 確保啟用了 FastMixer。
- 通過在設備上選擇設置 > 聲音 > 觸摸聲音來啟用觸摸聲音。
- 確保音頻已關閉至少三秒鐘。 5 秒或更長更好,因為硬件本身可能有自己的電源邏輯,超出了 AudioFlinger 的 3 秒。
- 按 Home,您應該會聽到咔嗒聲。
- 運行以下命令以接收測量的預熱:
adb shell dumpsys media.audio_flinger | grep measuredWarmup
你應該看到這樣的輸出:
sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
measuredWarmup=X
是完成第一組 HALwrite()
所需的 X 毫秒數。warmupCycles=X
是在write()
的執行時間與預期相符之前所花費的 HAL 寫入請求的數量。 - 進行五次測量並記錄它們,以及平均值。如果它們並非全部大致相同,則可能是測量不正確。例如,如果您在關閉音頻後沒有等待足夠長的時間,您將看到比平均值更短的預熱時間。
測量輸入預熱
目前沒有提供用於測量音頻輸入預熱的工具。但是,可以通過觀察startRecording()返回所需的時間來估計輸入預熱時間。
減少預熱時間
預熱時間通常可以通過以下組合來減少:
- 良好的電路設計
- 內核設備驅動程序中的準確時間延遲
- 同時執行獨立的預熱操作,而不是順序執行
- 保持電路通電或不重新配置時鐘(增加空閒功耗)
- 緩存計算參數
但是,請注意過度優化。您可能會發現需要在較短的預熱時間與電源轉換時沒有爆裂聲之間進行權衡。