Android 10 版本包含以下高分辨率音频方面的改进
- Float:WAV、FLAC 编解码器和提取器已更新,以支持浮点(24 位以上的无损精度)。下混和虚拟化器效果已更新为浮点。MediaPlayer (NuPlayer) 允许更新的精度。
- 高频:WAV、FLAC 编解码器和提取器已更新,以支持 192 kHz。默认 Android 提供的效果已在标准频率下针对 192 kHz 支持进行了测试。允许的标准频率为 88.2 kHz、96 kHz、176.4 kHz 和 192 kHz。
- 多声道:默认 Android 播放效果已针对最多八个声道的多声道支持进行了测试。
- 时序:时序信息包含在整个音频框架中。
从 Android 9 开始,以下改进不需要任何合作伙伴实现
- 同时客户端输出轨道数从 14 条增加到 40 条,因为在 Android 8.x 中,
AudioTrack
的客户端实例受限一直是应用的一个问题。 - 最大客户端/服务器内存从 4 MB 增加到 32 MB(取决于设备总内存),以允许更多同步高分辨率音频轨道。
- 混合轨道总数从 32 条增加到 256 条,以防止应用和系统 UI 之间出现资源争用。
输出效果更改
请参阅音频效果,了解 Android 11 版本更改。
在 Android 9 版本之前,效果链处理以立体声 int16 采样格式实现。这有几个限制
- 所有输出效果都强制将浮点音频数据转换为 int16,从而导致精度损失。
- 输出效果从通道数大于 2 的输出接收器中被拒绝。
在 Android 9 版本中,效果链处理流水线已升级为支持多声道浮点格式。要点:
- Android 软件效果已迁移到立体声浮点。
- 旧版效果通过格式适配器获得支持,格式适配器会根据需要将浮点转换为 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
。
- 验证旧版代码。不要假设它可以工作!
- 旧版输出(插入)效果必须拒绝