Ses kontrolü HAL

Ses kontrolü HAL, otomotivle ilgili ses kullanım örneklerini desteklemek için Android 9'da tanıtıldı. Android 14'ten itibaren Ses kontrolü HAL şunları destekler:

  • Solma ve denge
  • HAL ses odaklama isteği
  • Cihazın sesini kapatma ve eğilme
  • Ses cihazı kazanç değişiklikleri
  • Ses bağlantı noktası yapılandırma değişiklikleri

Şekil 1, araç ses hizmetinin ses kontrolü HAL ile iletişim kurduğu araç ses hizmeti mimarisinin üst düzey bir genel bakışını göstermektedir.

Çok bölgeli sesi yapılandırma

Şekil 1. Çok bölgeli sesi yapılandırın.

Sesin azalması ve dengelenmesi

HIDL ses kontrolü HAL sürüm 1, otomotiv kullanım durumlarında sesin azalmasını ve dengeyi desteklemek için Android 9'da tanıtıldı. Android'de halihazırda sağlanan genel ses efektlerinden ayrı olarak bu mekanizma, sistem uygulamalarının ses dengesini ayarlamasına ve CarAudioManager API'leri aracılığıyla kaybolmasına olanak tanır:

class CarAudioManager {
       /**
       *   Adjust the relative volume in the front vs back of the vehicle cabin.
       *
       *   @param value in the range -1.0 to 1.0 for fully toward the back through
       *   fully toward the front. 0.0 means evenly balanced.
       */
       @SystemApi
       @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
       public void setFadeTowardFront(float value);

       /**
       *   Adjust the relative volume on the left vs right side of the vehicle cabin.
       *
       *   @param value in the range -1.0 to 1.0 for fully toward the left through
       *   fully toward the right. 0.0 means evenly balanced.
       */
       @SystemApi
       @RequiresPermission(Car.PERMISSION_CAR_CONTROL_AUDIO_VOLUME)
       public void setBalanceTowardRight(float value);
}

Bu API'ler çağrıldıktan sonra ilgili ses kontrolü HAL API'leri araç ses hizmetinden çağrılır:

interface IAudioControl {
       /**
       *   Control the right/left balance setting of the car speakers.
       */
       oneway setBalanceTowardRight(float value);

       /**
       *   Control the fore/aft fade setting of the car speakers.
       */
       oneway setFadeTowardFront(float value);
}

API, yeni AIDL HAL arayüzü de dahil olmak üzere ses kontrolü HAL'in tüm sürümlerinde mevcuttur.

HAL'den ses odaklama isteği

AAOS, Android'e benzer şekilde, arabalarda ses çalmayı yönetmek için uygulamaların ses odağına aktif katılımına dayanır. Odak bilgisi, ses seviyesi ve kısma için hangi akışların kontrol edileceğini yönetmek için kullanılır. Bu nedenle, ses odağını daha da genişletmek ve arabaya özgü seslerin Android deneyimine daha iyi entegrasyonunu sağlamak için Android 11'de aşağıdaki ses özellikleri tanıtıldı:

  • EMERGENCY
  • SAFETY
  • VEHICLE_STATUS
  • ANNOUNCEMENT

Bu değişikliğe ek olarak Android dışından gelen seslerin ses odaklama isteklerine katılması için bir mekanizma eklendi. Böylece, Android dışından kaynaklanan odak isteklerine izin vermek için HIDL ses kontrolü HAL sürüm 2 tanıtıldı:

interface IAudioControl {
       /**
       *   Registers focus listener to be used by HAL for requesting and
       *   abandoning audio focus.
       *   @param listener the listener interface
       *   @return closeHandle A handle to unregister observer.
       */
       registerFocusListener(IFocusListener listener)
       generates (ICloseHandle closeHandle);

       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   @param usage The audio usage associated with the focus change
       *   @param zoneId The identifier for the audio zone that the HAL is
       *   playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred
       */
       oneway onAudioFocusChange(bitfield<AudioUsage> usage, int32_t zoneId,
       bitfield<AudioFocusChange> focusChange);
}

IFocusListener şu şekilde tanımlandığı yer:

