高解析度音频
本文最后更新于 2024年4月26日 晚上
Android 10 版本包括以下针对高解析度音频的改进:
- 浮动:更新了 WAV、FLAC 编解码器和提取器,以支持浮动格式(24+ 位无损精度)。缩混和虚拟环绕音效已更新为浮动格式。MediaPlayer (NuPlayer) 支持使用更新后的精度。
- 高频:更新了 WAV、FLAC 编解码器和提取器,以支持 192kHz。Android 提供的默认音效已在标准频率下进行了测试,确认其支持 192kHz。允许的标准频率为 88.2kHz、96kHz、176.4kHz 和 192kHz。
- 多通道:默认的 Android 播放音效已进行了测试,确认其支持多通道(多达 8 通道)。
- 时序:时序信息包含在整个音频框架中。
从 Android 9 开始,以下方面的改进不需要任何合作伙伴实现:
- 客户端的同时输出音轨数量从 14 增加到 40,因为对 Android 8.x 中的应用而言,有限的客户端
AudioTrack
实例已经成为一个需要解决的问题。 - 客户端/服务器的最大内存从 4MB 增加到 32MB(具体取决于设备总内存),以允许同时存在更多高解析度音轨。
- 混合音轨总数从 32 增加到 256,以防止应用和系统界面之间出现资源争用情况。
输出音效方面的变更
如需了解 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
。
验证旧代码。不要假设它有效!
转载自Android官网,原文地址: https://source.android.com/docs/core/audio/highres-effects?hl=zh-cn
高解析度音频
https://www.shangyexin.com/2024/09/02/audio-highres-effects/