Конфигурация автозвука

В Android 10 car_audio_configuration.xml заменил car_volumes_groups.xml и IAudioControl.getBusForContext . Файлы аудиополитики, обычно расположенные в разделе vendor, представляют собой конфигурацию аудиооборудования платы. Все устройства, указанные в car_audio_configuration.xml должны быть определены в audio_policy_configuration.xml .

На рисунке 1 представлен общий обзор архитектуры сервиса автомобильной аудиосистемы, в которой сервис считывает файл конфигурации автомобильной аудиосистемы для настройки звука на устройстве.

Обзор архитектуры автомобильных аудиосистем

Рисунок 1. Общий вид архитектуры автомобильной аудиосистемы.

Разместите файл конфигурации автомобильной аудиосистемы в папке vendor/etc/ или system/etc/ на устройстве, при этом папка vendor/etc/ будет первой, где служба автомобильной аудиосистемы будет искать этот файл. Служба автомобильной аудиосистемы считывает файл car_audio_configuration.xml для определения конфигурации аудиосистемы.

Зоны автомобильной аудиосистемы:

  • Каждая аудиозона имеет уникальный идентификатор.
  • Каждую аудиозону можно сопоставить с зоной присутствия человека.
  • Звуковые действия в каждой зоне независимы друг от друга:

    • Аудиофокус
    • Маршрутизация звука
    • приглушение звука
  • Объемы автомобилей:

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

    • Сопоставление контекста звука с аудиоустройствами. Используйте это для создания аудиомикса, который сопоставляет использование звука с устройством вывода.

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

Аудиоконтексты

Для упрощения настройки звука в AAOS аналогичные случаи использования сгруппированы в CarAudioContexts . Эти аудиоконтексты используются во всей CarAudioService для определения маршрутизации, групп громкости, фокусировки звука и управления подавлением звука. Статические аудиоконтексты в AAOS перечислены в этой таблице.

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

CarAudioContext Связанные использования атрибутов
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

Включить маршрутизацию AAOS

Для использования маршрутизации на основе AAOS необходимо установить флаг audioUseDynamicRouting в true :

<resources>
    <bool name="audioUseDynamicRou>ting<">;<true/bool
>/resources

Если false , маршрутизация и большая часть CarAudioService отключаются, и AAOS возвращается к поведению по умолчанию, характерному для AudioService .

Настраиваемый механизм политики аудио

Для дальнейшего расширения возможностей управления автомобильной аудиосистемой в Android 14, AAOS представила использование управления звуком через настраиваемый механизм политик звука (CAP) . Это обеспечивает большую гибкость в управлении маршрутизацией звука и регулировкой громкости, а также позволяет гибко определять следующие параметры:

Вы можете включить механизм настраиваемых аудиополитик (CAP) с помощью параметров useCoreAudioVolume и useCoreAudioRouting ; подробности см. в разделе «Механизм настраиваемых аудиополитик» .

Первичная зона

По умолчанию весь звук направляется в основную зону. Существует только одна основная зона, которая указывается в конфигурации атрибутом isPrimary="true" . Основной зоне автоматически присваивается имя Audiomanager.PRIMARY_AUDIO_ZONE .

Пример конфигурации (версия 2)

Например, в автомобиле может быть две зоны: основная зона и развлекательная система для задних пассажиров. В этом случае вы можете разработать возможную версию 2 car_audio_configuration.xml следующим образом:

<audioZoneConfiguration version=">;2.0&quo<t;
       zone name="primary zone&qu>ot; isPrimar<y="true>"
         <  vol>umeGroups
          <     group
                   d>evice address="bus0<_media_out"
       >                context <context="music"/
    >                   c<ontext >context="announ<cement"/
                   /d>evice
                  < device address="bus3_c>all_ring_out"
 <       >               conte<xt context="call_ring"/
    >               /device
 <                  device addres>s="bus6_notific<ation_o>ut"
       <      >          contex<t con>text="notificat<ion"/
                   /devic>e
               /group
