高分辨率音頻

Android 10 版本包括以下針對高分辨率音頻的改進:

  • 浮點數: WAV、FLAC 編解碼器和提取器已更新以支持浮點數(24 位以上的無損精度)。 Downmix 和 Virtualizer 效果更新為浮動。 MediaPlayer (NuPlayer) 允許更新精度。
  • 高頻: WAV、FLAC 編解碼器和提取器更新為支持 192 kHz。默認 Android 提供的效果在標準頻率下測試 192 kHz 支持。允許的標準頻率為 88.2 kHz、96 kHz、176.4 kHz 和 192 kHz。
  • 多聲道:默認 Android 播放效果經過測試,可支持八聲道的多聲道。
  • 時序:時序信息包含在整個音頻框架中。

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

  • 同時客戶端輸出軌道的數量從 14 個增加到 40 個,因為有限的AudioTrack客戶端實例一直是 Android 8.x 中應用程序的一個問題。
  • 最大客戶端/服務器內存從 4 MB 增加到 32 MB(取決於總設備內存),以允許更多同步高分辨率音軌。
  • 混合曲目總數從 32 增加到 256,以防止應用程序和系統 UI 之間的資源爭用。

輸出效果變化

請參閱 Android 11 版本更改的音頻效果

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

  • 所有輸出效果強制從浮點音頻數據轉換為 int16,導致精度損失。
  • 通道數大於兩個的輸出接收器拒絕輸出效果。

在 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
    • 驗證遺留代碼。不要以為它有效!