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

Служба автомобильной аудиосистемы использует политику динамического звука 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 также определяет сопоставление из зоны occupant на дисплеи, другие периферийные устройства и пользователя после того, как пользователь вошел в дисплей. Аудиозона имеет:

  • Идентификатор аудиозоны и идентификатор зоны присутствия.

    • Сопоставляет звуковую зону с зоной пассажира (сиденье, дисплеи и другие периферийные устройства)
    • Карта, какому идентификатору пользователя назначается аудиозона при входе в систему
  • Список аудиоконфигураций. Каждая аудиоконфигурация имеет набор групп томов. Каждая группа томов имеет набор устройств аудиошины.

    • При изменении громкости все аудиоустройства в группе управляются одинаково.

    • Каждому аудиоустройству назначается список аудиоатрибутов. Эта информация используется для построения миксов аудиополитики с различными назначенными аудиоатрибутами.

Эта конфигурация позволяет направлять различные аудиоатрибуты на различные выходные устройства в каждой зоне. В зависимости от варианта использования разные звуки могут воспроизводиться одновременно. Например, вы можете настроить основную кабину (основную зону) на воспроизведение звуков мультимедиа на всех динамиках, а звуков навигации — только на динамиках, ближайших к водителю. При одновременном воспроизведении звука основная кабина продолжает слушать мультимедиа, пока навигация доставляется водителю.

Рабочий процесс входа пассажира в многозонный аудиорежим

На диаграмме последовательности ниже показан процесс включения маршрутизации звука, когда пассажир входит в систему на своем дисплее:

изображение

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

Рабочий процесс конфигурации динамической зоны

Рисунок 4. Рабочий процесс настройки динамической зоны.

Пассажирский аудиосигнал основной зоны

Пассажирский аудиопоток основной зоны — это функция, представленная в Android 14, позволяющая пассажирам транслировать свой медиа-аудио в основную зону. Таким образом, медиа-аудио пассажира может транслироваться в основной салон, в то время как водитель сохраняет полный контроль.

На рисунке ниже показана упрощенная версия архитектуры для передачи аудиосигнала пассажирам основной зоны.

Рабочий процесс конфигурации динамической зоны

Рисунок 5. Рабочий процесс настройки динамической зоны.

На изображении показано, что устройство вывода медиа для водителя используется совместно с пассажиром, это происходит только тогда, когда пассажир находится в режиме трансляции в основную зону. Динамическая аудиополитика также используется для управления маршрутизацией аудио для водителя, но никакие изменения не применяются к привязкам устройств для водителя. Для пассажира список выходных устройств изменяется следующим образом:

  • Устройство вывода мультимедиа для пассажира удалено из списка устройств
  • В список устройств добавлено устройство вывода медиа для драйвера
  • Оставшиеся выходные устройства для аудиозон пассажиров остаются в списке устройств

Этот новый список устройств назначается пассажиру с помощью API AudioPolicy#setUserIdDeviceAffinity . Параметры, передаваемые в API, — это список устройств и идентификатор пользователя пассажира. Когда служба политики аудиосистемы запрашивает, какой аудиомикс должен быть выбран для медиадорожки, связанной с пассажиром, выбирается медиа-аудиомикс, связанный с основной зоной.

Ключевым требованием для аудиотрансляции основной зоны является то, что устройство вывода медиа основной зоны должно быть изолировано от других аудиоатрибутов использования. В противном случае, во время построения аудиомиксов, другие аудиоатрибуты добавляются в микс. Когда выбор микса выполняется аудиосистемой, все звуки, прикрепленные к миксу, выбираются для воспроизведения в главной кабине.

Аудио зеркало в пассажирской зоне

Функция аудиозеркала позволяет пассажирам делиться аудио. Функция зеркала дублирует аудиоданные в каждой аудиозоне, чтобы все пассажиры могли слушать один и тот же аудиосигнал. В этом случае аудиофокус разделяется с пассажирами, участвующими в аудиозеркалировании.

Зеркальная маршрутизация аудио

Для включения зеркалирования звука необходимо минимум два пассажира. В результате аудиоконфигурация с двумя пассажирскими аудиозонами потребует одно устройство вывода зеркала. С помощью определения выше можно запустить два параллельных сеанса зеркалирования.

На рисунке ниже показана упрощенная схема многозонного аудиозеркалирования между двумя пассажирами. Аудио от обоих пассажиров направляется на аудиозеркальное устройство bus_1000 . Аудио HAL дублирует сигнал в исходные зоны.

Рабочий процесс конфигурации динамической зоны

Рисунок 6. Рабочий процесс настройки динамической зоны.

Эта маршрутизация включается только тогда, когда пассажиры находятся в режиме зеркалирования. Если нет, соответствующие устройства для аудиозоны назначаются пассажирам. Когда зеркалирование впервые включается для пассажира, API AudioPolicy#setUserIdDeviceAffinity изменяет маршрутизацию:

  • Устройство вывода мультимедиа для пассажира удалено из списка устройств.
  • В список устройств добавлено устройство зеркального вывода.
  • Остальные выходные устройства для аудиозоны пассажира остаются в списке устройств.

При наличии списка устройств API вызывается с обновленным списком устройств и идентификатором пользователя пассажира. На следующем изображении представлена ​​последовательность рабочего процесса аудиозеркала.

Рабочий процесс аудиозеркала

Рисунок 7. Рабочий процесс аудиозеркала.

На рисунке 7 API менеджера аудиосистемы автомобиля для управления зеркалированием звука вызываются из Media System Service. В частности, 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>