磁碟區管理

磁碟區管理包含在 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 範圍介於音訊區域內的 0N-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,然後呼叫 setGroupVolumesetMasterMute,如 或適當。如要強制執行此行為,請將 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 填補 SAFETYEMERGENCY 以外的所有項目
CALL 填補 SAFETYEMERGENCY 以外的所有項目, 和NAVIGATION
VOICE 鴨子 CALL_RING
VEHICLE_SOUNDS 你可以判斷有效聲音的重要性,以及音效是否重要 。
MUSICANNOUNCEMENT 吃飽了。例外狀況是藉由下列形式呈現的觸控互動音效 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_communicationvoice_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()

下表列出 EventTypeCarVolumeGroupInfo

事件類型 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 的安全音量。

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

動態磁碟區設定

對於這項功能,我們會考量下列主要用途:

  1. 車輛線路 (EOL) 設定。

    • 汽車製造商偏好根據車輛更新 EOL 的體積設定 音訊系統設定。通常這是側載,不需更新 Android SW 映像檔。

    • 汽車製造商可能需要在 服務排程。

  2. 執行階段設定。Automotive 音訊系統支援外部音訊 等擴大器設定,這些 ECU 可能會代管磁碟區範圍 系統啟動作業時,必須查詢的設定。

  3. 隨選設定。專為滿足日益成長的需求, 需要使用者訂閱加強型信號的音訊功能 一段時間。新的磁碟區範圍設定 在訂閱期間有效

設計

動態磁碟區設定分為三個階段:

  • 探索:供應商 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_DEVICEOUT_DEVICE
    • 連線。 BUS
    • 地址:由「音訊 HAL」定義所定義
    • 增益模式。 JOINT
  • 供應商必須在音訊中定義音量範圍定義的超集 HAL 政策,並透過回呼自訂車輛子類。詳情請參閱 IModuleChangeCallbac 的 AIDL 定義。

  • 如果有多個音訊 BUS 屬於同一個音量群組,則每個音訊都必須 相同的磁碟區範圍定義如未執行這項操作,將導致車輛行駛 音訊架構拒絕新的音量範圍定義