汽車音訊設定

在 Android 10 中,已取代 car_audio_configuration.xml car_volumes_groups.xmlIAudioControl.getBusForContext。音訊政策 檔案,通常包含於供應商分區中,代表音訊硬體 請務必調整主機板的配置設定以下清單中提及的所有裝置: 必須在以下位置定義「car_audio_configuration.xml」: audio_policy_configuration.xml

下圖 1 是汽車音訊服務的概要說明 汽車音訊服務讀取汽車音訊設定的架構 檔案來設定裝置音訊。

汽車音響架構總覽

圖 1. 汽車音響架構簡介。

將車輛音訊設定檔放入 vendor\etc\ 或 裝置上的 system\etc\vendor\etc\ 是車輛音訊服務第一次搜尋檔案的位置車輛 音訊服務會讀取 car_audio_configuration.xml 來判斷音訊 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

汽車音響區:

  • 每個音訊區域都包含不重複的音訊區間 ID。
  • 每個音訊區域都可以對應到一個乘客區域。
  • 每個可用區的音訊動作各自獨立:

    • 音訊焦點
    • 音訊路由
    • 降低其他應用程式音量
  • 汽車音量群組:

    • 含有音量群組的所有音訊裝置都是由 Nest 操控 增減不變所有裝置的音訊增益設定 群組中的元素必須相同

    • 音訊環境與音訊裝置的差異。這可用來建構音訊 以及將音訊用量對應至輸出裝置

    • 所有音訊情境都應在區域內表示。這樣一來, ,以便為各種音訊屬性正確設定音訊轉送功能

音訊情境

為簡化 AAOS 音訊的設定,我們將類似使用方式分組 放入 CarAudioContexts。這些音訊情境會用於 CarAudioService:定義轉送、音量群組、音訊焦點和降低其他應用程式 以自動化做法管理成本以下列出 AAOS 中的靜態音訊環境。

下表說明音訊情境和使用方式之間的對應關係。醒目顯示 資料列的新系統用途。

CarAudioContext 相關聯的屬性使用資訊
音樂 UNKNOWN
GAME
MEDIA
導航 ASSISTANCE_NAVIGATION_GUIDANCE
語音指令 ASSISTANT
ASSISTANCE_ACCESSIBILITY
來電響鈴 NOTIFICATION_RINGTONE
致電 VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
鬧鐘 ALARM
通知 NOTIFICATION
NOTIFICATION_*
系統音效 ASSISTANCE_SONIFICATION
緊急 EMERGENCY
安全 SAFETY
VEHICLE_STATUS VEHICLE_STATUS
公告 ANNOUNCEMENT

啟用 AAOS 轉送

如要使用 AAOS 轉送,您必須將 audioUseDynamicRouting 標記設為 true

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

false、轉送和許多 CarAudioService 都停用時,AAOS 就會下降 改回 AudioService 的預設行為。

主要可用區

根據預設,所有音訊都會轉送至主要可用區。只有一個主要可用區 會由屬性指示設定中的 isPrimary="true"。系統會自動為主要可用區指派 Audiomanager.PRIMARY_AUDIO_ZONE

範例設定 (第 2 版)

舉例來說,某輛車可能有兩個區域,一個主要區域和後座 以及娛樂系統在此情境下,您可以設計 car_audio_configuration.xml 第 2 版,如下所示:

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true">
           <volumeGroups>
               <group>
                   <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>
                   <device address="bus1_navigation_out">
                       <context context="navigation"/>
                   </device>
                   <device address="bus2_voice_command_out">
                       <context context="voice_command"/>
                   </device>
               </group>
               <group>
                   <device address="bus4_call_out">
                       <context context="call"/>
                   </device>
               </group>
               <group>
                   <device address="bus5_alarm_out">
                       <context context="alarm"/>
                   </device>
               </group>
               <group>
                   <device address="bus7_system_sound_out">
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                   </device>
               </group>
           </volumeGroups>
       </zone>
        <zone name="rear seat zone" audioZoneId="1">
           <volumeGroups>
               <group>
                   <device address="bus100_rear_seat">
                       <context context="music"/>
                       <context context="navigation"/>
                       <context context="voice_command"/>
                       <context context="call_ring"/>
                       <context context="call"/>
                       <context context="alarm"/>
                       <context context="notification"/>
                       <context context="system_sound"/>
                       <context context="emergency"/>
                       <context context="safety"/>
                       <context context="vehicle_status"/>
                       <context context="announcement"/>
                   </device>
               </group>
           </volumeGroups>
    </zones>
