Многозонная маршрутизация звука

Служба автомобильной аудиосистемы использует динамическую аудиополитику 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.

В этой последовательности вход пользователя в систему распространяется на службу автомобильной аудиосистемы через службу зоны присутствия водителя и пассажиров.

  1. Служба автомобильной аудиосистемы (для конкретной аудиозоны) использует API AudioPolicy#removeUserIdDeviceAffinity для удаления привязок пользователя к устройству. Этот API принимает идентификатор пользователя. В данном случае — идентификатор пользователя предыдущей зоны.

  2. 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 . Аудио 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>