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

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

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

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

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

Архитектура

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

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

spatial-audio

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

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

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

spatial-sys-arch

Рисунок 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 для реализации пользовательского интерфейса настроек Sounds и Bluetooth, который позволяет пользователю управлять состоянием пространственного звука и функцией отслеживания положения головы для своего устройства. Пользователь может включить или отключить пространственный звук для динамика и проводных наушников в пользовательском интерфейсе настроек Sounds. Настройка пространственного звука для динамика доступна только в том случае, если реализация эффекта spatializer поддерживает трансауральный режим.

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

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

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

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

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

Требования

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

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

Интегрируйте пространственный звук, выполнив следующие шаги:

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

    PRODUCT_PROPERTY_OVERRIDES += \
         ro.audio.spatializer_enabled=true
    

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

  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. Объявите библиотеку эффектов 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"/>
    
  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 .

Рекомендации

Мы рекомендуем OEM-производителям использовать следующие рекомендации при внедрении:

  • Используйте LE-аудио, если оно доступно, для облегчения взаимодействия и достижения целевых показателей задержки.
  • Для хорошего пользовательского опыта задержка приема-передачи от обнаружения движения датчика до получения звука наушниками должна быть менее 150 мс.
  • Для Bluetooth (BT) Classic с расширенным профилем распространения звука (A2DP):
    • Используйте кодек с малой задержкой, например Opus .
    • Реализовать функции управления задержкой в ​​Audio HAL . Это позволяет оптимизировать энергопотребление и производительность при выключенном отслеживании положения головы и отключить отслеживание положения головы в неоптимальных условиях.

Проверка

Для проверки функциональности функции пространственного звука используйте тесты CTS, доступные в SpatializerTest.java .

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