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

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

В данном случае требуется две конфигурации. По одной для подголовника заднего сиденья и для наушников. Звук для конкретного пользователя направляется только в одну конфигурацию одновременно.

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

Рисунок 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>