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