磁碟區管理包含在 CarAudioService
中,採用固定磁碟區
磁碟區只會套用至 HAL 以下的容量
而不是軟體CarAudioService
管理輸出裝置
將相同音量套用到所有與
音量群組
固定磁碟區
AAOS 實作項目會使用硬體擴大器控制音量,而非使用
軟體混合程式如要避免副作用,請將 config_useFixedVolume
標記設為
true
(視需要重疊):
<resources>
<!-- Car uses hardware amplifier for volume. -->
<bool name="config_useFixedVolume">true</bool>
</resources>
未設定 config_useFixedVolume
標記 (或設為 false
) 時,
應用程式可以呼叫 AudioManager.setStreamVolume()
來依串流調整音量
在軟體混合工具中輸入這項做法可能帶來理想成效
以及軟體混合器的音量感知能力
因此當接收到
硬體擴大器
磁碟區群組
音量群組管理音訊中特定裝置的音量 可用區每個音量群組的音量都可以獨立控制。 所得的提升效果也會設定為關聯裝置上,進而套用 車輛的擴音器磁碟區設定會保留給使用者,並載入 使用者登入時。
定義磁碟區群組
CarAudioService 使用在 car_audio_configuration.xml
中定義的音量群組:
<audioZoneConfiguration version="2.0">
<zones>
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
...
</volumeGroups>
</zone>
</zones>
</audioZoneConfiguration>
每個磁碟區群組都應含有一或多部相關聯的輸出裝置
讓我們看看 DNS 解析
進一步探索內部和外部位址位址必須對應於
audio_policy_configuration.xml
。
設定磁碟區群組的增益項目
每個磁碟區群組都有最小值、最大值和預設增益值,以及
步量大小取決於在 audio_policy_configuration.xml
中設定的
與磁碟區群組相關聯的裝置
<devicePort tagName="bus0_media_out" role="sink" type="AUDIO_DEVICE_OUT_BUS" address="bus0_media_out">
<profile name="" format="AUDIO_FORMAT_PCM_16_BIT" samplingRates="48000" channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
<gains>
<gain name="" mode="AUDIO_GAIN_MODE_JOINT"
minValueMB="-3200" maxValueMB="600" defaultValueMB="0" stepValueMB="100"/>
</gains>
</devicePort>
在初始化期間,磁碟區群組會檢查相關聯的 ,並且將群組設定如下:
- 步距:凡是由音量群組控管的裝置,都必須相同。
- 最小增益。群組中裝置的最小增益值。
- 最大增益。群組中裝置的最高收益。
- 預設增益。群組中裝置的預設增益值。
根據這些值的設定方式,您可以將 與音量相關聯的裝置支援的音量群組超出支援的範圍 群組。在這種情況下,裝置的增益會設為裝置的 根據磁碟區群組值是低於或高於最高增益值
磁碟區群組 ID
磁碟區群組會在執行階段按照 XML 檔案中定義的順序識別。
ID 範圍介於音訊區域內的 0
到 N-1
之間,其中 N
是
可用區中的磁碟區群組如此一來,磁碟區群組 ID 即可重複
可以跨可用區使用這些 ID 會用於與 CarAudioManager
相關聯的 API
與磁碟區群組結合接收 groupId
,但沒有 zoneId
的任何 API
預設值為主要音訊可用區。
多可用區磁碟區管理
每個音訊可用區應有一或多個音量群組,而每個音量
每個群組只會與一個音訊區域相關聯。這種關係的定義
作為 car_audio_configuration.xml
的一部分。詳情請參閱上例
請參閱「定義磁碟區群組」一文。
每個可用區目前的磁碟區等級都會保留給相關聯的使用者 可用區這些設定因區域而異,也就是說,如果使用者在 與主要可用區相關聯的螢幕,稍後卻登入可用區時 與次要音訊區域相關聯、載入並保留 第一個可用區和次要可用區不同
處理音量重要事件
Android 定義幾個音量控制按鍵碼,包括:
KEYCODE_VOLUME_UP
KEYCODE_VOLUME_DOWN
KEYCODE_VOLUME_MUTE
根據預設,Android 會將音量重要事件轉送至應用程式。汽車業
導入後,這些重要事件
CarAudioService
,然後呼叫 setGroupVolume
或 setMasterMute
,如
或適當。如要強制執行此行為,請將
config_handleVolumeKeysInWindowManager
標記給 true
:
<resources>
<bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>
磁碟區重要事件目前無法辨別
這類 IP 位址的適用情境,且會假設所有這些都與
音訊區。收到音量重要事件時,CarAudioService
會決定
擷取已啟用音訊環境的音訊情境,進而調整音量群組
並調整包含輸出裝置的音量群組
與最高優先順序的音訊情境相關優先順序是
排序依據為
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
。
淡出和平衡
兩個 AudioControl HAL 版本都含有用於設定淡入/淡出和平衡的 API
適用於 CarAudioManager 的對應系統 API 傳遞值
音訊控制 HAL這些 API 需要
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
。AudioControl API 包含:
setBalanceTowardRight(float value)
將喇叭音量調高到 車輛的右側 (+) 或左側 (-)。- 0.0 置中
- +1.0 是完全正確的
- -1.0 已充飽
- 如果值超出 -1 到 1 的範圍,表示發生錯誤
setFadeTowardFront(float value)
將喇叭音量調高到 車輛前方 (+) 或背面 (-)。- 0.0 置中
- +1.0 完全正向
- -1.0 完全是背面
- 如果值超出 -1 到 1 的範圍,表示發生錯誤
決定這些值的套用方式以及顯示值的方式 使用者。可以嚴格應用在媒體上或整個公司 Android 音效。Android 11 也開始提供支援 以便為輸出裝置套用音效這樣一來 也能在適當的效果下,以適當的音效管理淡入和平衡 輸出裝置,而非透過這些 API
降低其他應用程式音量
在車輛降低單一串流的增益時會出現「降低其他應用程式音量」, 就能更清楚地聽到正在播放的 另一個串流。在 AAOS 中 「降低背景音量」是由 HAL 實作。Android 只能控制聲音 只不過是運作的工具在 Android 11 中,主要資訊 HAL 負責決定裝置究竟是不是兩個輸出結果 兩部裝置都已開啟串流播放功能。
何時適合游泳
雖然各家原始設備製造商 (OEM) 可自行決定 YAML 的處理方式 HAL,建議您遵循下列準則。
在 Android 裝置上同時播放多個串流時,經常會發生在兩個應用程式或服務中 同時保留音訊焦點瞭解 Android 可能在哪些情況下允許並行 請參閱限制類型中的互動矩陣。 採用車輛音訊外掛程式後,這也取決於您的 音訊焦點管理
Android 混合的串流作業會先經過所有作業再取得 已套用。因此,在並行播放串流時,應將任何串流應該隱藏起來 都應該轉送至不同的輸出裝置,讓 HAL 可以 才能混合使用
建議降低的降低其他應用程式音量
以下是建議同時降低並行互動次數的可能建議。
互動 | 動作 |
---|---|
EMERGENCY
| 將SAFETY 以外的所有裝置設為靜音或設為靜音
|
SAFETY |
填補 EMERGENCY 以外的所有項目 |
NAVIGATION |
填補 SAFETY 和 EMERGENCY 以外的所有項目 |
CALL |
填補 SAFETY 、EMERGENCY 以外的所有項目,
和NAVIGATION |
VOICE |
鴨子 CALL_RING |
VEHICLE_SOUNDS |
你可以判斷有效聲音的重要性,以及音效是否重要 。 |
MUSIC 和ANNOUNCEMENT |
吃飽了。例外狀況是藉由下列形式呈現的觸控互動音效
SYSTEM_SOUND 。
|
鴨子注意事項
部分應用程式和服務 (例如導航或 Google 助理) 可能會使用多個 來執行動作避免串流資料串流時過度勞累 停止在輸出裝置之間流動,以確保媒體不會恢復已滿 並在下次使用導航或 啟動小幫手應用程式。
如果車輛有多個音效舞台,而且音量足夠良好,你可以: 轉送音訊到車輛的不同區域,而不是鴨子。例如: 系統便能將導航指示轉送到駕駛座的頭部喇叭 會繼續以一般的音量在車櫃中播放音樂
安全重要聲響
Android 11 推出
HAL 音訊焦點 API。HAL 可確保
優先音效高於其他音效。如果 HAL 保留音訊
專門用於USAGE_EMERGENCY
,但我們不保證應用程式和服務
Android 不會播放音效HAL 可決定 Android 應使用哪些串流
混和或設為靜音,以播放重要的安全音效。
調整音量設定 UI
AAOS 將音量設定 UI 與磁碟區群組設定分離。 這些可重疊,就像是 設定磁碟區群組的增益值。這項差異可確保 且磁碟區群組設定有所變更時 不需要進行任何變更
在車輛設定使用者介面中,packages/apps/Car/Settings/res/xml/car_volume_items.xml
包含與各個項目相關聯的 UI 元素 (標題和說明資源)
已定義 AudioAttributes.USAGE
。這個檔案能呈現合理的算繪結果
的 VolumeGroups
屬性 (方法是使用與第一個值相關聯的資源)
每個 VolumeGroup
都包含辨識的使用情況。
舉例來說,以下範例將 VolumeGroup
定義為包含:
voice_communication
和voice_communication_signalling
。預設
車輛設定 UI 的實作會使用 VolumeGroup
是與「voice_communication
」相關聯的資源,因為這是第一個 matc
檔案中。
<carVolumeItems xmlns:car="http://schemas.android.com/apk/res-auto">
<item car:usage="voice_communication"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="voice_communication_signalling"
car:title="@*android:string/volume_call"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="media"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="game"
car:title="@*android:string/volume_music"
car:icon="@*android:drawable/ic_audio_media"/>
<item car:usage="alarm"
car:title="@*android:string/volume_alarm"
car:icon="@*android:drawable/ic_audio_alarm"/>
<item car:usage="assistance_navigation_guidance"
car:title="@string/navi_volume_title"
car:icon="@drawable/ic_audio_navi"/>
<item car:usage="notification_ringtone"
car:title="@*android:string/volume_ringtone"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistant"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="notification"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_request"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_instant"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_communication_delayed"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="notification_event"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_accessibility"
car:title="@*android:string/volume_notification"
car:icon="@*android:drawable/ic_audio_ring_notif"/>
<item car:usage="assistance_sonification"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
<item car:usage="unknown"
car:title="@*android:string/volume_unknown"
car:icon="@*android:drawable/ic_audio_vol"/>
</carVolumeItems>
上述設定所使用的屬性和值,會宣告為
packages/apps/Car/Settings/res/values/attrs.xml
。音量設定 UI 會使用
下列採用 VolumeGroup
的 CarAudioManager API:
getVolumeGroupCount()
,瞭解應繪製的控制項數量。getGroupMinVolume()
和getGroupMaxVolume()
可取得下限和上限。- 如要取得目前的音量,請
getGroupVolume()
。 - 如要接收音量變化通知,請
registerVolumeChangeObserver()
。
汽車音量群組事件
針對音量更新和靜音切換鈕的用途, Automotive 有情境 可定義特定應用程式的操作 (例如音量) 的底座 可以管理叢集設定,像是節點 資源調度、安全性和其他預先設定項目車輛音訊堆疊提供的目前音量和靜音回呼 有限的背景資訊。更貼近汽車用途與未來需求 擴充性,CarVolumeGroupEvent 已新增至 Android 14。 每個事件都包含三種關鍵資訊:
CarVolumeGroupInfo
的清單EventTypes
(位元對應)ExtraInfos
的清單
CarVolumeGroupInfo
事件回呼的接收器已準備好存取受影響的車輛清單
音量群組資訊也就是說,應用程式不需要在
才能取得最新狀態。這項服務可以
只要使用收到的 CarVolumeGroupInfos
更新使用者介面或內部元件即可
州。為提供便利的應用程式,車輛音量發生變化的因素
群組也會做為 EventTypes
的一部分提供,如下所述。
EventType
定義 CarVolumeGroupInfo
的哪些切面已變更。應用程式可將這項功能用於
找出變更並採取必要行動例如:
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
表示對應的
CarVolumeGroups
磁碟區增加量指數已變更,並且可透過以下查詢進行查詢:
CarVolumeGroupInfo.getMaxVolumeGainIndex()
。
下表列出 EventType
與
CarVolumeGroupInfo
。
事件類型 | CarVolumeGroupInfo |
---|---|
EVENT_TYPE_VOLUME_GAIN_INDEX_CHANGED | CarVolumeGroupInfo.getVolumeGainIndex() |
EVENT_TYPE_VOLUME_MIN_INDEX_CHANGED | CarVolumeGroupInfo.getMinVolumeGainIndex() |
EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED | CarVolumeGroupInfo.getMaxVolumeGainIndex() |
EVENT_TYPE_MUTE_CHANGED | CarVolumeGroupInfo.isMuted() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isDisabled() |
EVENT_TYPE_ATTENUATION_CHANGED | CarVolumeGroupInfo.isAttenuated() |
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED | CarVolumeGroupInfo.getAudioAttributes() |
其他資訊
提供額外資訊,說明 CarVolumeGroup
變更的原因。應用程式
可利用這項資訊提供額外相關資訊,提醒使用者
這類行為或通知例如:EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL
表示由於熱量過載而運作中的暫時優化。應用程式
可以通知使用者嘗試提高音量。
我們不會對 ExtraInfos
強制執行任何程序。您可以自行決定是否要設定
根據 ExtraInfos
決定流程。舉例來說
為有效狀態,因此是EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED
,您也可以選擇加入
先將音量列 UI 淡出,以免使用者變更音量。
其他供應商可能選擇顯示啟用「乾燥」的浮動式訊息,並允許使用者使用
即可調整音量
車輛音訊架構仰賴 AudioControl HAL IAudioGainCallback
,
請提供建議的 ExtraInfos
。詳情請參閱:
音訊強化回呼。
為滿足未來汽車音響架構的需求,CarVolumeGroupEvent
可進行擴充。三
打算透過 CarVolumeGroupEvent
支援新功能。三
強烈建議應用程式開發人員使用 CarVolumeGroupEvent
處理
群組音量和靜音變更。
車輛音量群組事件回呼
Android 14 為特殊權限提供新的回呼
平台應用程式,以便接收 CarVolumeGroupEvents
通知。
如要註冊回呼,請使用
CarAudioManager#registerCarVolumeGroupEventCallback()
如要取消註冊回呼,請使用
CarAudioManager#unregisterCarVolumeGroupEventCallback()
如果應用程式註冊新版 CarVolumeGroupEventCallback
和舊版服務
CarVolumeCallback
時,系統會優先處理 CarVolumeGroupEventCallbacks
事件。
車輛音訊堆疊不會再觸發 CarVolumeCallback
。這麼做可以避免
將同一個應用程式的觸發事件重複至相同應用程式。
我們強烈建議您使用 CarVolumeGroupEventCallback
進行管理
群組音量和靜音變更。
音訊增益回呼
自 Android 13 開始,AudioControl HAL 可以觸發 非同步回呼,以管理磁碟區更新期間的變動, 以及汽車音響系統
HAL API
AudioControl @2.0 AIDL
AudioControl AIDL HAL 2.0 版新增了下列 API:
API | 目的 |
---|---|
IAudioControl#registerGainCallback |
使用 AudioControl HAL 註冊 IAudioGainCallback 的執行個體。 |
IAudioGainCallback#onAudioDeviceGainsChanged |
用於通知音訊增益設定變更的非同步回呼。 |
AudioControl HAL 回呼包含原因清單以及
AudioGainConfigInfo
,其中包含:
- 區域 ID
- 裝置通訊埠位址
- 磁碟區索引 >可以是受限制的索引或更新索引。
原因可大致區分為:
- 限制原因。暫時變更為音量和靜音行為。
- 更新原因。音量行為永久變更。
限制類型
自 AudioControl
HAL AIDL
V3
起,支援的類型如下
限制:
- 靜音
- 會使影片被封鎖
- 限制
- 注意力
有效限制 | 使用者觸發的次數變化 | 使用者觸發的靜音切換鈕 |
---|---|---|
靜音 | ❌ | ❌ (取消靜音) ✔ (靜音) |
會使影片被封鎖 | ❌ | ✔ |
限制 | ❌ (超過限制) ✔ (低於上限) |
✔ |
注意力 | ✔ | ✔ |
限制之間的優先順序為「靜音」>「封鎖 >限制 >注意。
忽略限制
靜音限制如下:
Reasons.TCU_MUTE
Reasons.REMOTE_MUTE
車輛音訊架構內部會維持兩種靜音狀態:
使用者靜音。根據使用者要求來切換,可能是
CarAudioManager
或重要事件。HAL 靜音。根據透過
AudioGain
收到的靜音限制進行切換 回呼。
為了像「設定」應用程式這樣的事件監聽器,整個音量群組設為整體靜音
(CarVolumeGroupInfo.isMuted()
) 狀態取決於
就會啟用相同的靜音模式
啟用 HAL 靜音功能後,所有連入音量都會變更,群組也取消靜音 在限制期間內,系統會忽略所有廣告請求。
互動情況:HAL 靜音功能已啟用,且使用者要求靜音切換鈕
如果 HAL 靜音已啟用且使用者靜音功能處於停用狀態:
- 音量群組的整體靜音狀態已變更為「
true
」。 - 系統會處理使用者提出的靜音設定要求。
- 原因:為了保護使用者隱私,系統應隨時接受使用者忽略要求。
如果已啟用 HAL 靜音功能並啟用使用者靜音功能:
音量群組的整體靜音狀態已變更為「
true
」。系統會
NOT
處理使用者提出的停用靜音設定。快取使用者 靜音狀態會保持啟用原因:只有在沒有啟用限制的情況下,系統才會遵循使用者取消忽略要求。
原因:取消快取使用者的靜音設定可能會導致意外音效爆炸,以及 危害使用者安全啟用靜音狀態時尤其重要 無法跨越應用程式運作,導致使用者的瞭解音量 觀感。
互動情況:HAL 靜音功能已啟用和停用,但使用者靜音功能沒有改變
如果切換 HAL 靜音設定,音量群組的整體靜音狀態會跟著變更。然而 不會直接更新使用者的靜音狀態使用者的靜音功能停用且 HAL 靜音時 收到啟用的回呼:
- 音量群組的整體靜音狀態已變更為「
true
」。 使用者變更音量的要求會
NOT
在 HAL 靜音時處理原因:啟用靜音功能時,使用者無法察覺音效。允許 音量變更可能會導致音訊爆炸,危及使用者的安全。
原因:音量應用程式可以註冊回呼,並觸發取消靜音 (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) 自動不經使用者介入處理 (如果這是預期行為) 。
在使用者靜音功能停用的情況下,停用 HAL 靜音功能:
音量群組的靜音狀態已變更為「
false
」。原因:如果維持靜音狀態,並要求使用者取消靜音, 經常切換靜音狀態時,使用者不會做不必要的干擾。
我們會照常處理使用者的要求變更音量。
會使影片被封鎖
封鎖限制如下:
Reasons.FORCED_MASTER_MUTE
Reasons.REMOTE_MUTE
Reasons.TCU_MUTE
。
啟用封鎖限制後,使用者提出的要求如下:
- 系統不會處理變更音量。
- 系統已處理切換靜音的操作。
限制
相關限制如下:
Reasons.THERMAL_LIMITATION
Reasons.SUSPEND_EXIT_VOL_LIMITATION
啟用限制限制後,使用者會執行以下動作:
調整音量:
- 會在限制範圍內處理
- 系統不會處理超過限制的部分
系統已處理切換靜音的操作。
注意力
注意力限制如下:
Reasons.ADAS_DUCKING
Reasons.NAV_DUCKING
Reasons.PROJECTION_DUCKING
啟用注意力限制時,使用者會執行以下動作:
已處理變更音量。目前的音量已設為 音量 (而非 stwhile 音量)未來數量變化 都是針對這個層級進行
已取消靜音切換鈕。
更新為索引
下列內容會視為非同步磁碟區索引更新作業:
Reasons.EXTERNAL_AMP_VOL_FEEDBACK
。
因此,AudioControl HAL 可以更新音量群組目前的索引
傳送給指定的索引。主要用於是音訊系統的意見回饋
,以便追蹤車輛音訊架構的音量變更要求索引更新現在是
也會以 CarVolumeGroupEvent
回呼的形式與應用程式通訊,以便同步處理
索引。
範例
用途:使用者將磁碟區索引更新為 30
使用者使用 Volume 應用程式將磁碟區索引變更為 30。
這個索引會轉換為增加量,並傳送至音訊 HAL。
供應商導入的
Audio HAL
可接收新流量增幅與更新 例如外部擴大器等音訊系統音訊系統回應的音量僅更新為索引 15 (原因出自 Android 未知)。
供應商導入
AudioControl HAL
觸發條件:IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {..., 15 /* New index */})
車輛音訊服務會從用於以下項目的回呼中使用新索引 持續性及回呼音量應用程式的功能。使用者要求的索引為 30。 不過,音訊系統非同步回饋會將索引更新為 15。
用途:結束暫停後首次播放音訊
暫停前的磁碟區索引設為高等級 95 (範圍:[0-99])。
Android 進入暫停狀態。
Android 暫停使用後 (例如繼續使用):
供應商
Audio HAL/AudioControl HAL
會將安全索引 30 套用到 音訊系統供應商
AudioControl HAL
也會觸發安全索引的回呼:
IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {..., 30 /* safe index */})
車輛音訊服務會從用於以下項目的回呼中使用新索引 持續性及其自身的回呼,用於同步處理索引的磁碟區應用程式。 暫停前的磁碟區索引為 95。不過,恢復執行後,這個索引 已由
AudioControl HAL
實作器設為 30 的安全音量。
動態磁碟區設定
對於這項功能,我們會考量下列主要用途:
車輛線路 (EOL) 設定。
汽車製造商偏好根據車輛更新 EOL 的體積設定 音訊系統設定。通常這是側載,不需更新 Android SW 映像檔。
汽車製造商可能需要在 服務排程。
執行階段設定。Automotive 音訊系統支援外部音訊 等擴大器設定,這些 ECU 可能會代管磁碟區範圍 系統啟動作業時,必須查詢的設定。
隨選設定。專為滿足日益成長的需求, 需要使用者訂閱加強型信號的音訊功能 一段時間。新的磁碟區範圍設定 在訂閱期間有效
設計
動態磁碟區設定分為三個階段:
探索:供應商 AudioControl HAL 實作發現新的音量 範圍更新可透過供應商擁有的自訂處理序間通訊 (IPC) 機制更新。
找到之後,系統會透過
AudioControl::IModuleChangeCallback
。更新。車輛音訊堆疊會使用新的 磁碟區的範圍
在更新量範圍後,系統會採取相同措施,讓磁碟區保持不變。 不過,如果索引超出範圍,則目前的磁碟區索引會設為 一個安全的值例如廠商在 回呼。
回呼。
更新後音量群組範圍更新後,車輛音訊堆疊會觸發回呼 透過
CarVolumeGroupEventCallback
註冊的應用程式。CarVolumeGroupEvent
承載更新後的CarVolumeGroupInfo
(事件類型) (變更內容) 以及額外資訊 (發生變更的原因)。
圖 1. 動態磁碟區設定。
HAL API
AudioControl @ 3.0 AIDL
AudioControl AIDL HAL 3.0 版推出了下列 API:
API | |
---|---|
IAudioControl#setModuleChangeCallback | 使用 AudioControl HAL 設定 IModuleChangeCallback 的執行個體。 |
IAudioControl#clearModuleChangeCallback | 清除先前使用 音訊控制 HAL。 |
IModuleChangeCallback#onAudioPortsChanged | 用於通知 AudioPorts 異動的回呼 |
順序
動態磁碟區設定序列圖表如下所示。
圖 2. 動態磁碟區設定序列圖。
重要層面
如要改善這項功能,請考慮以下事項。
做為回呼的一部分提供的 AudioPort 必須與 Automotive 相符 BUS 定義:
- 裝置通訊埠。
IN_DEVICE
、OUT_DEVICE
- 連線。
BUS
- 地址:由「音訊 HAL」定義所定義
- 增益模式。
JOINT
- 裝置通訊埠。
供應商必須在音訊中定義音量範圍定義的超集 HAL 政策,並透過回呼自訂車輛子類。詳情請參閱
IModuleChangeCallbac
的 AIDL 定義。如果有多個音訊 BUS 屬於同一個音量群組,則每個音訊都必須 相同的磁碟區範圍定義如未執行這項操作,將導致車輛行駛 音訊架構拒絕新的音量範圍定義