音訊暖機是指裝置中的音訊放大器電路需要多久才能完全啟動,並達到正常運作狀態。影響音訊暖機時間的主要因素是電源管理,以及用於穩定電路的任何「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
是第一組 HALwrite()
完成所需的毫秒數 X。warmupCycles=X
是指需要多少個 HAL 寫入要求,才能讓write()
的執行時間符合預期。 - 請測量五次,並記錄所有測量值和平均值。如果這些值不大致相同,則表示測量值可能有誤。舉例來說,如果在音訊關閉後沒有等待足夠的時間,暖機時間就會比平均值短。
評估輸入預熱
目前沒有任何工具可用於測量音訊輸入暖機。不過,您可以觀察 startRecording() 回傳所需的時間,藉此估算輸入暖機時間。
縮短預熱時間
通常,您可以透過以下方式縮短暖機時間:
- 良好的電路設計
- 核心裝置驅動程式中的準確時間延遲
- 並行執行獨立的暖機作業,而非依序執行
- 讓電路保持開啟或未重新設定時鐘 (增加閒置電力消耗)
- 快取已計算的參數
不過,請留意不要過度最佳化。您可能會發現,需要在低暖機時間和電源轉換時不出現彈出效果之間取得平衡。