音訊暖身是指裝置音訊擴大器電路經過的時間 且已完全啟動,並達到正常運作的狀態。影響音訊暖機時間的主要因素是電源管理和任何用於穩定電路的「de-pop」邏輯。
本文說明如何測量音訊暖身時間,以及降低這類音量的可能原因 暖身時間
測量輸出內容暖身
AudioFlinger 的 FastMixer 執行緒會自動測量輸出暖機
並回報為 dumpsys media.audio_flinger
指令的輸出內容。
暖身時,FastMixer 會呼叫 write()
直到兩個 write()
之間的時間達到預期值為止。
FastMixer 會顯示硬體抽象化時間,判斷音訊暖身
圖層 (HAL) write()
需要保持穩定。
如要測量音訊暖機情況,請針對內建喇叭和有線耳機,按照下列步驟操作 以及啟動後不同的時間每部輸出裝置的暖機時間通常都不同 然後執行下列步驟:
- 確認已啟用 FastMixer。
- 依序選取「設定」圖示 > 即可啟用觸控音效音效 >輕觸裝置上的音效。
- 請確認音訊已關閉至少三秒。建議使用五秒或更長的時間,因為硬體本身可能有 AudioFlinger 所需的三秒以外的電源邏輯。
- 按下「主畫面」按鈕,您應該會聽到喀噠聲。
- 執行下列指令,接收經過測量的暖機程序:
adb shell dumpsys media.audio_flinger | grep measuredWarmup
輸出內容應如下所示:
sampleRate=44100 frameCount=256 measuredWarmup=X ms, warmupCycles=X
measuredWarmup=X
是 X 毫秒 第一組 HALwrite()
就完成了warmupCycles=X
是指需要多少個 HAL 寫入要求,才能讓write()
的執行時間符合預期。 - 取出五項測量值,並記錄它們與平均值。 如果這些指標不同 則表示測量結果可能不正確。 舉例來說,如果您在音訊關閉後沒有等待足夠的時間,暖機時間就會比平均值短。
評估輸入暖機
目前沒有任何工具可用於測量音訊輸入暖機。不過,您可以觀測資料,估算輸入暖機時間 startRecording() 所需時間 即可傳回值。
縮短暖身時間
您可透過下列方式減少暖身時間:
- 良好的電路設計
- 核心裝置驅動程式可準確延遲
- 並行執行獨立的暖機作業,而非依序執行
- 離開電路電源,或不重新設定時鐘 (增加閒置耗電量)
- 快取運算參數
但要避免過度最佳化,您可能會注意到 不必在暖機時間短的情況下 但沒有在電源轉換時彈出