interface IFocusListener {
       /**
       *   Called whenever HAL is requesting focus as it is starting to play
       *   audio of a given usage in a specified zone.
       *
       *   @param usage The audio usage associated with the focus request
       *    {@code AttributeUsage}
       *   @param zoneId The identifier for the audio zone where the HAL is
       *    requesting focus
       *   @param focusGain The AudioFocusChange associated with this request.
       */
       oneway requestAudioFocus(bitfield<AudioUsage> usage,
       int32_t zoneId, bitfield<AudioFocusChange> focusGain);
       /**
       *   Called whenever HAL is abandoning focus as it is finished playing audio
       *   of a given usage in a specific zone.
       *
       *   @param usage The audio usage for which the HAL is abandoning focus
       *    {@code AttributeUsage}
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       */
       oneway abandonAudioFocus(bitfield<AudioUsage> usage, int32_t zoneId);
}

Yukarıdaki API'ler sırasıyla HAL'den ses odağı istemek ve iptal etmek için kullanılabilir. Yanıt olarak araç ses hizmeti, ses odaklama isteğini dikkate alır ve sonuçları eşzamansız olarak IAudioControl#onAudioFocusChange yöntemine iletir.

Bu API aynı zamanda ses kontrolü HAL'sinden kaynaklanan ses odaklama isteğindeki değişiklikleri izlemek için de kullanılabilir. Genel olarak, HAL'den gelen herhangi bir sabit ses odaklama isteği aktif olarak kabul edilir; bu, yalnızca karşılık gelen bir aktif ses parçasının oynatılmasının aktif olarak kabul edildiği Android'den gelen bir ses odaklama isteğinden farklıdır.

HIDL'yi AIDL ses kontrolü HAL'ye taşıyın

AIDL'nin ortaya çıkışı ve Android 12'de gerekli geçişin yapılmasıyla birlikte (daha fazla bilgi edinmek için HAL'ler için AIDL'ye bakın), ses kontrolü HAL'si AIDL'ye taşındı. Mevcut HIDL ses kontrolü sürüm 2 API'leri için geçiş, mevcut yöntemlerde küçük güncellemeler gerektirdi:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   @param usage The audio usage associated with the focus change
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone that the HAL is
       *        playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred.
       */
       oneway void onAudioFocusChange(in String usage, in int zoneId,
              in AudioFocusChange focusChange);
       /**
       *   Registers focus listener to be used by HAL for requesting and
       *   abandoning audio focus.
       *   @param listener the listener interface.
       */
       oneway void registerFocusListener(in IFocusListener listener);
       /**
       *   Control the right/left balance setting of the car speakers.
       */
       oneway void setBalanceTowardRight(in float value);
       /**
       *   Control the fore/aft fade setting of the car speakers.
       */
       oneway void setFadeTowardFront(in float value);
}

Ve karşılık gelen IFocusListener :

       interface IFocusListener {
       /**
       *   Called whenever HAL is abandoning focus as it is finished playing audio
       *   of a given usage in a specific zone.
       *
       *   @param usage The audio usage for which the HAL is abandoning focus
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone that the HAL
       *        abandoning focus
       */
       oneway void abandonAudioFocus(in String usage, in int zoneId);
       /**
       *   Called whenever HAL is requesting focus as it is starting to play audio
       *        of a given usage in a specified zone.
       *
       *   @param usage The audio usage associated with the focus request
       *        {@code AttributeUsage}. See {@code audioUsage} in
       *        audio_policy_configuration.xsd for the list of allowed values.
       *   @param zoneId The identifier for the audio zone where the HAL is
       *        requesting focus
       *   @param focusGain The AudioFocusChange associated with this request.
       */
       oneway void requestAudioFocus(in String usage, in int zoneId,
              in AudioFocusChange focusGain);
}

Ses grubu sessize alma

Android 12, kullanıcının ses etkileşimleri sırasında daha kapsamlı bir sessize alma kontrolüne olanak sağlamak için ses grubu sessize alma özelliğini tanıttı. Bu, ses kontrolü HAL'nin araç ses hizmeti tarafından yakalandığı gibi sessize alma olaylarını almasına olanak tanır.

