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

В Android 10 car_audio_configuration.xml заменил car_volumes_groups.xml и IAudioControl.getBusForContext . Файлы аудиополитики, обычно расположенные в разделе vendor, представляют собой конфигурацию аудиооборудования платы. Все устройства, указанные в 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 . Если задан параметр 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 является необязательным. Вместо него используется статический контекст Audio .

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

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

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

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

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

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

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

    • Группа томов основана на контексте, определенном производителем оборудования.
    • Приоритет определяется из настроенного списка статических томов.
  • Эффект подавления звука:

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

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

Стратегии разработки продуктов на базе двигателей CAP

Если устройству необходимо использовать механизм CAP для управления томами или маршрутизацией , то определенный производителем контекст должен соответствовать определению стратегии продукта механизма CAP. В противном случае можно использовать контекст, определенный производителем, без механизма 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. Производители автомобилей, обновляющие свои устройства до новых версий Android, могут повторно использовать файл car_audio_configuration.xml .

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