音量管理包含在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>
每個磁碟區組應包含一個或多個具有關聯位址的輸出裝置。位址應對應於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>
在初始化期間,磁碟區組檢查關聯設備的增益值並如下配置群組:
- 一步的大小。對於卷組控制的所有設備必須相同。
- 最小增益。組中設備中最小的最小增益。
- 最大增益。該組設備中最高的最大增益。
- 預設增益。組中設備中的最高預設增益。
根據這些值的配置方式,可以將磁碟區組的增益設定在與磁碟區組關聯的裝置支援的範圍之外。在這種情況下,對於該設備,根據磁碟區組的值是否低於或高於該範圍,將增益設定為設備的最小或最大增益值。
卷組標識符
卷組在運作時會依照 XML 檔案中定義的順序進行標識。音訊區域內的 ID 範圍為0
到N-1
,其中N
是該區域中捲組的數量。這樣,磁碟區組 ID 在區域之間就不是唯一的。這些標識符用於與磁碟區組關聯的CarAudioManager
API。任何接受不含zoneId
groupId
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>
音量鍵事件目前無法區分它們用於哪個區域,並且假定全部與主音訊區域相關聯。當接收到音量鍵事件時, CarAudioService
會透過取得活動播放器的音訊上下文來決定要調整的音量組,然後調整包含與最高優先權音訊上下文關聯的輸出裝置的音量組。優先順序是根據CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
中定義的固定順序決定的。
淡入淡出和平衡
AudioControl HAL 的兩個版本都包含用於設定車輛淡入淡出和平衡的 API。 CarAudioManager 的對應系統 API 將值傳遞給 AudioControl 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 決定 HAL 如何處理閃避,但我們建議遵循以下準則。
當兩個應用程式或服務同時持有音訊焦點時,通常會在 Android 中播放多個串流。若要了解 Android 何時可以授予並發焦點,請參閱限制類型中的互動矩陣。隨著汽車音響插件的引入,這也取決於你的AudioFocus管理。
Android 混合在一起的任何串流都是在應用任何增益之前完成的。因此,與另一個串流同時播放時應迴避的任何串流都應路由到單獨的輸出設備,以便 HAL 在混合它們之前可以應用迴避。
建議的逃避行為
以下是建議的潛在並發互動。
交互作用 | 行動 |
---|---|
EMERGENCY | 迴避或靜音除SAFETY 以外的所有內容 |
SAFETY | 除EMERGENCY 外,迴避一切 |
NAVIGATION | 除SAFETY 和EMERGENCY 外,迴避一切 |
CALL | 迴避除SAFETY 、 EMERGENCY 和NAVIGATION 之外的所有內容 |
VOICE | 鴨子CALL_RING |
VEHICLE_SOUNDS | 您可以確定活動聲音的重要性以及它是否避開其他聲音。 |
MUSIC 和ANNOUNCEMENT | 被一切淹沒。作為SYSTEM_SOUND 播放的觸控互動音是例外。 |
閃避時的注意事項
某些應用程式和服務(例如導航或助手)可能會使用多個玩家來執行操作。當資料流停止流經輸出裝置時,避免過度閃避,以確保媒體在導航或助理應用程式的下一次播放開始之前閃避之前不會恢復到最大音量。
對於具有多個聲場且隔離效果足夠好的車輛,您可以將音訊路由到汽車的不同區域,而不是迴避。例如,導航指令可以發送到駕駛員的頭枕揚聲器,同時繼續以正常音量在整個車廂內播放音樂。
安全關鍵聲音
Android 11 引進了HAL 音訊焦點 API 。 HAL 確保安全關鍵聲音優先於其他聲音。如果 HAL 持有USAGE_EMERGENCY
的音訊焦點,則不能保證來自 Android 的應用程式和服務不會播放聲音。 HAL 決定應混合或靜音來自 Android 的哪些串流以播放安全關鍵的聲音。
配置音量設定 UI
AAOS 將磁碟區設定 UI 與磁碟區組配置分開。這些可以按照配置卷組增益中的描述進行覆蓋。這種分離可確保磁碟區組配置發生變更時無需進行任何變更。
在汽車設定 UI 中, packages/apps/Car/Settings/res/xml/car_volume_items.xml
包含與每個定義的AudioAttributes.USAGE
關聯的 UI 元素(標題和圖示資源)。該文件透過使用與每個VolumeGroup
中包含的第一個識別的用法關聯的資源來合理呈現所定義的VolumeGroups
。
例如,以下範例將VolumeGroup
定義為包含voice_communication
和voice_communication_signalling
。汽車設定 UI 的預設實作使用與voice_communication
關聯的資源來渲染VolumeGroup
,因為這是檔案中的第一個匹配項。
<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()
以取得音量變化通知。
汽車卷組活動
音量更新和靜音切換的汽車用例具有上下文基礎,可以定義某些應用程式的操作,例如音量設定。來自汽車音訊堆疊的當前音量和靜音回調提供有限的上下文資訊。為了更好地服務汽車用例和未來的可擴展性,Android 14 中新增了 CarVolumeGroupEvent。每個事件都包含三種關鍵類型的信息:
-
CarVolumeGroupInfo
列表 EventTypes
(點陣圖)-
ExtraInfos
列表
汽車捲組資訊
事件回呼的接收者可以隨時存取受影響的汽車卷組資訊清單。這意味著應用程式不需要對汽車音訊框架進行任何額外的呼叫來獲取最新狀態。它可以簡單地使用接收到的CarVolumeGroupInfos
to update the UI or internal states. To make it easier for apps, the aspects that changed in a car volume group are also provided as part of
,如下所述。
事件類型
定義 CarVolumeGroupInfo 的哪個方面已更改。應用程式可以使用它來識別更改並採取所需的操作。例如, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED
表示各個CarVolumeGroups' maximum volume gain index has changed and can be queried by
。
下表顯示了EventType
和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.isMulated() |
EVENT_TYPE_VOLUME_BLOCKED_CHANGED | CarVolumeGroupInfo.isBlocked() |
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 可以觸發非同步回呼來管理因汽車音響系統變更而導致的音量等級更新。
哈爾API
音訊控制@2.0 AIDL
AudioControl AIDL HAL 2.0 版本新增了以下 API:
應用程式介面 | 目的 |
---|---|
IAudioControl#registerGainCallback | 向 AudioControl HAL 註冊IAudioGainCallback 的實例。 |
IAudioGainCallback#onAudioDeviceGainsChanged | 用於通知音訊增益配置變更的非同步回呼。 |
AudioControl HAL 回呼包括原因清單和對應的AudioGainConfigInfo
,其中包括:
- 區域 ID
- 設備連接埠位址
- 卷索引 > 索引可以是受限索引或更新索引。
原因大致可分為以下幾類:
- 限制原因。音量和靜音行為的瞬時變化。
- 更新原因。音量行為的永久改變。
限制類型
從AudioControl
HAL AIDL
V3
開始,以下是支援的限制類型:
- 沉默的
- 阻塞
- 限制
- 衰減
主動限制 | 使用者觸發的音量變化 | 使用者觸發的靜音切換 |
---|---|---|
沉默的 | ❌ | ❌(取消靜音) ✔(靜音) |
阻塞 | ❌ | ✔ |
限制 | ❌(超過限制) ✔(低於限制) | ✔ |
衰減 | ✔ | ✔ |
限制之間的優先權為靜音 > 阻止 > 限制 > 衰減。
靜音限制
靜音限制為:
-
Reasons.TCU_MUTE
-
Reasons.REMOTE_MUTE
汽車音響框架內部維護這兩種靜音狀態:
用戶靜音。根據使用者的請求(透過
CarAudioManager
或按鍵事件)進行切換。哈爾靜音。根據透過
AudioGain
回呼收到的靜音限制進行切換。
對於「設定」應用程式等偵聽器,卷組整體靜音 ( CarVolumeGroupInfo.isMuted()
) 狀態將基於是否啟用上述任一靜音。
啟用 HAL 靜音後,在限制期間,所有傳入的音量變更和群組取消靜音請求都將被忽略。
互動案例:HAL 靜音處於活動狀態並且使用者請求靜音切換
啟用 HAL 靜音且停用使用者靜音時:
- 磁碟區組整體靜音狀態變更為
true
。 - 將處理用戶啟用靜音的請求。
- 原因:應始終尊重用戶的靜音請求,以保護用戶的隱私。
啟用 HAL 靜音且啟用使用者靜音時:
磁碟區組整體靜音狀態變更為
true
。用戶提出的禁用靜音的請求將
NOT
被處理。快取用戶靜音狀態保持啟用狀態。原因:只有在沒有活動限制的情況下才會滿足使用者取消靜音要求。
原因:取消靜音快取 使用者靜音可能會導致意外的聲音爆炸,危及使用者安全。如果在整個點火週期啟用靜音狀態,這會降低使用者對聲級感知的意識,則尤其如此。
互動案例:HAL 靜音啟用和停用,而使用者靜音沒有變化
切換 HAL 靜音將變更磁碟區組的整體靜音狀態。但是,它不會直接更新使用者靜音狀態。停用使用者靜音並收到啟用 HAL 靜音回呼時:
- 磁碟區組整體靜音狀態變更為
true
。 啟用 HAL 靜音時,
NOT
處理使用者變更音量的請求。原因:靜音時使用者無法感知聲音。允許音量改變可能會導致聲音爆炸並危及用戶安全。
原因:音量應用程式可以註冊回調並自動觸發取消靜音 (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)),無需用戶幹預(如果這是 OEM 的預期行為)。
當 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
當衰減限制處於活動狀態時,使用者請求:
更改體積已處理。新的目前音量等級設定為衰減音量(而不是先前的音量)。未來的成交量變化都是從這個水準開始的。
切換靜音已處理。
更新索引
以下內容視為非同步磁碟區索引更新: 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) 配置。
汽車製造商更願意在停產時根據車輛音響系統設定更新音量配置。通常,這是一種旁加載,無需更新 Android SW 映像。
汽車製造商可能需要在服務計劃期間更新卷配置。
運行時配置。汽車音訊系統支援外部擴大機配置,這些 ECU 可以託管在啟動期間查詢的音量範圍配置。
按需配置。旨在支援對基於需求的音訊功能不斷增長的需求,其中用戶在一段時間內訂閱增強的訊號處理。新的磁碟區範圍配置在訂閱期間有效。
設計
動態磁碟區配置分三個階段實現:
發現。供應商 AudioControl HAL 實作透過供應商擁有的自訂 IPC 機制發現新的音量範圍更新。
一旦發現,就會透過
AudioControl::IModuleChangeCallback
產生回呼。更新。汽車音訊堆疊使用新的音量範圍更新音量組狀態。
交易量範圍更新後,我們會努力維持相同的交易量水準。然而,如果該指數超出範圍,則當前成交量指數將被設定為安全值。例如,回調期間供應商提供的預設等級。
打回來。
音量組範圍更新後,汽車音訊堆疊會觸發透過
CarVolumeGroupEventCallback
註冊的應用程式的回調。CarVolumeGroupEvent
攜帶更新的CarVolumeGroupInfo
、事件類型(更改內容)和額外資訊(更改原因)。
圖 1.動態磁碟區配置。
哈爾API
音訊控制@3.0 AIDL
AudioControl AIDL HAL 3.0 版本引入了以下 API:
應用程式介面 | |
---|---|
IAudioControl#setModuleChangeCallback | 使用 AudioControl HAL 設定 IModuleChangeCallback 的實例。 |
IAudioControl#clearModuleChangeCallback | 清除先前使用 AudioControl HAL 設定的 IModuleChangeCallback 實例。 |
IModuleChangeCallback#onAudioPortsChanged | 用於通知 AudioPort 變更的回調 |
順序
動態磁碟區配置的時序圖如下所示。
圖 2.動態磁碟區配置的序列圖。
關鍵方面
若要優化此功能,請考慮以下事項。
作為回調的一部分提供的音訊連接埠必須與汽車匯流排定義相符:
- 設備連接埠。
IN_DEVICE
、OUT_DEVICE
- 聯繫。
BUS
- 地址。在 Audio HAL 定義中定義
- 增益模式。
JOINT
- 設備連接埠。
供應商必須在音訊 HAL 策略中定義音量範圍定義的超集,並使用回調針對車輛變體進行自訂。有關詳細信息,請參閱
IModuleChangeCallbac
AIDL 定義。當多個音訊匯流排屬於同一音量組時,每個音訊匯流排必須具有相同的音量範圍定義。如果不這樣做,則會導致汽車音訊框架拒絕新的音量範圍定義。