Пространственный звук и отслеживание головы

Android 13 предоставляет производителям оборудования стандартный способ поддержки пространственного звука и отслеживания положения головы без необходимости в настройках или SDK, специфичных для конкретного производителя.

Пространственное аудио — это технология, используемая для создания звукового поля, окружающего слушателя. Пространственное аудио позволяет пользователям воспринимать каналы и отдельные звуки в положениях, отличающихся от физического положения преобразователей аудиоустройства, используемого для воспроизведения. Например, пространственное аудио дает пользователю возможность слушать многоканальную звуковую дорожку через наушники. Используя пространственное аудио, пользователи наушников могут воспринимать диалоги перед собой и объемные эффекты позади себя, несмотря на наличие всего двух преобразователей для воспроизведения.

Отслеживание положения головы помогает пользователю понять природу пространственно-ориентированной звуковой сцены, имитируемой вокруг его головы. Этот эффект эффективен только при низкой задержке, которая измеряется как время между движением головы пользователя и моментом, когда он слышит соответствующее перемещение виртуального динамика.

Android 13 оптимизирует обработку пространственного звука и отслеживание положения головы, предлагая обработку пространственного звука на самом низком уровне в аудиоконвейере для достижения минимальной задержки.

Архитектура

Модифицированная аудиоплатформа и API Android 13 облегчают внедрение технологии пространственного звука во всей экосистеме.

На следующем рисунке показаны изменения в архитектуре аудиоконвейера, связанные с пространственным звуком, внесенные в Android 13:

spatial-audio

Рисунок 1. Архитектура аудиоконвейера с пространственным модулятором.

В новой модели пространственный модулятор является частью аудиосистемы и отделен от декодера. Пространственный модулятор принимает смешанный аудиоконтент и преобразует его в стереопоток для Audio HAL. Разделение пространственного модулятора и декодера позволяет производителям оборудования выбирать разных поставщиков декодера и пространственного модулятора и достигать желаемой задержки передачи сигнала для отслеживания положения головы. Эта новая модель также включает в себя возможности подключения к сенсорной системе для отслеживания положения головы.

На следующем рисунке показана архитектура системы аудиофреймворка для эффекта пространственного позиционирования и отслеживания положения головы:

spatial-sys-arch

Рисунок 2. Архитектура системы с пространственным преобразователем и отслеживанием положения головы.

Все API пространственного звука сгруппированы в общедоступном классе Spatializer на уровне приложения. Класс SpatializerHelper в службе аудио взаимодействует с компонентами системного пользовательского интерфейса для управления функциональностью, связанной с пространственным анализом, в зависимости от платформы и возможностей подключенного устройства. Новый класс Spatializer в службе политики аудио создает и управляет графом пространственного звука, необходимым для многоканального микширования и пространственной обработки, на основе возможностей, заявленных производителем оборудования , подключенными устройствами и активными сценариями использования. Новый класс микшера SpatializerThread микширует многоканальные дорожки и передает полученный микс в механизм постобработки эффектов, который выводит стереозвук на Audio HAL. Для отслеживания положения головы класс SpatializerPoseController группирует функции, связанные с отслеживанием положения головы, для взаимодействия со стеком датчиков, а также для объединения и фильтрации сигналов датчиков, поступающих в механизм эффектов. Данные датчиков отслеживания положения головы передаются по протоколу HID от драйвера Bluetooth.

Изменения в архитектуре аудиопроцессора Android 13 улучшают следующие аспекты:

  • Снижение задержки между пространственным преобразователем и наушниками.
  • Предоставление унифицированных API для разработчиков приложений.
  • Управление состоянием отслеживания положения головы осуществляется через системные API.
  • Обнаружение датчиков отслеживания положения головы и их сопряжение с активными аудиоустройствами.
  • Объединение сигналов от различных датчиков и вычисление положения головы, которое может быть использовано механизмом пространственного позиционирования.

Функции, такие как компенсация смещения, определение неподвижности и ограничение скорости, могут быть реализованы с помощью библиотеки утилит отслеживания положения головы .

API для пространственного звука

Android 13 предлагает систему пространственного звука и API для разработчиков.

Производители оборудования могут адаптировать поведение приложений в зависимости от доступности и состояния включенных функций, которые задаются системными API. Приложения также могут настраивать атрибуты звука, чтобы отключить пространственный звук по эстетическим соображениям или указать, что аудиопоток уже обработан для пространственного звука .

Для получения информации об API, предназначенных для разработчиков, см. Spatializer .

Производители оборудования могут использовать системные API для реализации пользовательского интерфейса настроек звука и Bluetooth, что позволяет пользователю управлять состоянием пространственного звука и функцией отслеживания положения головы на своем устройстве. Пользователь может включить или отключить пространственный звук для динамика и проводных наушников в пользовательском интерфейсе настроек звука. Настройка пространственного звука для динамика доступна только в том случае, если реализация эффекта пространственного звучания поддерживает трансауральный режим.

Пользователь также может включить или отключить пространственный звук и отслеживание положения головы в настройках Bluetooth-устройства для каждого устройства. Настройка отслеживания положения головы доступна только в том случае, если Bluetooth-гарнитура оснащена датчиком отслеживания положения головы.

Если эта функция поддерживается, по умолчанию для пространственного звука всегда включена функция. Полный список системных API см. в файле Spatializer.java .

В структуру Sensor добавлен новый тип датчика отслеживания положения головы Sensor.TYPE_HEAD_TRACKER , который предоставляется интерфейсом HAL Sensor в качестве динамического датчика по Bluetooth или USB.

Интеграция пространственного звука

Наряду с внедрением механизма эффекта пространственного звучания, производители оборудования должны настроить свои платформы для поддержки пространственного звука.

Требования

Для интеграции пространственного звука необходимо соблюдение следующих требований:

  • Аудиоинтерфейс HAL и аудиопроцессор DSP должны поддерживать выделенный выходной канал для пространственного звука.
  • Для пространственного звука с отслеживанием положения головы наушники должны иметь встроенные датчики отслеживания положения головы.
  • Реализация должна соответствовать предлагаемому стандарту отслеживания положения головы по протоколу HID при подключении Bluetooth-гарнитуры к телефону.
  • Для поддержки пространственного звука необходима версия Audio HAL v7.1 .

Интеграция пространственного звука осуществляется следующим образом:

  1. В файле device.mk укажите поддержку пространственного звука следующим образом:

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

    Это приводит к инициализации поддержки пространственного позиционирования AudioService .

  2. В файле 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"/>
    
  3. Объявите библиотеку эффектов пространственного звучания в 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"/>
    
  4. Поставщики, внедряющие эффект пространственного позиционирования, должны соответствовать следующим требованиям:

    • Базовая конфигурация и управление идентичны другим эффектам в 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 .

Некачественная реализация алгоритмов пространственного позиционирования или отслеживания положения головы может привести к несоблюдению рекомендуемой задержки передачи сигнала в обоих направлениях, указанной в разделе «Рекомендации» .