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
。
- 驗證遺留程式碼。不要以為它有效!
- 舊版輸出(插入)效果必須拒絕