В 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.
- Проверьте устаревший код. Не думайте, что все работает!
- Устаревшие эффекты вывода (вставки) должны отклонять неподдерживаемые конфигурации в