Служба автомобильной аудиосистемы использует политику динамического звука Core Audio для облегчения использования в автомобилях.
Отдельное воспроизведение звука для каждого пассажира, называемое многозонным звуком, при котором каждая зона позволяет одновременно воспроизводить звук.
Динамическая конфигурация аудиозоны.
Звуковая трансляция основной зоны пассажира.
Аудиозеркало пассажира.
В каждом случае использования служба автомобильной аудиосистемы использует политику динамического звука для автоматической маршрутизации звука на назначенное устройство вывода.
Многозонный звук
Многозонное аудио позволяет нескольким пользователям одновременно взаимодействовать с AAOS. С зоной связан набор устройств вывода, и каждая зона поддерживает фокус звука и уровень громкости. Пассажиры могут слушать свой звук, пока водитель слушает другой источник в основной зоне (обычно в главном салоне).
Многозонная аудиоархитектура
Рисунок 1. Архитектура сервиса автомобильной аудиосистемы.
Зоны автомобильной аудиосистемы представляют собой абстракцию аудиовыходов, аудиофокуса и других настроек звука, которыми можно управлять независимо. В целях маршрутизации каждая зона определяется как набор устройств шины вывода звука, как это предусмотрено в конфигурации политики аудио. Устройства различаются для каждого определения аудиозоны. На рисунке 1 шинные устройства с 1 по 5 принадлежат нулевой зоне, шинные устройства с 6 по 8 принадлежат зоне один, а шинные устройства с 9 по 11 принадлежат зоне два.
Конфигурация автозвука
Обычно устройства вывода назначаются одной аудиозоне. Каждая аудиозона определяется в car_audio_configuration.xml
. В следующем фрагменте кода показана конфигурация автомобильной аудиосистемы (рис. 1):
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
— это определение автосервиса, управляемое CarOccupantZoneManager
. Он используется в автомобилях для определения сопоставления пользователя в автомобиле с определенным местом сиденья. CarOccupantZoneService
также определяет сопоставление зоны присутствия с дисплеями, другими периферийными устройствами и пользователем после входа пользователя в дисплей. Аудиозона имеет:
Идентификатор аудиозоны и идентификатор зоны оператора.
- Сопоставляет аудиозону с зоной пассажира (сиденье, дисплеи и другие периферийные устройства)
- Сопоставьте, какой идентификатор пользователя назначается аудиозоне при входе в систему
Список аудиоконфигураций. Каждая аудиоконфигурация имеет набор групп громкости. Каждая группа томов имеет набор устройств аудиошины.
При изменении громкости все аудиоустройства в группе управляются одинаково.
Каждому аудиоустройству назначается список аудиоатрибутов. Эта информация используется для создания миксов политик аудио с различными назначенными атрибутами звука.
Эта конфигурация позволяет направлять различные варианты использования аудиоатрибутов на разные устройства вывода в каждой зоне. В зависимости от варианта использования одновременно могут воспроизводиться разные звуки. Например, вы можете настроить основную кабину (основную зону) на воспроизведение звуков мультимедиа на всех динамиках, а звуки навигации только на динамиках, ближайших к водителю. При одновременном воспроизведении звука основная кабина продолжает слушать мультимедиа, в то время как навигация передается водителю.
Многозонный аудиопроцесс входа в систему для пассажиров
На диаграмме последовательности ниже показан процесс включения маршрутизации звука, когда пассажир входит в систему на соответствующем дисплее:
Рисунок 2.
В этой последовательности логин пользователя передается в службу автомобильной аудиосистемы через службу зоны пассажира.
Служба автомобильной аудиосистемы (для определенной аудиозоны) использует API
AudioPolicy#removeUserIdDeviceAffinity
для удаления привязки пользовательских устройств. Этот API принимает идентификатор пользователя. В данном случае это пользователь предыдущей зоны.API
AudioPolicy#setUserIdDeviceAffinity
назначает нового пользователя зоне, которая принимает идентификатор пользователя и все устройства для конкретной конфигурации зоны.
Конфигурации динамических зон
В Android 14 представлены конфигурации динамических зон, которые позволяют OEM-производителям настраивать различные наборы устройств для пассажиров. Вариант использования позволяет пассажирам на заднем сиденье переключаться между динамиком в подголовнике заднего сиденья и периферийными наушниками на заднем сиденье.
В этом случае требуются две конфигурации. По одному для подголовника заднего сиденья и периферийных наушников. Звук для конкретного пользователя направляется только в одну конфигурацию одновременно.
Рисунок 3. Рабочий процесс настройки динамической зоны.
На рис. 3 показана архитектура рабочего процесса настройки динамической зоны. Аудиозона 1 содержит две конфигурации, Config 0
и Config 1
, которые связаны с динамиком устройства вывода и подголовником соответственно.
При входе пользователю автоматически назначается конфигурация по умолчанию. Когда пользователь решает изменить конфигурации, обычно через системный пользовательский интерфейс, служба автозвука выполняет переключение между двумя конфигурациями. Таким образом, устройство вывода переключается между динамиком Z1 и подголовником Z1.
В приведенном ниже фрагменте кода показана настройка этой конфигурации динамической зоны.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
Чтобы облегчить управление конфигурациями аудио, менеджер автомобильной аудиосистемы предоставляет API для управления конфигурациями:
- Конфигурации запроса, доступные для зоны.
- Запросить текущую конфигурацию зоны.
- Переключитесь на другую конфигурацию.
Приложение или служба системного пользовательского интерфейса могут использовать эти API для управления конфигурацией аудиозоны, как показано на рис. 4. API запросов предоставляет пассажиру оба этих API. Пользователь может выбрать другую конфигурацию, нажав команду для желаемой конфигурации.
Рисунок 4. Рабочий процесс настройки динамической зоны.
Звуковая трансляция пассажира в основной зоне
Трансляция звука для пассажиров в основной зоне — это функция, представленная в Android 14, позволяющая пассажирам транслировать звук мультимедиа в основной зоне. Таким образом, мультимедийный звук пассажира может транслироваться в основную кабину, при этом водитель сохраняет полный контроль.
На рисунке ниже показана упрощенная версия архитектуры для передачи аудиосигнала пассажирам в основной зоне.
Рисунок 5. Рабочий процесс настройки динамической зоны.
На изображении показано, что устройство вывода мультимедиа для водителя используется совместно с пассажиром, это происходит только тогда, когда пассажир находится в режиме основной зоны. Политика динамического звука также используется для управления маршрутизацией звука для драйвера, но никакие изменения не применяются к привязке устройств для драйвера. Для пассажира список устройств вывода изменен следующим образом:
- Устройство вывода мультимедиа для пассажира удалено из списка устройств.
- Устройство вывода мультимедиа для драйвера добавлено в список устройств.
- Остальные устройства вывода для аудиозон пассажира остаются в списке устройств.
Этот новый список устройств назначается пассажиру API AudioPolicy#setUserIdDeviceAffinity
. В API передаются параметры: список устройств и идентификатор пользователя пассажира. Когда служба политики аудиосистемы запрашивает, какой аудиомикс должен быть выбран для медиа-трека, связанного с пассажиром, выбирается аудиомикс мультимедиа, связанный с основной зоной.
Ключевым требованием для трансляции звука в основной зоне является изоляция устройства вывода мультимедиа основной зоны от других применений аудиоатрибутов. В противном случае во время создания аудиомиксов к миксу добавляются другие аудиоатрибуты. Когда выбор микса выполняется аудиосистемой, все звуки, присоединенные к миксу, выбираются для воспроизведения в основной кабине.
Аудиозеркало в пассажирской зоне
Функция аудиозеркала позволяет пассажирам делиться аудио. Функция зеркала дублирует аудиоданные в каждой аудиозоне, чтобы все пассажиры могли слушать один и тот же звук. В этом случае фокус звука распределяется между пассажирами, участвующими в зеркалировании звука.
Зеркальная маршрутизация аудио
Для включения дублирования звука требуется минимум два пассажира. В результате для аудиоконфигурации только с двумя аудиозонами для пассажиров потребуется одно зеркальное выходное устройство. Используя приведенное выше определение, можно запустить два одновременных сеанса зеркалирования.
На рисунке ниже показана упрощенная схема многозонного дублирования звука между двумя пассажирами. Звук от обоих пассажиров направляется на звуковое зеркальное устройство bus_1000
. Audio HAL дублирует сигнал в исходные зоны.
Рисунок 6. Рабочий процесс настройки динамической зоны.
Эта маршрутизация активна только тогда, когда пассажиры находятся в режиме зеркалирования. В противном случае пассажирам закрепляются соответствующие устройства аудиозоны. Когда зеркалирование впервые включается для пассажира, API AudioPolicy#setUserIdDeviceAffinity
изменяет маршрутизацию:
- Устройство вывода мультимедиа для пассажира удалено из списка устройств.
- Зеркальное устройство вывода добавлено в список устройств.
- Остальные устройства вывода аудиозоны пассажира остаются в списке устройств.
При наличии списка устройств вызывается API с обновленным списком устройств и идентификатором пользователя пассажира. На следующем изображении представлена диаграмма последовательности рабочего процесса звукового зеркала.
Рисунок 7. Рабочий процесс аудиозеркала.
На рис. 7 API-интерфейсы диспетчера автомобильной аудиосистемы для управления зеркалированием звука вызываются из службы мультимедийной системы. В частности, API для включения зеркалирования звука для пользователя 1 и пользователя 2, CarAudioManager#enableMirrorForAudioZones
.
Служба автомобильной аудиосистемы настраивает маршрутизацию звука для пассажиров-пользователей, как описано выше. Служба автозвука также отправляет сигнал на аудио HAL для настройки и дублирования звука с зеркального устройства в соответствующие зоны.
На изображении выше служба автозвука отправляет mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
где,
bus_1000
— это исходная шина, а bus_10
и bus_20
— шины назначения.
На диаграмме последовательности не показан сигнал, отправленный через API AudioManager#setParameters
, который достигает HAL через аудиосервис.
При отключении звукового зеркала отправляется следующий сигнал: mirroring_src=bus_1000;mirroring=off
. Этот сигнал может использоваться HAL для отключения дублирования звука, когда зеркалирование звука не включено. Чтобы определить устройства зеркалирования звука, файл конфигурации автомобильной аудиосистемы содержит раздел с именем mirroringDevices
, как показано во фрагменте ниже.
В этом фрагменте определены два устройства зеркалирования, bus_1000
и bus_2000
, чтобы четыре пассажира могли использовать зеркалирование звука.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>