Özelliği etkinleştirmek için OEM'lerin, car service config.xml dosyasında audioUseCarVolumeGroupMuting yapılandırmasını true olarak ayarlaması gerekir:

<!-- Configuration to enable muting of individual volume groups.
If this is set to false, muting of individual volume groups is disabled,
instead muting will toggle master mute. If this is set to true, car volume
group muting is enabled and each individual volume group can be muted separately. -->
<bool name="audioUseCarVolumeGroupMuting">true</bool>

Android 13'ten önce, packages/services/Car/service/res/values/config.xml için bir çalışma zamanı kaynak katmanıyla yapılandırmanın üzerine yazılması gerekiyordu (daha fazla bilgi edinmek için bkz . Yapıyı kaynak katmanlarıyla özelleştirme ). Android 13'ten itibaren bir yapılandırma değerini değiştirmek için çalışma zamanı kaynak katmanlarını kullanabilirsiniz. Daha fazla bilgi edinmek için bkz. Çalışma zamanında bir uygulamanın kaynaklarının değerini değiştirme .

Sistem uygulamaları CarAudioManager#isAudioFeatureEnabled API'yi kullanarak özelliğin etkinleştirilip etkinleştirilmediğini belirleyebilir. Aktarılan parametre CarAudioManager.AUDIO_FEATURE_VOLUME_GROUP_MUTING sabiti olmalıdır. Özellik cihazda etkinleştirilmişse yöntem true döndürür, aksi takdirde false döndürür.

AIDL ses kontrolü HAL, audioUseCarVolumeGroupMuting özelliğini etkinleştirmenin yanı sıra, ses grubu sessize alma mekanizmasını da uygulamalıdır :

interface IAudioControl {
       /**
       *   Notifies HAL of changes in output devices that the HAL should apply
       *   muting to.
       *
       *   This will be called in response to changes in audio mute state for each
       *   volume group and will include a {@link MutingInfo} object per audio
       *   zone that experienced a mute state event.
       *
       *   @param mutingInfos an array of {@link MutingInfo} objects for the audio
       *   zones where audio mute state has changed.
       */
       oneway void onDevicesToMuteChange(in MutingInfo[] mutingInfos);
}

Sessize alma bilgilerinin ses sistemi için ilgili sessize alma bilgilerini içerdiği durumlarda:

parcelable MutingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be muted.
       */
       String[] deviceAddressesToMute;
       /**
       *   List of addresses for audio output devices that were previously be
       *   muted and should now be unmuted.
       */
       String[] deviceAddressesToUnmute;
}

AAOS'un sessize alma için aşağıdakilere dayalı iki farklı mekanizması vardır:

  • KEYCODE_VOLUME_MUTE {:.external} sesini kullanan önemli etkinlikler.

  • Araç ses yöneticisi sessize alma API'sini ( CarAudioManager#setVolumeGroupMute kullanarak araç ses hizmetine doğrudan çağrı yapın.

Etkinleştirildiğinde, her iki mekanizma da ses kontrolü HAL'sinde çağrının sessize alınmasını tetikler.

Araç sesinin kısılması

Android 12, ses akışlarının eş zamanlı oynatılmasının kontrolünü optimize etmek için araç sesini kısmayı tanıttı. Bu, OEM'lerin, araç ses hizmeti tarafından belirlenen, aracın fiziksel ses yapılandırmasına ve mevcut oynatma durumuna dayalı olarak kendi eğilme davranışlarını uygulamalarına olanak tanır.

Eğilme mekanizması ses odak yığını değişikliklerine dayanmaktadır. Bir odak değişikliği meydana geldiğinde (bir odak isteği veya odağın terk edilmesi), ses kontrolü HAL'ye bilgi verilir. Araç ses grubu sessize alma desteğine benzer şekilde, araç sesini kısma, audioUseHalDuckingSignals yapılandırma işaretiyle etkinleştirilebilir:

<!-- Configuration to enable IAudioControl#onDevicesToDuckChange API to
inform HAL when to duck. If this is set to true, the API will receive signals
indicating which output devices to duck as well as what usages are currently
holding focus. If set to false, the API will not be called. -->
<bool name="audioUseHalDuckingSignals">true</bool>

