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

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

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

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

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

Поместите файл конфигурации аудиосистемы автомобиля в vendor\etc\` or system\etc` на устройстве, при этом vendor\etc\` being the first place searched for the file by the car audio service. The car audio services reads 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 представила использование управления аудио через Configurable audio policy engine (CAP) . Это обеспечивает большую гибкость в управлении маршрутизацией аудио и управлением громкостью, а также обеспечивает универсальное определение:

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

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

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

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

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

<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>

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

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

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

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

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

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

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

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

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

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

Контексты 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 необязательны. Вместо этого используется статический контекст Audio .

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

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

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

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

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

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

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

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

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

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

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

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

Чтобы узнать больше, ознакомьтесь со стратегией продукта 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 при запуске службы автомобиля. Сообщение об исключении содержит соответствующую информацию о том, какая информация используется и какая минимальная версия требуется.