高分辨率音頻

Android 10 版本包含以下針對高解析度音訊的改進:

  • 浮點: WAV、FLAC 編解碼器和提取器已更新以支援浮點(24 位元以上無損精度)。縮混和虛擬器效果已更新為浮動。 MediaPlayer (NuPlayer) 允許更新精確度。
  • 高頻: WAV、FLAC 編解碼器和提取器更新為支援 192 kHz。預設 Android 提供的效果經過測試,可在標準頻率下支援 192 kHz。允許的標準頻率為 88.2 kHz、96 kHz、176.4 kHz 和 192 kHz。
  • 多頻道:預設的 Android 播放效果經過測試,支援多頻道至 8 個頻道。
  • 時序:時序資訊包含在整個音訊框架中。

從 Android 9 開始,以下改進不需要任何合作夥伴實施:

  • 同時客戶端輸出軌道的數量從 14 個增加到 40 個,因為AudioTrack的客戶端實例有限一直是 Android 8.x 中應用程式的問題。
  • 最大客戶端/伺服器記憶體從 4 MB 增加到 32 MB(取決於裝置總記憶體),以允許同時播放更多高解析度音軌。
  • 混合軌道總數從 32 個增加到 256 個,以防止應用程式和系統 UI 之間的資源爭用。

輸出效果變化

請參閱 Android 11 版本變更的音訊效果

在 Android 9 版本之前,效果鏈處理以 Stereo int16 樣本格式實作。這有幾個限制:

  • 所有輸出效果都強制從浮點音訊資料轉換為 int16,導致精確度損失。
  • 通道數大於 2 的輸出接收器會拒絕輸出效果。

在Android 9版本中,效果鏈處理管道升級為支援多通道浮點格式。關鍵點:

  • Android 軟體效果已移轉至立體聲浮動。
  • 格式轉接器支援舊版效果,可依需求將 float 轉換為 int16。

實現輸出效果

輸出效果的參考實作可在frameworks/av/media/libeffects下找到。

實作自己的自訂輸出效果的合作夥伴應針對 Android 10 版本執行以下操作:

  • 更新輸出效果以支援多通道浮動格式:
    • 不再需要 Int16 處理支援。
    • 支援 2-8 個輸出通道數(為了將來的相容性,請考慮 1-30 個輸出通道數)。
    • 支援輸入通道數與插入效果的輸出通道數相符。輔助效果的輸入通道數繼續為 1(單聲道)。
    • 支援通道位置遮罩(規範)和通道索引遮罩(1 << n) - 1
  • 如果您必須繼續支援舊版供應商輸出效果並且無法更新它們,請按如下方式驗證舊版代碼:
    • 舊版輸出(插入)效果必須拒絕EFFECT_CMD_SET_CONFIG中不支援的配置。
      • 檢查格式是否為 int16。
      • 檢查輸入和輸出通道遮罩是否為立體聲。
      • 如果任一檢查失敗,則傳回-EINVAL
    • 傳統輸出(輔助)效果由 AudioFlinger 配置為單聲道輸入通道遮罩和潛在的多通道輸出通道遮罩,具體取決於輸出接收器是否為多通道。他們必須拒絕EFFECT_CMD_SET_CONFIG中不支援的配置。
      • 檢查格式是否為 int16。
      • 檢查輸入聲道遮罩是否為單聲道,輸出聲道遮罩是否為立體聲。
      • 如果任一檢查失敗,則傳回-EINVAL
    • 驗證遺留程式碼。不要以為它有效!