Özelliği etkinleştirmek için AIDL ses kontrolü HAL'nin, araç ses hizmetinden alınan sinyalle ilgili mantığı uygulaması gerekir:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in output devices that the HAL should apply
       *   ducking to.
       *
       *   This will be called in response to changes in audio focus, and will
       *   include a {@link DuckingInfo} object per audio zone that experienced
       *   a change in audo focus.
       *
       *   @param duckingInfos an array of {@link DuckingInfo} objects for the
       *   audio zones where audio focus has changed.
       */
       oneway void onDevicesToDuckChange(in DuckingInfo[] duckingInfos);
}

İlgili ses sistemi bilgisi ses engelleme bilgilerinde bulunur:

parcelable DuckingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be ducked.
       */
       String[] deviceAddressesToDuck;
       /**
       *   List of addresses for audio output devices that were previously be
       *   ducked and should now be unducked.
       */
       String[] deviceAddressesToUnduck;
       /**
       *   List of usages currently holding focus for this audio zone.
       */
       String[] usagesHoldingFocus;
}

Cihaz adreslerinde bulunan araç ses yapılandırma bilgilerinin yanı sıra, eğilme/çıkarma bilgileri, hangi ses özelliği kullanımlarının odakta tutulduğuna ilişkin bilgileri de içerir. Bu verinin amacı ses sistemine hangi ses özniteliklerinin kullanımlarının aktif olduğunu bildirmektir.

Araç ses konfigürasyonunda tek bir cihaza birden fazla ses özelliği atanabileceğinden ve ekstra bilgi olmadan hangi kullanımların aktif olduğu belli olmadığından bu gereklidir.

AIDL ses kontrolü HAL 2.0

API'leri güncellemek ve yeni işlevleri kolaylaştırmak için AIDL ses kontrolü HAL, Android 13'te 2.0 sürümüne güncellendi:

  • PlaybackTrackMetadata ile sese odaklanma
  • Ses geri aramayı kazanıyor

Oynatma meta verileri android.hardware.audio.common şu şekilde tanımlanır:

parcelable PlaybackTrackMetadata {
       AudioUsage usage = INVALID;
       AudioContentType contentType = UNKNOWN;
       float gain;
       AudioChannelLayout channelMask;
       AudioDevice sourceDevice;
       String[] tags;
}

AIDL ses kontrolü sürüm 1.0'ın diğer tüm işlevleri aynı kaldı ve kullanılabilir. Ses odağı değiştirme yönteminde açıklandığı gibi ses odağı değiştirme yöntemiyle ilgili bir istisna vardır.

Oynatma parçası meta verileriyle ses kontrolü odağı

HAL'ın altındaki ses sistemine daha fazla bilgi sunmak için güncellemeler artık PlaybackTrackMetadata ortaya çıkarıyor. Özellikle ses kontrolü HAL'si yeni bir yöntemle genişletildi:

interface IAudioControl {
       /**
       *   Notifies HAL of changes in audio focus status for focuses requested
       *   or abandoned by the HAL.
       *
       *   The HAL is not required to wait for a callback of AUDIOFOCUS_GAIN
       *   before playing audio, nor is it required to stop playing audio in the
       *   event of a AUDIOFOCUS_LOSS callback is received.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL is
       *    playing the stream in
       *   @param focusChange the AudioFocusChange that has occurred.
       */
       oneway void onAudioFocusChangeWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId,
       in AudioFocusChange focusChange);
}

IFocusListener benzer, karşılık gelen bir değişiklik yapıldı:

       /**
       *   Called to indicate that the audio output stream associated with
       *   {@link android.hardware.audio.common.PlaybackTrackMetadata} is
       *   abandoning focus as playback has stopped.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       */
       oneway void abandonAudioFocusWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId);
       /**
       *   Called to indicate that the audio output stream associated with
       *   {@link android.hardware.audio.common.PlaybackTrackMetadata} has taken
       *   the focus as playback is starting for the corresponding stream.
       *
       *   @param playbackMetaData The output stream metadata associated with
       *    the focus request
       *   @param zoneId The identifier for the audio zone that the HAL
       *    abandoning focus
       *   @param focusGain The focus type requested.
       */
       oneway void requestAudioFocusWithMetaData(
       in PlaybackTrackMetadata playbackMetaData, in int zoneId,
       in AudioFocusChange focusGain);
}

