Конфигурация автозвука

В Android 10 файл car_audio_configuration.xml заменил car_volumes_groups.xml и IAudioControl.getBusForContext . Файлы политики аудио, обычно находящиеся в разделе поставщика, представляют конфигурацию аудиооборудования платы. Все устройства, упомянутые в car_audio_configuration.xml , должны быть определены в audio_policy_configuration.xml .

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

Обзор архитектуры автомобильной аудиосистемы

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

Поместите файл конфигурации автомобильной аудиосистемы в папку vendor/etc/ или system/etc/ на устройстве, при этом vendor/etc/ должен быть первым в поиске сервиса автомобильной аудиосистемы. Сервис автомобильной аудиосистемы считывает файл car_audio_configuration.xml для определения конфигурации аудиосистемы.

Зоны автомобильной аудиосистемы:

  • Каждая аудиозона имеет уникальный идентификатор аудиозоны.
  • Каждую звуковую зону можно сопоставить с зоной присутствия людей.
  • Аудиодействия в каждой зоне независимы друг от друга:

    • Аудиофокус
    • Маршрутизация аудио
    • Приглушение звука
  • Группы объемов автомобилей:

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

    • Сопоставление аудиоконтекста с аудиоустройствами. Используйте это для создания аудиомикса, который сопоставляет использование аудиоданных с выходным устройством.

    • Все аудиоконтексты должны быть представлены в пределах зоны. Это позволяет точно настроить маршрутизацию аудиоданных для всех аудиоатрибутов.

Аудиоконтексты

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

В этой таблице описывается соответствие между аудиоконтекстами и вариантами использования. Выделенные строки соответствуют новому варианту использования в системе.

CarAudioContext Ассоциированные атрибуты
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

Включить маршрутизацию AAOS

Чтобы использовать маршрутизацию на основе AAOS, необходимо установить флаг audioUseDynamicRouting в true :

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

Если установлено false , маршрутизация и большая часть CarAudioService отключаются, и AAOS возвращается к поведению AudioService по умолчанию.

Настраиваемый механизм политики звука

Для дальнейшего расширения возможностей управления автомобильной аудиосистемой в Android 14 компания AAOS представила возможность управления аудио через механизм настраиваемой аудиополитики (CAP) . Это обеспечивает большую гибкость управления маршрутизацией аудиосигнала и громкостью, а также позволяет гибко настраивать:

Механизм настраиваемой звуковой политики (CAP) можно включить с помощью useCoreAudioVolume и useCoreAudioRouting . Подробную информацию см. в разделе Механизм настраиваемой звуковой политики .

Первичная зона

По умолчанию весь звук направляется в основную зону. Существует только одна основная зона, что указывается в конфигурации атрибутом isPrimary="true" . Основной зоне автоматически назначается Audiomanager.PRIMARY_AUDIO_ZONE .

Пример конфигурации (версия 2)

Например, в автомобиле может быть две зоны: основная и зона для задних пассажиров. В этом случае вы можете создать возможную версию 2 car_audio_configuration.xml следующим образом:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <device address="bus0_media_out">
                       <context context="music"/>
                       <context context="announcement"/>
                   </device>
                   <device address="bus3_call_ring_out">
                       <context context="call_ring"/>
                   </device>
                   <device address="bus6_notification_out">
                       <context context="notification"/>
                   </device>
               </group>
               <group>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

В этом примере основная зона распределяет некоторые аудиоконтексты по разным устройствам. Это позволяет HAL применять различные эффекты постобработки и микшировать выходные сигналы каждого устройства, используя аппаратное обеспечение автомобиля. Устройства объединены в несколько групп громкости: мультимедиа, навигация, звонки, будильники и системные звуки. Если система настроена на useFixedVolume , то уровни громкости для каждой группы передаются в HAL для применения к выходным сигналам этих устройств.

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

В примере со вторичной зоной все аудиоконтексты направляются на одно устройство и одну группу томов.

Определение группы томов для движка CAP

Чтобы использовать управление громкостью через механизм CAP, как указано в разделе Настраиваемый механизм политики звука, определение группы томов также должно содержать имя:


<group name="media">
  <device address="bus0_media_out">
    <context context="music"/>
    <context context="announcement"/>
  </device>
  <device address="bus3_call_ring_out">
     <context context="call_ring"/>
  </device>
  <device address="bus6_notification_out">
    <context context="notification"/>
  </device>
</group>
<group name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

Имя этой группы томов должно совпадать с именем тома, заданным в движке CAP. Кроме того, параметр useFixedVolume также должен быть установлен в false . Подробнее см. в разделе «Флаги AAOS конфигурации звука» .

Конфигурация аудиосистемы зоны присутствия

В Android 11 car_audio_configuration.xml появились два новых поля: audioZoneId и occupantZoneId . С помощью audioZoneId можно управлять аудиозонами. С помощью occupantZoneId можно настроить маршрутизацию на основе идентификатора пользователя.

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

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

Конфигурация определяет сопоставление основной зоны с зоной присутствия 0 и audioZoneId 1 с occupantZoneId 1. Можно настроить любое сопоставление между зоной присутствия и аудиозоной. Однако сопоставление должно быть однозначным. Правила, определяющие два новых поля, следующие:

  • audioZoneId для основной зоны всегда равно PRIMARY_AUDIO_ZONE ID. Если указано isPrimary="true" , то audioZoneId не требуется.

  • Номера audioZoneId и occupantZoneId не могут повторяться.

  • audioZoneId и occupantZoneId могут иметь только однозначное соответствие.

