Версия Android 10 включает следующие улучшения для звука высокого разрешения:
- Плавающее: кодеки WAV, FLAC и экстракторы обновлены для поддержки плавающего числа (более 24 бит точности без потерь). Эффекты Downmix и Virtualizer обновлены до плавающего значения. Обновленная точность обеспечивается 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:
- Обновите выходные эффекты для поддержки многоканального формата с плавающей запятой:
- Поддержка обработки Int16 больше не требуется.
- Поддержка количества выходных каналов от 2 до 8 (для будущей совместимости учитывайте количество от 1 до 30).
- Поддержка количества входных каналов, соответствующего количеству выходных каналов для вставных эффектов. Дополнительные эффекты по-прежнему имеют счетчик входных каналов, равный 1 (моно).
- Поддерживаются как маски положения канала (канонические), так и маски индекса канала
(1 << n) - 1
.
- Если вам необходимо продолжать поддерживать выходные эффекты устаревших поставщиков и вы не можете их обновить, проверьте устаревший код следующим образом:
- Устаревшие эффекты вывода (вставки) должны отклонять неподдерживаемые конфигурации в
EFFECT_CMD_SET_CONFIG
.- Убедитесь, что формат — int16.
- Убедитесь, что маски входного и выходного каналов являются стереофоническими.
- Если какая-либо проверка не удалась, верните
-EINVAL
.
- Устаревшие выходные (вспомогательные) эффекты настраиваются AudioFlinger с маской монофонического входного канала и потенциально многоканальными масками выходного канала, в зависимости от того, является ли выходной приемник многоканальным. Они должны отклонить неподдерживаемые конфигурации в
EFFECT_CMD_SET_CONFIG
.- Убедитесь, что формат — int16.
- Убедитесь, что маска входного канала — моно, а маска выходного канала — стерео.
- Если какая-либо проверка не удалась, верните
-EINVAL
.
- Проверьте устаревший код. Не думайте, что это работает!
- Устаревшие эффекты вывода (вставки) должны отклонять неподдерживаемые конфигурации в