車輛音訊服務根據核心音訊動態音訊政策決定要採用哪些音訊 更是如此
為每位乘客分別播放音訊,稱為多區域音訊 每個可用區都支援並行播放音效
動態音訊區設定。
乘客主要區域音訊投放。
乘客的音訊鏡像。
在各種用途中,汽車音訊服務都會使用動態音訊政策: 自動將音訊轉送至指定的輸出裝置。
多區域音訊
多區域音訊可讓多位使用者同時與 AAOS 互動。A 罩杯 一組輸出裝置會與一個可用區相關聯,每個可用區都會維護音訊 關注焦點和音量乘客可以在開車時聆聽自己的音訊 會監聽主要可用區中的另一個來源 (通常是主要車櫃)。
多可用區音訊架構
圖 1. 汽車音響服務架構。
車輛音訊區域是音訊輸出、音訊焦點和其他元件的抽象化機制 音訊設定,而且所有設定都可單獨管理。為了轉送流量 每個可用區都定義為一組音訊輸出匯流排裝置, 音訊政策設定。每種音訊區域定義的裝置不盡相同。 在圖 1 中,公車裝置 (1 到 5) 屬於區域零,公車裝置為 6 到 8 8 屬於區域 1,而 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
也定義了
會將使用者區域對應至螢幕、其他週邊裝置,以及使用者
使用者登入螢幕。音訊區域的特色如下:
音訊區域 ID 和乘客區域 ID。
- 將音訊區域地圖設定為佔用區域 (座位、顯示器和其他週邊裝置)
- 登入時指派給哪個使用者 ID 會獲派音訊區域
音訊設定清單。每項音訊設定都有一組 音量群組每個音量群組都有一組音訊匯流排裝置。
變更音量後,群組中的所有音訊裝置都會控制在以下位置: 使用這個層即可
系統會為每部音訊裝置指派一份音訊屬性清單。這個 這些資訊會用來建構音訊政策組合,並採用不同的方式 指派的音訊屬性
這項設定可讓系統將不同的音訊屬性使用方式轉送至 不同的輸出裝置視用途而定 聲音可以同時播放舉例來說,您可以選擇 車內 (主要區域) 透過所有揚聲器播放媒體音效,同時播放導航音效 接收到最接近駕駛座的揚聲器在音訊並行播放的情況下 主要車廂在導航至 驅動程式庫。
多區域音訊乘客登入工作流程
以下序列圖表顯示在發生下列情況時,啟用音訊轉送的流程 乘客登入其螢幕:
圖 2.
在此序列中,使用者登入會經由 乘客區域服務。
車輛音訊服務 (針對特定音訊區域) 使用 使用
AudioPolicy#removeUserIdDeviceAffinity
API 移除使用者裝置 興趣相似目標對象。這個 API 採用使用者 ID,在這個例子中 內容。AudioPolicy#setUserIdDeviceAffinity
API 會將新使用者指派給 這個區域會納入 User-ID 和所有裝置的特定可用區 此外還會從 0 自動調整資源配置 您完全不必調整資源調度設定
動態可用區設定
在 Android 14 中,動態可用區設定 協助原始設備製造商 (OEM) 為乘客設定不同的裝置組合。 這可讓位於後座的乘客在後座之間切換 頭部喇叭和後座耳機週邊裝置。
在此情況下,您必須提供兩項設定。一個代表後座 以及耳機週邊裝置系統會轉送特定使用者的音訊 一次只會套用至一個設定
圖 3. 動態可用區設定工作流程。
圖 3 插圖:動態區域設定架構
工作流程音訊區域 1 包含 Config 0
和 Config 1
兩項設定,
與輸出裝置的喇叭和頭部相關
使用者登入後,系統就會自動為他們指派預設設定。 使用者選擇變更設定時 (通常是透過系統 UI), 車輛音訊服務會執行兩種設定之間的切換作業。在本 輸出裝置會在 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 來管理設定:
- 某個可用區可用的查詢設定。
- 查詢目前設有可用區設定。
- 請改用其他設定。
系統 UI 應用程式或服務可以使用這些 API 來管理 如圖 4 所示。Query API 將兩者公開給乘客看。 使用者可以輕觸 所需設定
圖 4. 動態可用區設定工作流程。
主要區域乘客音訊投放
主要區域乘客音訊投放功能是在 Android 14 中導入的功能, 可讓乘客將媒體音訊投放至主要可用區。在本 以便將乘客的媒體音訊投放到主要車廂 驅動程式仍完全掌控
下圖顯示了 乘客媒體音訊投放。
圖 5. 動態可用區設定工作流程。
圖顯示駕駛人使用的媒體輸出裝置與 乘客,只有在乘客投放到主要可用區時才會發生這種情況 模式。動態音訊政策也可用來管理 但系統不會對驅動程式的裝置相依性套用任何變更。適用對象 輸出裝置清單的乘客會變更如下:
- 乘客的媒體輸出裝置已從裝置清單中移除
- 驅動程式的媒體輸出裝置已新增至裝置清單
- 乘客音訊區域的其餘輸出裝置仍會保留在裝置清單中
這張新的裝置清單是由
AudioPolicy#setUserIdDeviceAffinity
API。傳遞到 API 的參數是
和乘客使用者 ID 清單。音訊系統音訊
政策服務查詢要為媒體音軌選取的音訊組合
與乘客相關聯的媒體音訊組合
已選取可用區
主要可用區投放音訊的主要需求是主要可用區的媒體 輸出裝置與其他音訊屬性的使用情形區隔開來。否則,在 多個音訊屬性,其他音訊屬性則會新增至組合中。 混音選擇由音響系統完成混音時,連接的所有音效 系統會在主要車櫃中播放這個合輯。
乘客區音訊鏡像
音訊鏡像功能可讓乘客分享音訊。鏡像功能 重複的音訊資料,以便所有乘客都能聆聽 相同的音訊。在這個情況下,乘客將使用音訊焦點 片段與音訊的鏡像
音訊鏡像轉送
至少需要兩名乘客才能啟用音訊鏡像功能。身為 因此,如果音訊配置只有兩個乘客音訊區域,就需要 一個鏡像輸出裝置根據上述定義,兩個並行鏡像 並開始建立工作階段
下圖顯示多區域音訊鏡像的簡化圖表
兩名乘客之間兩位乘客的音訊會轉送至音訊鏡像
裝置,bus_1000
。音訊 HAL 會將訊號複製到來源可用區。
圖 6. 動態可用區設定工作流程。
「只有」乘客處於鏡像模式時,才會啟用路線規劃功能。如果
而不是將音訊區域的對應裝置指派給乘客。
首次為乘客啟用鏡像功能時,
AudioPolicy#setUserIdDeviceAffinity
API 會修改轉送:
- 乘客的媒體輸出裝置已從裝置清單中移除。
- 已將鏡像輸出裝置新增至裝置清單。
- 乘客音訊區域的其餘輸出裝置會保留在裝置清單中。
使用裝置清單時,系統會使用更新後的裝置清單呼叫 API 乘客的使用者 ID。下圖提供 音訊鏡像工作流程
圖 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
是目的地
公車。
序列圖中不會顯示的信號是透過
AudioManager#setParameters
API:可透過音訊傳遞至 HAL
課程中也會快速介紹 Memorystore
這是 Google Cloud 的全代管 Redis 服務
停用音訊鏡像後,系統會傳送以下訊號:
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>