高分辨率音频

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
    • 验证旧版代码。不要假设它可以工作!