</audioZoneConfiguration>

在此範例中,主要可用區區分了部分音訊情境 不同的裝置讓 HAL 能夠套用不同的後續處理 並利用車輛的硬體混合每部裝置的輸出內容 這些裝置已分成多個音量群組:媒體、導航、 通話、鬧鐘和系統音效。如果系統設定為 useFixedVolume,那麼各群組的音量就會傳遞至 HAL 以便套用至這些裝置的輸出內容。

以主要可用區來說,建議將系統音效與其他 聲音。這樣一來,系統就能優先處理車輛聲音。 車輛音訊服務已用來區分 例如集中註意力和鴨子管理例如針對緊急求救事件 要求的優先順序高於其他焦點要求。

為簡單起見,在次要可用區中,所有音訊情境範例都如下 同時轉送到單一裝置和一個音量群組

乘客區域音訊設定

在 Android 11 中,導入了 car_audio_configuration.xml 兩個新欄位:audioZoneIdoccupantZoneId您可以使用「audioZoneId」 控制音訊區域管理您可以使用 occupantZoneId 來設定 都根據使用者 ID 轉送

返回上方音訊設定,但使用新欄位來代表 佔用區域 ID 和音訊區域 ID 對應,新的設定不含 音量群組定義可以按照下列方式設定。

<audioZoneConfiguration version="2.0">
       <zone name="primary zone" isPrimary="true" occupantZoneId="0">
         ...
       </zone>
       <zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
         ...
       </zone>
    </zones>
</audioZoneConfiguration>

上述設定定義了主要可用區與佔用可用區 0 的對應關係 和 audioZoneId 1 到 occupantZoneId 1.一般來說, 可以設定乘客區域和音訊區域。不過,對應必須 一對一定義這兩個新欄位的規則已列於下方。

  • 主要可用區的 audioZoneId 一律為 PRIMARY_AUDIO_ZONE ID。如果 已定義 isPrimary="true",則不需使用 audioZoneId

  • audioZoneIdoccupantZoneId 號碼不得重複。

  • audioZoneIdoccupantZoneId 只能有一對一對應。

Android 14 車輛音訊設定

在 Android 14 中,AAOS 導入了原始設備製造商 (OEM) 外掛程式服務。 讓您更主動管理車輛監督的音訊行為 音訊服務除了新外掛程式服務外,下列變更也會: :

  • 原始設備製造商 (OEM) 定義的車輛音訊結構定義
  • 非主要可用區動態設定

原始設備製造商 (OEM) 定義的車輛音訊情境

如要啟用彈性的音訊設定,請在 Android 中 14,車輛音訊服務 分組方式與上述的靜態音訊環境不同。 可在 car_audio_configuration.xml 中定義這個原始設備製造商 (OEM) 定義的結構定義 第 3 版檔案。

而是使用目前定義的靜態音訊環境。一般 原始設備製造商 (OEM) 定義的車輛音訊結構定義格式如下所示。

原始設備製造商 (OEM) 的結構定義則都須有 name 和音訊屬性清單 則分配給結構定義的使用情況在上例中,有兩種結構定義 定義:

<carAudioConfiguration version="3">
    <oemContexts>
        <oemContext name="media">
            <audioAttributes>
                <usage value="AUDIO_USAGE_MEDIA" />
    <usage value="AUDIO_USAGE_UNKNOWN"/>
            </audioAttributes>
        </oemContext>
        <oemContext name="game">
            <audioAttributes>
                <usage value="AUDIO_USAGE_GAME" />
            </audioAttributes>
        </oemContext>
...
  • media 背景資訊包含 AUDIO_USAGE_MEDIAAUDIO_USAGE_UNKNOWN
  • game 結構定義只包含 AUDIO_USAGE_GAME

必須在 car_audio_configuration.xml 頂端定義結構定義 檔案。定義 OEM 的情境後,其他車輛音訊設定 就能照常以下規則適用於汽車音訊情境:

  • 原始設備製造商 (OEM) 結構定義定義為選用項目。靜態音訊環境

  • 請勿重複命名背景資訊。

  • 請勿將音訊屬性用途指派給多個情境。

  • AudioAttributes 中定義的所有音訊使用方式都應用於建構 相關資訊

