Android 13 представляет стандартный способ для OEM-производителей поддерживать пространственное аудио и отслеживание положения головы без необходимости специальных настроек или пакетов SDK для конкретных производителей.
Пространственное аудио — это технология, используемая для создания звукового поля вокруг слушателя. Пространственное аудио позволяет пользователям воспринимать каналы и отдельные звуки в позициях, отличных от физического положения преобразователей аудиоустройства, используемого для воспроизведения. Например, пространственное аудио позволяет слушать многоканальную звуковую дорожку через наушники. Используя пространственное аудио, пользователи наушников могут воспринимать диалог перед собой и объёмные звуковые эффекты позади себя, несмотря на наличие всего двух преобразователей для воспроизведения.
Отслеживание положения головы помогает пользователю понять природу пространственной звуковой сцены, имитируемой вокруг его головы. Этот эффект эффективен только при низкой задержке, которая измеряется как время между моментом, когда пользователь совершает движение головой, и моментом, когда он слышит соответствующее перемещение виртуального динамика.
Android 13 оптимизируется для пространственного звука и отслеживания положения головы, предлагая обработку пространственного звука на самом низком уровне в аудиоконвейере для достижения минимально возможной задержки.
Архитектура
Модифицированная аудиоплатформа и API Android в Android 13 облегчают внедрение технологии пространственного звука во всей экосистеме.
На следующем рисунке показаны изменения, связанные с пространственным звуком, внесенные в архитектуру аудиоконвейера в Android 13:
Рисунок 1. Архитектура аудиоконвейера с использованием пространственного преобразователя
В новой модели спейслайзер является частью аудиофреймворка и отделен от декодера. Спейслайзер принимает смешанный аудиоконтент и преобразует стереопоток в аудиоинтерфейс HAL. Разделение спейслайзера и декодера позволяет OEM-производителям выбирать разных поставщиков для декодера и спейслайзера и достигать желаемой задержки прохождения сигнала туда и обратно для отслеживания положения головы. Эта новая модель также включает в себя привязки к фреймворку сенсора для отслеживания положения головы.
На следующем рисунке показана системная архитектура аудиофреймворка для эффекта пространственного преобразования и отслеживания положения головы:
Рисунок 2. Архитектура системы с пространственной приставкой и отслеживанием положения головы
Все API пространственного звука сгруппированы в общедоступном классе Spatializer
на уровне приложения. Класс SpatializerHelper
в аудиосервисе взаимодействует с компонентами системного пользовательского интерфейса для управления функциональностью, связанной с пространственным преобразованием, на основе возможностей платформы и подключенного устройства. Новый класс Spatializer
в сервисе аудиополитики создает и управляет пространственным аудиографом, необходимым для многоканального микширования и пространственного преобразования, на основе возможностей, заявленных OEM , подключенными устройствами и активными вариантами использования. Новый класс микшера SpatializerThread
микширует многоканальные дорожки и передает полученный микс в движок постобработки эффектов, который выводит стереосигнал в Audio HAL. Для отслеживания головы класс SpatializerPoseController
группирует функции, связанные с отслеживанием головы, для взаимодействия со стеком датчиков и для объединения и фильтрации сигналов датчиков, которые подаются в движок эффектов. Данные датчика отслеживания головы передаются по протоколу HID от драйвера Bluetooth.
Изменения в архитектуре аудиоконвейера Android 13 улучшают следующее:
- Уменьшение задержки между спейсилером и наушниками.
- Предоставление унифицированных API для обслуживания разработчиков приложений.
- Управление состоянием отслеживания положения головы через системные API.
- Обнаружение датчиков слежения за положением головы и их связывание с активными аудиоустройствами.
- Объединение сигналов от различных датчиков и вычисление положения головы, которое может быть использовано движком эффекта пространственного преобразователя.
Такие функции, как компенсация смещения, обнаружение неподвижности и ограничение скорости, можно реализовать с помощью библиотеки утилит отслеживания положения головы .
API пространственного звука
Android 13 предлагает систему пространственного звука и API-интерфейсы для разработчиков.
OEM-производители могут адаптировать поведение приложений в зависимости от доступности функций и их состояния, которое задаётся системными API. Приложения также могут настраивать аудиоатрибуты, чтобы отключать пространственное аудио по эстетическим соображениям или указывать на то, что аудиопоток уже обработан для пространственного аудио .
Для API, доступных разработчикам, см. Spatializer
.
OEM-производители могут использовать системные API для реализации пользовательского интерфейса настроек звука и Bluetooth, который позволяет пользователю управлять состоянием пространственного звука и функцией отслеживания положения головы на своем устройстве. Пользователь может включить или отключить пространственное звучание для динамика и проводных наушников в интерфейсе настроек звука. Настройка пространственного звука для динамика доступна только в том случае, если реализация эффекта «Спейслизер» поддерживает трансауральный режим.
Пользователь также может включить или отключить пространственное аудио и отслеживание положения головы в настройках Bluetooth-устройства для каждого устройства. Функция отслеживания положения головы доступна только при наличии датчика отслеживания положения головы на Bluetooth-гарнитуре.
Настройки по умолчанию для пространственного звука всегда включены, если эта функция поддерживается. Полный список системных API см. в Spatializer.java
.
Новый тип датчика слежения за головой Sensor.TYPE_HEAD_TRACKER
добавлен в фреймворк Sensor и предоставляется Sensor HAL как динамический датчик по Bluetooth или USB.
Интеграция пространственного звука
Наряду с реализацией механизма эффекта пространственного звука OEM-производители должны настроить свою платформу для поддержки пространственного звука.
Требования
Для интеграции пространственного звука необходимо выполнить следующие требования:
- Аудио HAL и аудио DSP должны поддерживать выделенный выходной путь для пространственного звука.
- Для пространственного звука с отслеживанием положения головы наушники должны иметь встроенные датчики отслеживания положения головы.
- Реализация должна соответствовать предлагаемому стандарту отслеживания положения головы по протоколу HID от Bluetooth-гарнитуры к телефону.
- Для поддержки пространственного звука требуется Audio HAL v7.1 .
Интегрируйте пространственное аудио, выполнив следующие шаги:
Объявите поддержку пространственного звука в файле
device.mk
следующим образом:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=true
Это заставляет
AudioService
инициализировать поддержку пространственного преобразователя.Объявите выделенный вывод для пространственного аудиомикса в
audio_policy_configuration.xml
следующим образом:<audioPolicyConfiguration> <modules> <module> <mixPorts> <mixPort name="spatializer" role="source" flags="AUDIO_OUTPUT_FLAG_SPATIALIZER"> <profile name="sa" format="AUDIO_FORMAT_PCM_FLOAT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
Объявите библиотеку эффектов Spatializer в
audio_effects.xml
следующим образом:<audio_effects_conf> <libraries> <library name="spatializer_lib" path="libMySpatializer.so"/> … </libraries> <effects> <effect name="spatializer" library="spatializer_lib" uuid="myunique-uuid-formy-spatializereffect"/>
Поставщики, реализующие эффект пространственного преобразования, должны соблюдать следующие требования:
- Базовая конфигурация и управление идентичны другим эффектам в Effect HAL.
Конкретные параметры, необходимые фреймворку для обнаружения поддерживаемых возможностей и конфигураций, такие как:
-
SPATIALIZER_PARAM_SUPPORTED_LEVELS
-
SPATIALIZER_PARAM_LEVEL
-
SPATIALIZER_PARAM_HEADTRACKING_SUPPORTED
-
SPATIALIZER_PARAM_HEADTRACKING_MODE
-
SPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKS
-
SPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODES
-
SPATIALIZER_PARAM_HEAD_TO_STAGE
-
Более подробную информацию см.
effect_spatializer.h
.
Рекомендации
Мы рекомендуем производителям оригинального оборудования следовать следующим рекомендациям при внедрении:
- По возможности используйте LE-аудио для облегчения взаимодействия и достижения целевых показателей задержки.
- Для хорошего пользовательского опыта задержка туда и обратно от обнаружения движения датчика до получения звука наушниками должна быть менее 150 мс.
- Для Bluetooth (BT) Classic с расширенным профилем распространения звука (A2DP):
- Используйте кодек с низкой задержкой, например Opus .
- Реализовать функции управления задержкой в Audio HAL . Это позволяет оптимизировать энергопотребление и производительность при отключенном отслеживании положения головы, а также отключить отслеживание положения головы в неоптимальных условиях.
Проверка
Для проверки функциональности функции пространственного звука используйте тесты CTS, доступные в SpatializerTest.java
.
Неправильная реализация алгоритмов пространственного позиционирования или отслеживания положения головы может привести к невыполнению рекомендаций по задержке приема-передачи, указанных в Рекомендациях .