Ses odağı değiştirme yöntemi hakkında

Yukarıdaki odaklama işlemleri, HAL'den ses odaklama isteği bölümünde açıklananlarla aynı şekilde gerçekleştirilir. Yalnızca oynatma parçası meta verileri, ses özniteliklerinin kullanımlarının yanı sıra daha fazla bilgiye sahiptir. Genel olarak, oynatma parçası meta verileri tarafından sağlanan ekstra bilgiye ihtiyaç duyulmadığı sürece, güncellenmiş android kontrolü HAL, önceki yöntemleri kullanmaya devam edebilir.

HAL geliştiricileri IAudioControl#onAudioFocusChangeWithMetaData desteklememeye karar verirse, yöntemin , Sürümlü Arayüz Yöntemlerini Kullanma açıklandığı gibi UNKNOWN_TRANSACTION hatası içeren sonuçları döndürmesi gerekir.

Ses hizmeti önce onAudioFocusChangeWithMetaData çağırır ve ardından UNKNOWN_TRANSACTION hatası oluşursa onAudioFocusChange yöntemini kullanarak yeniden dener.

Çalma parçası meta verileriyle araç sesinin kısılması

AIDL ses kontrolü HAL'nin 2.0 sürümü, ses azaltma bilgilerine oynatma parçası meta verilerini ekledi:

parcelable DuckingInfo {
       /**
       *   ID of the associated audio zone
       */
       int zoneId;
       /**
       *   List of addresses for audio output devices that should be ducked.
       */
       String[] deviceAddressesToDuck;
       /**
       *   List of addresses for audio output devices that were previously be
       *   ducked and should now be unducked.
       */
       String[] deviceAddressesToUnduck;
       /**
       *   List of usages currently holding focus for this audio zone.
       */
       String[] usagesHoldingFocus;
       /**
       *   List of output stream metadata associated with the current focus
       *   holder for this audio zone
       */
       @nullable PlaybackTrackMetadata[] playbackMetaDataHoldingFocus;
}

usagesHoldingFocus kullanımdan kaldırıldı. Geliştiriciler artık ses özniteliği kullanımını ve diğer ses bilgilerini belirlemek için playbackMetaDataHoldingFocus kullanmalıdır. Bununla birlikte, usagesHoldingFocus parametresi, bu seçenek resmi olarak kaldırılıncaya kadar gerekli bilgileri hâlâ içerir.

Ses kazancı geri araması

Android 13'te HAL'nin altındaki ses değişikliklerini AAOS tarafından daha görünür hale getirmek için, ses kazanımı değişikliklerini aracın ses sisteminden araç ses hizmetine iletmek için kullanabileceğiniz bir mekanizma ekledik. Mekanizma, ses kazanımı ses düzeyi endeksi değişikliklerini, kazanımın neden değiştirildiğine ilişkin bir neden ile birlikte ortaya çıkarır:

  • Engellenen veya sessize alınan kısıtlamalar
  • Sınırlamalar kısıtlamaları
  • Zayıflatma kısıtlamaları

Bu değişiklikler, bu kısıtlamaları HAL'in altından araç ses hizmetine ve son olarak kullanıcıyı bilgilendirmek için bir sistem kullanıcı arayüzü uygulamasına maruz bırakır. İkinci bölüm olan olası bir sistem kullanıcı arayüzüne maruz kalma, sistem kullanıcı arayüzü uygulamalarının bu bilgiyi bir birim grubu bilgileri geri çağırma mekanizması aracılığıyla daha kolay almasına olanak sağlamak için Android 14'te daha da genişletildi.

Ses kontrolü HAL API'si kazanç geri çağrısını aşağıdaki gibi kaydeder:

interface IAudioControl {
       /**
       *   Registers callback to be used by HAL for reporting unexpected gain(s)
       *    changed and the reason(s) why.
       *
       *   @param callback The {@link IAudioGainCallback}.
       */
       oneway void registerGainCallback(in IAudioGainCallback callback);
}

