音訊暖機

音訊暖機是指裝置中的音訊放大器電路需要多久才能完全啟動,並達到正常運作狀態。影響音訊暖機時間的主要因素是電源管理,以及用於穩定電路的任何「de-pop」邏輯。

本文說明如何評估音訊預熱時間,以及可能縮短預熱時間的方法。

評估輸出內容預熱

AudioFlinger 的 FastMixer 執行緒會自動評估輸出暖機情形,並將結果列為 dumpsys media.audio_flinger 指令的輸出內容。在暖機期間,FastMixer 會重複呼叫 write(),直到兩個 write() 之間的時間達到預期值。FastMixer 會判斷音訊暖機,方法是查看硬體抽象層 (HAL) write() 穩定所需的時間。

如要測量音訊暖機,請按照下列步驟操作,並在開機後的不同時間測試內建喇叭和有線耳機。每個輸出裝置的暖機時間通常不盡相同,而且在開機後,暖機時間也會有所不同:

  1. 確認已啟用 FastMixer。
  2. 在裝置上依序選取「設定」>「音效」>「觸控聲音」,即可啟用觸控聲音。
  3. 請確認音訊已關閉至少三秒。建議使用五秒或更長的時間,因為硬體本身可能有 AudioFlinger 所需的三秒以外的電源邏輯。
  4. 按下主畫面按鈕,你應該會聽到喀噠聲。
  5. 執行下列指令,取得經過評估的暖機作業:
    adb shell dumpsys media.audio_flinger | grep measuredWarmup
    

    輸出結果應如下所示:

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

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

    warmupCycles=X 是指需要多少個 HAL 寫入要求,才能讓 write() 的執行時間符合預期。

  6. 請測量五次,並記錄所有測量值和平均值。如果這些值不大致相同,則表示測量值可能有誤。舉例來說,如果在音訊關閉後沒有等待足夠的時間,暖機時間就會比平均值短。

評估輸入預熱

目前沒有任何工具可用於測量音訊輸入暖機。不過,您可以觀察 startRecording() 回傳所需的時間,藉此估算輸入暖機時間。

縮短預熱時間

通常,您可以透過以下方式縮短暖機時間:

  • 良好的電路設計
  • 核心裝置驅動程式中的準確時間延遲
  • 並行執行獨立的暖機作業,而非依序執行
  • 讓電路保持開啟或未重新設定時鐘 (增加閒置電力消耗)
  • 快取已計算的參數

不過,請留意不要過度最佳化。您可能會發現,需要在低暖機時間和電源轉換時不出現彈出效果之間取得平衡。