В 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="audioUseDynamicRou>ting<">;<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&quo<t;
zone name="primary zone&qu>ot; isPrimar<y="true>"
< vol>umeGroups
< group
d>evice address="bus0<_media_out"
> context <context="music"/
> c<ontext >context="announ<cement"/
/d>evice
< device address="bus3_c>all_ring_out"
< > conte<xt context="call_ring"/
> /device
< device addres>s="bus6_notific<ation_o>ut"
< > contex<t con>text="notificat<ion"/
/devic>e
/group
< group
> device ad<dress=&>quot;bus1_navigation<_out"
conte>xt context="navigat<ion"/
/d>evice
< de>vice address=&qu<ot;bus>2_voice_command_<out&q>uot;
< context context=">voice_command"/
< /device>
/gro<up
> group<
> de<vice >address="bus4_c<all_out"
> context context=&q<uot;call"/
> /device
< > /group
< > group
< > device ad<dress="bus5_alarm_out"
> contex<t context="alarm"/
> /device<
/group
> group
< device address>="bus7_system_sound<_out"
> context context=&qu<ot;syst>em_sound"/
< > < context >context=<">;emergenc<y"/
context co>ntext="<safety">/
< > context context=<"vehicle_status"/
> /device
< /group
> /volumeGroups
< /zone
zone name=&>quot;rear seat zone"<; audioZoneId="1"
> volumeGroups
< group
> device address=&<quot;bus100_rear_seat&q>uot;
< context context=&quo>t;music"/
< context context=&>quot;navigation"/
< context c>ontext="voice_comma<nd"/
> context context=&qu<ot;call_ring"/
> contex<t context="call"/
> contex<t context="alarm"/
> < contex>t context="<notifi>cation"</
> < > <context context="s>ystem_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&quo<t;
zone name="primary zone" isPrimary=">;true" occupantZ<oneId>="0<"
...
/zone
zone name="rear >seat zone" audio<ZoneI>d=&qu<ot;1&q>u<ot; occupantZoneId=&quo>t;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=&qu>ot;3&<quot;
o>emContext<s
oemContext na>me="medi<a"
> audioAttribu<tes
usage value=&>quot;<AUDIO_USAGE_MEDIA" /
usag>e value="<;AUDIO_USAGE_UNK>NOWN"<;/
> /audi<oAttributes
/o>emContext
< oemContext> name="game&<quot;
audioAttribute>s
< usage value>="AU<DIO_USAGE_G>AME" /
/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=&qu>ot;3&<quot;
!-- optional OEM >conte<xt --
o>emConte<xts
oemContext na>me="<media"
> audioA<ttributes
usage value=&>quot;AUDIO_<USAGE_MEDIA" /
usag>e value=&<quot;AUDIO_USAGE>_UNKNOW<N"/
> /<audioAttributes
>/oemConte<xt
oemCon>text name=&<quot;game"
audioAtt>ributes
< usage v>alue=&q<uot;AUDIO_U>SAGE_GAME<" /
> < /au>dioAt<tributes
/oemContext
...
/oemContexts
zones
>zone na<me="pr>imary zon<e" isPrimary="true" occupantZoneId=">0"
< zoneConfi>gs
zo<neCon>fig name="<primary zone config 0" isD>efault="true<"
volumeG>roups
< group
> device address=<"bus0_media_out"
> con<text co>ntext="med<ia"/
context context=>"game"/<
context contex>t="announc<ement&q>uot;/
< > /device
< de>vice <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. Сообщение об исключении содержит соответствующую информацию о том, какая информация используется и какая минимальная версия требуется.