<               group
        >           device ad<dress=&>quot;bus1_navigation<_out"
                       conte>xt context="navigat<ion"/
                   /d>evice
              <     de>vice address=&qu<ot;bus>2_voice_command_<out&q>uot;
               <        context context=">voice_command"/
   <                /device>
               /gro<up
    >           group<
     >              de<vice >address="bus4_c<all_out"
                 >      context context=&q<uot;call"/
        >           /device
 <       >       /group
  <      >       group
   <     >           device ad<dress="bus5_alarm_out"
     >                  contex<t context="alarm"/
  >                 /device<
               /group
     >          group
        <           device address>="bus7_system_sound<_out"
                      > context context=&qu<ot;syst>em_sound"/
<      >            <     context >context=<">;emergenc<y"/
                       context co>ntext="<safety">/
              <     >    context context=<"vehicle_status"/
     >              /device
  <             /group
    >       /volumeGroups
   <    /zone
        zone name=&>quot;rear seat zone"<; audioZoneId="1"
    >       volumeGroups
    <           group
           >        device address=&<quot;bus100_rear_seat&q>uot;
                   <    context context=&quo>t;music"/
         <              context context=&>quot;navigation"/
 <                      context c>ontext="voice_comma<nd"/
                  >     context context=&qu<ot;call_ring"/
     >                  contex<t context="call"/
     >                  contex<t context="alarm"/
  >                    < contex>t context="<notifi>cation"</
           >     <      > <context context="s>ystem_sound"/
                       context context="emergency"/
                       context context="safety"/
                       context context="vehicle_status"/
                       context context="announcement"/
                   /device
               /group
           /volumeGroups
    /zones
/audioZoneConfiguration

В этом примере основная зона разделяет некоторые аудиоконтексты для разных устройств. Это позволяет HAL применять различные эффекты постобработки и микшировать выходной сигнал на каждом устройстве, используя аппаратное обеспечение автомобиля. Устройства сгруппированы в несколько групп громкости: мультимедиа, навигация, звонки, сигналы тревоги и системные звуки. Если система настроена на использование useFixedVolume , то уровни громкости для каждой группы передаются в HAL для применения к выходному сигналу этих устройств.

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

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

Определение группы томов для механизма CAP

Для использования управления громкостью через механизм CAP, как указано в разделе «Настраиваемый механизм политик звука», определение группы громкости также должно содержать имя:


<group name="media">
  <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 name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

Имя этой группы томов должно совпадать с именем тома, определенным в механизме CAP. Кроме того, параметр useFixedVolume также должен быть установлен в false . Подробнее см. в разделе « Флаги конфигурации звука AAOS» .

Настройка звука в зоне присутствия

В Android 11 в car_audio_configuration.xml появились два новых поля: audioZoneId и occupantZoneId . С помощью audioZoneId можно управлять зонами воспроизведения звука, а с помощью occupantZoneId — настраивать маршрутизацию на основе идентификатора пользователя.

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

<audioZoneConfiguration version=">;2.0&quo<t;
       zone name="primary zone" isPrimary=">;true" occupantZ<oneId>="0<"
         ...
       /zone
       zone name="rear >seat zone" audio<ZoneI>d=&qu<ot;1&q>u<ot; occupantZoneId=&quo>t;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, которая позволяет управлять поведением звука, контролируемым службой автомобильной аудиосистемы. Наряду с новыми службами плагинов, в файл конфигурации автомобильной аудиосистемы внесены следующие изменения:

  • Контекст автомобильной аудиосистемы, определенный производителем оборудования
  • Динамические конфигурации неосновных зон

Контекст автомобильной аудиосистемы, определенный производителем оборудования

Для обеспечения гибкой настройки звука в Android 14 служба автомобильной аудиосистемы позволяет группировать использование звука иначе, чем это предусмотрено статическими контекстами аудио . Этот контекст, определяемый производителем оборудования, можно задать в файле car_audio_configuration.xml версии 3.

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

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

<carAudioConfiguration version=&qu>ot;3&<quot;
    o>emContext<s
        oemContext na>me="medi<a"
       >     audioAttribu<tes
                usage value=&>quot;<AUDIO_USAGE_MEDIA" /
    usag>e value="<;AUDIO_USAGE_UNK>NOWN"<;/
        >    /audi<oAttributes
        /o>emContext
   <     oemContext> name="game&<quot;
            audioAttribute>s
           <     usage value>="AU<DIO_USAGE_G>AME&quot; /
            /audioAttributes
        /oemContext
