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

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

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

В Android 9 и более поздних версиях следующие улучшения не требуют реализации со стороны партнеров:

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

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

Подробнее об изменениях в выпуске Android 11…

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

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

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

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

Как реализовать эффекты вывода

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

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

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