Конфигурация автомобильной аудиосистемы Android 14

В Android 14 компания AAOS представила службу OEM-плагинов, которая позволяет управлять аудиосистемой автомобиля. Наряду с новыми службами-плагинами в файл конфигурации автомобильной аудиосистемы внесены следующие изменения:

  • Контекст автомобильной аудиосистемы, определяемый производителем оригинального оборудования
  • Динамические конфигурации непервичных зон

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

Для обеспечения гибкой настройки звука в Android 14 служба автомобильной аудиосистемы позволяет группировать аудиоданные, отличающиеся от статических аудиоконтекстов, определяемых производителем. Этот контекст, определяемый производителем, можно определить в файле car_audio_configuration.xml версии 3.

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

Для каждого OEM-контекста требуется name и список аудиоатрибутов, назначенных этому контексту. В приведённом выше примере определены два контекста:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • media контекст содержит AUDIO_USAGE_MEDIA и AUDIO_USAGE_UNKNOWN
  • game контекст содержит только AUDIO_USAGE_GAME

Контекст должен быть определён в начале файла car_audio_configuration.xml . После определения OEM-контекстов остальная настройка аудиосистемы автомобиля может выполняться как и прежде. К контексту аудиосистемы автомобиля применяются следующие правила:

  • Определения OEM-контекста необязательны. Вместо них используется статический аудиоконтекст .

  • Не повторяйте названия контекстов.

  • Не назначайте использование аудиоатрибутов нескольким контекстам.

  • Все аудиоприменения, определенные в AudioAttributes должны использоваться для построения контекста.

Строго говоря, строковое представление использования аудио android.audio.policy.configuration.V7_0.AudioUsage должно использоваться для определения OEM-контекста аудио. В будущем новые варианты использования аудиоатрибутов будут назначаться наиболее подходящему контексту, чтобы снизить количество ошибок при миграции с одной версии Android на другую.

Хотя контекст, определяемый OEM, был введен для дальнейшего расширения возможностей аудиосервиса OEM-плагина, его по-прежнему можно использовать и без него. Поведение звука аналогично поведению статического аудиосервиса:

  • Взаимодействие с аудиофокусом. Атрибут аудио используется для определения наилучшего соответствия, заданного матрицей взаимодействия с аудиофокусом. Подробнее см. в разделе Аудиофокус .

  • Атрибут аудиоуправления громкостью звука используется для определения наилучшего соответствия:

    • Группа томов на основе контекста, определенного OEM-производителем.
    • Настроен приоритет из статического списка томов.
  • Поведение приглушения звука:

    • Использование аудиоатрибутов для текущего аудиофокуса применяется для сопоставления с информацией об выходном аудиоустройстве, как определено в файле конфигурации автомобильной аудиосистемы.

    • Атрибут Audio используется для сопоставления соответствующего статического контекста с ducking на основе статической матрицы приглушения звука.

Стратегии продукта CAP-движка

Если устройство должно использовать механизм CAP для управления громкостью или маршрутизацией , ваш OEM-контекст должен соответствовать определению стратегии продукта в механизме CAP. В противном случае вы можете использовать OEM-контекст без механизма CAP.

Более подробную информацию можно найти в стратегии развития продукта CAP Engine в AAOS.

Динамические конфигурации аудиозон

В Android 14 для поддержки динамической конфигурации аудиозон схема конфигурации автомобильной аудиосистемы для определения аудиозон также обновлена ​​до версии 3. Новая схема требует настройки конфигурации для каждой зоны.

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

Подробнее см. в файле версии 3, определённом в device/generic/car/emulator/audio/car_audio_configuration.xml . Начиная с Android 14, основная зона может иметь только одну (1) конфигурацию. Вспомогательные зоны могут иметь несколько конфигураций. К конфигурациям автомобильной аудиосистемы применяются следующие правила:

  • Основная аудиозона может иметь только одну конфигурацию.

  • Неосновные аудиозоны могут иметь несколько конфигураций.

  • Имя должно быть уникальным для каждой аудиозоны и конфигурации аудиозоны.

  • Внутри аудиозоны аудиоконфигурации могут различаться:

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

  • Аудиоустройства, принадлежащие к одной группе громкости, должны иметь одинаковые конфигурации усиления звука.

  • Все аудиоконтексты (OEM или статические) должны быть назначены для каждой аудиоконфигурации.

Совместимость с предыдущими версиями

Несмотря на то, что новые версии файла car_audio_configuration.xml добавляют новые функции с каждым обновлением, вы по-прежнему можете использовать старые файлы в новых версиях AAOS. Производители оригинального оборудования (OEM), обновляющие свои системы до новых версий Android, могут повторно использовать файл car_audio_configuration.xml .

Чтобы использовать новую функцию, требующую новой информации, содержащейся в файле car_audio_configuration.xml , необходимо обновить версию файла. Попытка использовать более старую версию файла, информация в которой не поддерживается, приводит к возникновению исключения IllegalStateException при запуске службы автомобиля. Сообщение об исключении содержит информацию о том, какая информация используется и какая минимальная версия требуется.