IAudioGainCallback şu şekilde tanımlanır:

interface IAudioGainCallback {
       /**
       *   Used to indicate that one or more audio device port gains have changed,
       *   i.e. initiated by HAL, not by CarAudioService.
       *   This is the counter part of the
       *   {@link onDevicesToDuckChange}, {@link onDevicesToMuteChange} and,
       *   {@link setAudioDeviceGainsChanged} APIs.
       *
       *   @param reasons List of reasons that triggered the given gains changed.
       *   @param gains List of gains affected by the change.
       */
       void onAudioDeviceGainsChanged(in Reasons[] reasons,
       in AudioGainConfigInfo[] gains);
}

API belgelerinde vurgulandığı gibi, kazanç geri araması araç ses hizmeti tarafından ses kontrolü HAL'ye kaydedilir. API, ses kontrolü HAL'den çağrıldığında, araç ses hizmeti karşılık gelen bir eylemle (bloklama, sınırlama veya kazanç indeksini zayıflatma gibi) yanıt verir.

HAL, öncelikle kazanç endeksi durumundaki değişiklikleri bildirmek için API'nin ne zaman çağrılacağını belirler. Yönetmelik gerekliliklerine özel olarak, aracın ses sistemi gerekli eylemi yapmalı ve kullanıcı tüketimine izin vermek amacıyla bilgileri araç ses hizmetine bildirmek için geri aramayı kullanmalıdır. Örneğin, kullanıcıya bir kullanıcı arayüzü göstermek için.

AIDL ses kontrolü HAL 3.0

Android 14 AIDL ses kontrolü HAL sürümü, daha sağlam ses kazanım indeksi işlevselliği sağlamak amacıyla API'leri güncellemek için sürüm 3.0'a güncellendi. Ses kontrolü HAL API'si, ses hizmetinin bir IModuleChangeCallback ayarlamasına ve ayarını kaldırmasına olanak tanır:

interface IAudioControl {
       /**
       *   Sets callback with HAL for notifying changes to hardware module
       *   (that is: {@link android.hardware.audio.core.IModule}) configurations.
       *
       *   @param callback The {@link IModuleChangeCallback} interface to use
       *    use when new updates are available for
       */
       void setModuleChangeCallback(in IModuleChangeCallback callback);
       /**
       *   Clears module change callback
       */
       void clearModuleChangeCallback();
}

setModuleChangeCallback , servis başlatıldığında veya bir hata düzeltilirken araç ses servisi tarafından kaydedilir. Örneğin, araç ses hizmeti tarafından alınan bir ses kontrolü HAL bağlayıcı ölüm bildirimi. Ses kontrolü HAL uygulaması, API çağrıldığında mevcut modül değişikliği geri aramalarının yerini almalıdır.

clearModuleChangeCallback API'si için, uygulamanın mevcut geri aramayı temizlemesi veya mevcut geri arama yoksa hiçbir şey yapmaması gerekir. Geri arama için bir ölüm gözlemcisinin kaydedilmesi ve ciltleyici ölümü tetiklendiğinde geri aramanın temizlenmesi, ses kontrolü uygulaması için iyi bir uygulamadır.

IModuleChangeCallback şu şekilde tanımlanır:

oneway interface IModuleChangeCallback {
       /**
       *   Used to indicate that one or more {@link AudioPort} configs have
       *   changed. Implementations MUST return at least one AudioPort.
       *
       *   @param audioPorts list of {@link AudioPort} that are updated
       */
       void onAudioPortsChanged(in AudioPort[] audioPorts);
}

Modül değişikliği geri çağrısı araç ses hizmeti tarafından kaydedildiğinde, onAudioPortChanged API aracılığıyla ses bağlantı noktası değişikliklerini almaya hazırdır. API, geri arama kaydedilir kaydedilmez ses sistemi için ses seviyesi kazanımlarını başlatmak için kullanılabilir. Diğer dinamik kazanç değişiklikleri için API herhangi bir zamanda çağrılabilir. İlgili değişiklikler uygulanır ve araç ses hizmeti buna göre güncellenir.