В Android 13 появился стандартный способ для производителей устройств поддерживать пространственный звук и отслеживание движения головы без необходимости использовать специальные SDK или настройки.
Пространственное звучание – это технология, которая позволяет создать звуковое поле вокруг слушателя. Пространственное звучание позволяет пользователям воспринимать каналы и отдельные звуки в позициях, которые отличаются от физического расположения преобразователей аудиоустройства, используемого для воспроизведения. Например, пространственный звук позволяет слушать многоканальные саундтреки в наушниках. Благодаря пространственному аудио пользователи наушников могут слышать диалоги перед собой, а окружающие эффекты – позади, несмотря на то что в наушниках всего два преобразователя для воспроизведения звука.
Отслеживание движений головы помогает пользователю понять, как звуковая сцена, имитируемая вокруг его головы, соотносится с пространством. Эта функция эффективна только при низкой задержке, которая измеряется как время между поворотом головы пользователя и изменением положения виртуального динамика.
В Android 13 оптимизирована работа пространственного звучания и отслеживания движений головы. Обработка пространственного звучания выполняется на самом низком уровне аудиоконвейера, что позволяет добиться минимальной задержки.
Архитектура
Измененный фреймворк Android Audio и API в Android 13 упрощают внедрение технологии пространственного звучания в экосистеме.
На следующем рисунке показаны изменения, связанные с пространственным звуком, внесенные в архитектуру аудиоконвейера в Android 13:
Рисунок 1. Архитектура аудиоконвейера с пространственным звучанием
В новой модели пространственное звучание является частью аудиофреймворка и не связано с декодером. Пространственный процессор принимает смешанный аудиоконтент и преобразует его в стереопоток для HAL аудио. Отделение пространственного процессора от декодера позволяет производителям устройств выбирать разных поставщиков для этих компонентов и достигать желаемой задержки при отслеживании движений головы. Новая модель также включает в себя хуки для фреймворка датчиков, позволяющие отслеживать движения головы.
На рисунке ниже показана архитектура аудиофреймворка для пространственного звучания и отслеживания движения головы.
Рисунок 2. Системная архитектура с пространственным звучанием и отслеживанием движения головы
Все API пространственного звучания сгруппированы в общедоступном классе Spatializer на уровне приложения. Класс SpatializerHelper в интерфейсах аудиосервиса взаимодействует с компонентами системного интерфейса, чтобы управлять функциями пространственного звучания на основе возможностей платформы и подключенного устройства. Новый класс Spatializer в сервисе правил аудио создает и контролирует граф пространственного звучания, необходимый для многоканального микширования и пространственного звучания на основе возможностей, заявленных производителем, подключенных устройств и активных вариантов использования. Новый класс микшера SpatializerThread микширует многоканальные треки и передает полученный микс в механизм постобработки FX, который преобразует стереовыход в Audio HAL. Для отслеживания положения головы класс SpatializerPoseController группирует функции, связанные с отслеживанием положения головы, для взаимодействия со стеком датчиков, а также для объединения и фильтрации сигналов датчиков, которые передаются в движок эффектов. Данные датчика отслеживания положения головы передаются через протокол HID от драйвера Bluetooth.
Изменения в архитектуре аудиоконвейера Android 13 улучшают следующие аспекты:
- Уменьшение задержки между пространственным процессором и наушниками.
- Предоставление разработчикам приложений единых API.
- Управление состоянием отслеживания движений головы через системные API.
- Обнаружение датчиков отслеживания движений головы и их связывание с активными аудиоустройствами.
- Объединение сигналов от разных датчиков и вычисление положения головы, которое может быть использовано движком пространственных эффектов.
Такие функции, как компенсация смещения, обнаружение неподвижности и ограничение частоты запросов, можно реализовать с помощью служебной библиотеки отслеживания движения головы.
API пространственного звучания
В Android 13 есть система пространственного звучания и API для разработчиков.
Производители оригинального оборудования могут адаптировать поведение приложений в зависимости от доступности и состояния функций, заданных системными API. Приложения также могут настраивать атрибуты аудио, чтобы отключить пространственное звучание по эстетическим причинам или указать, что аудиопоток уже обработан для пространственного звучания.
API для разработчиков описаны в разделе Spatializer.
Производители устройств могут использовать системные API, чтобы реализовать интерфейс настроек звука и Bluetooth, который позволяет пользователям управлять состоянием пространственного звучания и отслеживанием движений головы на своих устройствах. Пользователь может включить или отключить пространственное звучание для динамика и проводных наушников в настройках звука. Настройка пространственного звучания для динамика доступна, только если реализация эффекта пространственного звучания поддерживает трансауральный режим.
Пользователь также может включить или отключить пространственное звучание и отслеживание движений головы в настройках устройства Bluetooth. Настройка отслеживания движения головы доступна, только если в Bluetooth-гарнитуре есть датчик отслеживания движения головы.
По умолчанию пространственное звучание всегда включено, если оно поддерживается. Полный список системных API приведен в Spatializer.java.
Новый тип датчика отслеживания положения головы Sensor.TYPE_HEAD_TRACKER добавлен в платформу Sensor Framework и представлен в HAL датчика как динамический датчик, подключаемый по Bluetooth или USB.
Как интегрировать пространственное звучание
Помимо реализации движка пространственного звучания, производители оборудования должны настроить платформу для поддержки пространственного звука.
Требования
Чтобы добавить пространственный звук, необходимо выполнить следующие требования:
- Аудио HAL и аудио DSP должны поддерживать выделенный выходной путь для пространственного звука.
- Для пространственного звучания с отслеживанием движения головы в наушниках должны быть встроенные датчики.
- Реализация должна соответствовать предлагаемому стандарту отслеживания движения головы по протоколу HID от Bluetooth-гарнитуры к телефону.
- Для поддержки пространственного звучания требуется Audio HAL версии 7.1.
Чтобы интегрировать пространственное звучание, выполните следующие действия:
Объявите о поддержке пространственного звука в файле
device.mkследующим образом:PRODUCT_PROPERTY_OVERRIDES += \ ro.audio.spatializer_enabled=trueAudioServiceинициализирует поддержку пространственного звучания.Задекларируйте выделенный выход для микса пространственного звучания в
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"/>Объявите библиотеку эффектов пространственного звучания в файле
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_LEVELSSPATIALIZER_PARAM_LEVELSPATIALIZER_PARAM_HEADTRACKING_SUPPORTEDSPATIALIZER_PARAM_HEADTRACKING_MODESPATIALIZER_PARAM_SUPPORTED_CHANNEL_MASKSSPATIALIZER_PARAM_SUPPORTED_SPATIALIZATION_MODESSPATIALIZER_PARAM_HEAD_TO_STAGE
Подробнее:
effect_spatializer.h.
Рекомендации
При реализации мы рекомендуем OEM-производителям следовать приведенным ниже рекомендациям.
- Используйте LE Audio, когда она доступна, чтобы обеспечить совместимость и достичь целей по задержке.
- Задержка приема-передачи сигнала от обнаружения движения датчиком до получения аудио наушниками должна быть менее 150 мс, чтобы обеспечить удобство использования.
- Для Bluetooth Classic с профилем расширенного распространения аудио (A2DP):
Проверка
Чтобы проверить работу функции пространственного звучания, используйте тесты CTS, доступные в SpatializerTest.java.
Неправильная реализация алгоритмов пространственного звучания или отслеживания положения головы может привести к тому, что не будет соблюдено рекомендованное время задержки при передаче звука туда и обратно, указанное в рекомендациях.