В 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 | UNKNOWNGAMEMEDIA |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
CALL | VOICE_COMMUNICATIONVOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
NOTIFICATION | NOTIFICATIONNOTIFICATION_* |
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. Сообщение об исключении содержит соответствующую информацию о том, какая информация используется и какая минимальная версия требуется.