Аудио высокого разрешения

В версию Android 10 включены следующие улучшения для звука высокого разрешения:

  • Плавающая точность: Кодеки WAV, FLAC и экстракторы обновлены для поддержки плавающей точности (24+ бит без потерь). Эффекты микширования и виртуализации обновлены до плавающей точности. Обновлённая точность поддерживается MediaPlayer (NuPlayer).
  • Высокая частота: кодеки WAV, FLAC и экстракторы обновлены для поддержки частоты 192 кГц. Стандартные эффекты Android протестированы на поддержку частоты 192 кГц на стандартных частотах. Допустимые стандартные частоты: 88,2 кГц, 96 кГц, 176,4 кГц и 192 кГц.
  • Многоканальность: стандартные эффекты воспроизведения Android тестируются на многоканальность и поддерживают до восьми каналов.
  • Хронометраж: информация о хронометраже включена во всю аудиоструктуру.

Начиная с Android 9, следующие улучшения не требуют какой-либо партнерской реализации:

  • Количество одновременных клиентских выходных дорожек увеличено с 14 до 40, поскольку ограниченное количество клиентских экземпляров AudioTrack было проблемой для приложений в Android 8.x.
  • Максимальный объем клиентской/серверной памяти увеличивается с 4 МБ до 32 МБ (в зависимости от общего объема памяти устройства), что позволяет воспроизводить больше одновременных аудиодорожек высокого разрешения.
  • Общее количество смешанных дорожек увеличено с 32 до 256 для предотвращения конкуренции за ресурсы между приложениями и системным пользовательским интерфейсом.

Изменения выходного эффекта

См. раздел Аудиоэффекты для изменений в версии Android 11.

До выхода Android 9 обработка цепочки эффектов была реализована в формате стереосэмплов int16. Это имело ряд ограничений:

  • Все выходные эффекты принудительно преобразуют аудиоданные с плавающей точкой в ​​int16, что приводит к потере точности.
  • Выходные эффекты были отклонены от выходных приемников с количеством каналов больше двух.

В версии Android 9 конвейер обработки цепочки эффектов обновлён для поддержки многоканального формата float. Ключевые моменты:

  • Эффекты программного обеспечения Android уже перенесены в стереоплавающий режим.
  • Устаревшие эффекты поддерживаются адаптерами формата, которые при необходимости преобразуют float в int16.

Реализовать выходные эффекты

Эталонная реализация выходных эффектов доступна в frameworks/av/media/libeffects .

Партнеры, реализующие собственные пользовательские эффекты вывода, должны сделать следующее для выпуска Android 10:

  • Обновите выходные эффекты для поддержки многоканального формата float:
    • Поддержка обработки Int16 больше не требуется.
    • Поддержка количества выходных каналов от 2 до 8 (для будущей совместимости рассмотрим количество от 1 до 30).
    • Поддержка количества входных каналов, соответствующего количеству выходных каналов для инсертных эффектов. Для дополнительных эффектов количество входных каналов по-прежнему равно 1 (моно).
    • Поддерживает как маски позиции канала (канонические), так и маски индекса канала (1 << n) - 1 .
  • Если вам необходимо продолжать поддерживать выходные эффекты устаревшего поставщика и вы не можете их обновить, проверьте устаревший код следующим образом:
    • Устаревшие эффекты вывода (вставки) должны отклонять неподдерживаемые конфигурации в EFFECT_CMD_SET_CONFIG .
      • Проверьте, что формат — int16.
      • Убедитесь, что маски входного и выходного каналов являются стерео.
      • Если какая-либо из проверок не удалась, вернуть -EINVAL .
    • Устаревшие выходные (вспомогательные) эффекты настраиваются AudioFlinger с помощью маски монофонического входного канала и потенциально многоканальных выходных масок, в зависимости от того, является ли выходной приемник многоканальным. Они должны отклонять неподдерживаемые конфигурации в EFFECT_CMD_SET_CONFIG .
      • Проверьте, что формат — int16.
      • Убедитесь, что маска входного канала — моно, а маска выходного канала — стерео.
      • Если какая-либо из проверок не удалась, вернуть -EINVAL .
    • Проверьте устаревший код. Не думайте, что он работает!