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