嚴格說來,android.audio.policy.configuration.V7_0.AudioUsage 音訊使用的字串表示法,必須在原始設備製造商 (OEM) 音訊情境中使用 定義日後,新版音訊屬性的使用情況將指派給此 最適當的背景資料來減少從 Android 裝置遷移資料時出現的錯誤 移至另一個版本

為了進一步擴充 OEM 外掛程式,我們導入了 OEM 定義的結構定義 音訊服務,也可在不提供原始設備製造商 (OEM) 外掛程式服務的情況下使用。音訊 類似於靜態音訊服務的行為:

  • 音訊焦點互動。音訊屬性可用來決定最佳效果 比對行為。適用對象 詳情請參閱「音訊焦點」。

  • 音訊音量控制音訊屬性可用來判斷最佳比對結果:

    • 以原始設備製造商 (OEM) 定義情境為基礎的音量群組。
    • 來自設定的靜態磁碟區清單優先順序。
  • 「降低其他應用程式音量」行為:

    • 目前音訊焦點的音訊屬性用途將用於映射到 輸出汽車音訊設定中定義的音訊裝置資訊 檔案。

    • 音訊屬性用於將對應的靜態內容對應至鴨子。 根據靜態音訊折疊矩陣

動態音訊區設定

在 Android 14 中,納入動態音訊區域。 定義音訊區域的汽車音訊設定結構定義 而且更新到第 3 版您必須完成設定,才能使用新的結構定義 每個可用區

<carAudioConfiguration version="3">
    <!-- optional OEM context -->
    <oemContexts>
      <oemContext name="media">
        <audioAttributes>
          <usage value="AUDIO_USAGE_MEDIA" />
          <usage value="AUDIO_USAGE_UNKNOWN"/>
        </audioAttributes>
      </oemContext>
      <oemContext name="game">
        <audioAttributes>
          <usage value="AUDIO_USAGE_GAME" />
        </audioAttributes>
      </oemContext>
...
    </oemContexts>
  <zones>
    <zone name="primary zone" isPrimary="true" occupantZoneId="0">
      <zoneConfigs>
        <zoneConfig name="primary zone config 0" isDefault="true">
          <volumeGroups>
            <group>
              <device address="bus0_media_out">
                <context context="media"/>
            <context context="game"/>
                <context context="announcement"/>
              </device>
              <device address="bus6_notification_out">
                <context context="notification"/>
              </device>
            </group>
  ...
      </zoneConfigs>
    </zone
  </zones>

詳情請參閱 device/generic/car/emulator/audio/car_audio_configuration.xml。距離開始還有 在 Android 14 中,主要可用區只能有一個 (1) 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定非主要可用區可以有多項設定。下列 汽車音訊設定有下列規則:

  • 主要音訊可用區「只能」進行一項設定。

  • 非主要音訊區域可以有多項設定。

  • 每個音訊區域和音訊區域設定的名稱均不得重複。

  • 在單一音訊區域內,音訊設定可能有所不同:

    • 磁碟區群組的設定必須相同。
    • 音訊情境指派設定不得相同。
  • 音訊輸出裝置名稱在所有區域或設定中均不得重複。A 罩杯 在音訊設定或區域中,裝置名稱「只能」顯示一次。

  • 屬於同一音量群組的音訊裝置,應該要有相同的音訊 取得組態

  • 請務必為每個音訊指定所有音訊情境 (原始設備製造商 (OEM) 或靜態音訊) 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定

,瞭解如何調查及移除這項存取權。

前瞻相容性

儘管新版本的 car_audio_configuration.xml 已推出 仍可在新版 Google Workspace 中 AAOS。原始設備製造商 (OEM) 更新至新版 Android 後,即可重複使用 car_audio_configuration.xml 檔案。

若要使用需要 car_audio_configuration.xml,必須更新版本。正嘗試使用 包含該檔案版本不支援資訊的舊版檔案 會在車輛服務啟動時擲回 IllegalStateException。例外狀況 訊息內含會使用哪些資訊,以及 所需最低版本