В 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 перечислены ниже.
В этой таблице описывается сопоставление между аудиоконтекстами и их использованием. Выделенные строки предназначены для нового использования системы.
АвтомобильАудиоКонтекст | Использование связанного атрибута |
---|---|
МУЗЫКА | UNKNOWN GAME |
НАВИГАЦИЯ | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
ВЫЗОВ | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ТРЕВОГА | ALARM |
УВЕДОМЛЕНИЕ | NOTIFICATION NOTIFICATION_* |
СИСТЕМА_ЗВУК | ASSISTANCE_SONIFICATION |
ЧРЕЗВЫЧАЙНАЯ СИТУАЦИЯ | EMERGENCY |
БЕЗОПАСНОСТЬ | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
ОБЪЯВЛЕНИЕ | ANNOUNCEMENT |
Включить маршрутизацию AAOS
Чтобы использовать маршрутизацию на основе AAOS, необходимо установить для флага audioUseDynamicRouting
значение true
:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
Если false
, маршрутизация и большая часть CarAudioService
отключаются, и AAOS возвращается к поведению AudioService
по умолчанию.
Основная зона
По умолчанию весь звук направляется в основную зону. Существует только одна основная зона, которая указывается в конфигурации атрибутом 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 для применения к выходным данным этих устройств.
Для основной зоны мы рекомендуем отделить системные звуки от других звуков. Это позволяет обрабатывать звуки транспортных средств с более высоким приоритетом. Служба автозвука уже делает эти различия для звуков автомобиля с точки зрения управления фокусировкой и приглушением звука. Например, запрос на фокусировку аварийного звука имеет более высокий приоритет, чем другой запрос на фокусировку.
Для простоты в примере дополнительной зоны все аудиоконтексты направляются на одно устройство и одну группу томов.
Конфигурация звука в зоне присутствия
В 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-плагинов, которая позволяет более активно управлять поведением звука, контролируемым службой автомобильной аудиосистемы. Наряду с новыми сервисами плагина в файл конфигурации автозвука добавлены следующие изменения:
- Контекст автомобильной аудиосистемы, определенный 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 .
Не повторяйте названия контекстов.
Не назначайте использование атрибута audio нескольким контекстам.
Все способы использования аудио, определенные в
AudioAttributes
должны использоваться для создания контекста.
Строго говоря, строковое представление использования звука android.audio.policy.configuration.V7_0.AudioUsage
должно использоваться для определения аудиоконтекста OEM. В будущем новые варианты использования атрибутов аудио будут присваиваться наиболее подходящему контексту, чтобы уменьшить количество ошибок при переходе с одной версии Android на другую.
Хотя контекст, определяемый OEM, был введен для дальнейшего расширения службы аудио плагинов OEM, его по-прежнему можно использовать без службы плагинов OEM. Поведение звука напоминает поведение статического аудиосервиса:
Взаимодействие с аудиофокусом. Атрибут аудио используется для определения наилучшего поведения соответствия, установленного матрицей взаимодействия фокуса звука. Подробную информацию см. в разделе Аудио фокус .
Атрибут звука управления громкостью звука используется для определения наилучшего соответствия:
- Группа томов на основе контекста, определенного OEM.
- Настроен приоритет из статического списка томов.
Поведение приглушения звука:
Использование атрибута аудио для текущего фокуса аудио используется для сопоставления с информацией о выходном аудиоустройстве, как определено в файле конфигурации автомобильной аудиосистемы.
Атрибут Audio используется для сопоставления соответствующего статического контекста с приглушением на основе статической матрицы приглушения звука.
Конфигурации динамических аудиозон
В 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
при запуске службы автомобиля. Сообщение об исключении содержит соответствующую информацию о том, какая информация используется и какая минимальная версия требуется.