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