...
  • Контекст media содержит AUDIO_USAGE_MEDIA и AUDIO_USAGE_UNKNOWN
  • Контекст game содержит только AUDIO_USAGE_GAME

Контекст должен быть определен в верхней части файла car_audio_configuration.xml . После определения контекстов OEM остальная часть настройки автомобильной аудиосистемы может выполняться как и прежде. К контексту автомобильной аудиосистемы применяются следующие правила:

  • Определение контекста OEM является необязательным. Вместо него используется статический контекст Audio .

  • Не повторяйте названия контекстов.

  • Не назначайте использование атрибутов звука нескольким контекстам одновременно.

  • Все варианты использования аудио, определенные в AudioAttributes должны использоваться для построения контекста.

Строго говоря, для определения контекста аудио от производителя необходимо использовать строковое представление android.audio.policy.configuration.V7_0.AudioUsage , описывающее использование аудио. В будущем новые атрибуты аудио будут назначаться наиболее подходящему контексту, чтобы уменьшить количество ошибок при миграции с одной версии Android на другую.

Хотя контекст, определяемый производителем оборудования (OEM), был введен для дальнейшего расширения возможностей аудиосервиса OEM-плагинов, его можно использовать и без сервиса OEM-плагинов. Поведение звука аналогично поведению статического аудиосервиса:

  • Взаимодействие фокуса на аудио. Атрибут аудио используется для определения наилучшего поведения соответствия, заданного матрицей взаимодействия фокуса на аудио. Подробнее см. раздел «Фокус на аудио» .

  • Атрибут регулировки громкости звука используется для определения наилучшего соответствия:

    • Группа томов основана на контексте, определенном производителем оборудования.
    • Приоритет определяется из настроенного списка статических томов.
  • Эффект подавления звука:

    • Использование атрибутов аудио для текущего аудиофокуса применяется для сопоставления с информацией о выходном аудиоустройстве, определенной в файле конфигурации автомобильной аудиосистемы.

    • Атрибут Audio используется для сопоставления соответствующего статического контекста с функцией подавления звука (duck) на основе статической матрицы подавления звука.

Стратегии разработки продуктов на базе двигателей CAP

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

Для получения более подробной информации ознакомьтесь со стратегией развития продукта CAP engine в AAOS.

Динамические настройки аудиозон

В Android 14 для поддержки динамической настройки аудиозон схема конфигурации автомобильной аудиосистемы для определения аудиозон также обновлена ​​до версии 3. Новая схема требует настройки конфигурации для каждой зоны.

<carAudioConfiguration version=&qu>ot;3&<quot;
    !-- optional OEM >conte<xt --
    o>emConte<xts
      oemContext na>me="<media"
   >     audioA<ttributes
          usage value=&>quot;AUDIO_<USAGE_MEDIA" /
          usag>e value=&<quot;AUDIO_USAGE>_UNKNOW<N"/
  >      /<audioAttributes
      >/oemConte<xt
      oemCon>text name=&<quot;game"
        audioAtt>ributes
 <         usage v>alue=&q<uot;AUDIO_U>SAGE_GAME<" /
   >   <  /au>dioAt<tributes
      /oemContext
...
    /oemContexts
  zones
    >zone na<me="pr>imary zon<e" isPrimary="true" occupantZoneId=">0"
   <   zoneConfi>gs
        zo<neCon>fig name="<primary zone config 0" isD>efault="true<"
          volumeG>roups
       <     group
            >  device address=<"bus0_media_out"
    >            con<text co>ntext="med<ia"/
            context context=>"game"/<
                context contex>t="announc<ement&q>uot;/
       <      > /device
    <          de>vice <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. Производители автомобилей, обновляющие свои устройства до новых версий Android, могут повторно использовать файл car_audio_configuration.xml .

Для использования новой функции, требующей новой информации, содержащейся в файле car_audio_configuration.xml , необходимо обновить версию. Попытка использования более старой версии файла с информацией, не поддерживаемой в этой версии, приводит к возникновению исключения IllegalStateException при запуске службы car. Сообщение об исключении содержит соответствующую информацию о том, какая информация используется и какая минимальная версия требуется.