Ses kontrolü HAL'si

Ses kontrolü HAL'si, Android 9'da kullanıma sunuldu: otomotivle ilgili ses kullanım alanlarını destekledik. Android itibarıyla 14, Ses kontrolü HAL'si şunları destekler:

  • Kararma ve dengeleme
  • HAL ses odağı isteği
  • Cihazın sesini kapatma ve sesini kısma
  • Ses sistemi kazanç değişiklikleri
  • Ses bağlantı noktası yapılandırma değişiklikleri

Şekil 1'de araç ses hizmeti mimarisine üst düzey bir genel bakış verilmiştir. araç ses hizmeti tarafından ses kontrol HAL'si ile iletişim kurulur.

Çok bölgeli sesi yapılandırma

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

Sesi karartma ve dengeleme

HIDL ses kontrolü HAL sürüm 1, Android'de kullanıma sunuldu Otomotiv kullanımında ses karartmayı ve dengeyi desteklemek için 9 durumlarda işe yarar. Bu ses efektleri, Android'de sunulan genel ses efektlerinden mekanizmanın, sistem uygulamalarının ses dengesini ayarlamasına ve sesin yavaşça CarAudioManager API'leri:

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:

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ü.

HAL'den ses odaklanma isteği

AAOS, Android'e benzer şekilde, sesli uygulamaların aktif katılımını temel alır. arabalarda ses çalmayı yönetmek için odakla. Odaklanma bilgileri, hangi akışların ses seviyesini ve kısmayı kontrol edeceğini içerir. Bu nedenle, arabaya özgü seslerin daha iyi entegre edilmesini sağlamak için aşağıdaki ses özellikleri Google Play Games'de Android 11:

  • EMERGENCY
  • SAFETY
  • VEHICLE_STATUS
  • ANNOUNCEMENT

Bu değişikliğe ek olarak Android dışında ses odağı isteklerine katılması gerekir. Bu nedenle, HIDL sesi Kaynaktan gelen odaklanma isteklerine izin vermek için kontrol HAL sürüm 2 Android'in dışından:

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);
}

Burada IFocusListener şu şekilde tanımlanır:

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, HAL'den ses odağını istemek ve bunu bırakmak için kullanılabilir. tıklayın. Buna karşılık olarak araç ses hizmeti, ses odağını isteği gönderir ve sonuçları eşzamansız olarak IAudioControl#onAudioFocusChange yöntemini çağırın.

Bu API, ses odağı isteğiyle ilgili yapılan değişiklikleri izlemek için de kullanılabilir. kaynağı ses kontrolü HAL'sidir. Genel olarak, herhangi bir sabit ses odağı HAL'den gelen istek etkin olarak kabul edilir ve bu, ses odağından farklıdır. ve yalnızca karşılık gelen etkin ses parçasının oynatıldığı Android'den gelen istek etkin kabul edilir.

HIDL'yi AIDL ses kontrolü HAL'sine taşı

AIDL'nin ortaya çıkmasıyla ve Android'de gerekli geçişle birlikte 12 (daha fazla bilgi edinmek için HAL), ses kontrolü HAL'si şöyleydi: AIDL'ye taşındı. Mevcut HIDL Audio Control sürüm 2 API'leri için taşıma bazı küçük güncellemelere ihtiyacınız var:

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);
}

İlgili 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 için yoksayma

Android 12'de ses grubunun sesini kapatma özelliği kullanıma sunuldu. Kullanıcının sesli etkileşimleri sırasında daha kapsamlı bir ses kapatma denetimi. Bu ses kontrolü HAL'sinin, araba tarafından engellendiği şekliyle ses kapatma etkinliklerini almasına olanak tanır. ses hizmeti var.

Bu özelliği etkinleştirmek için OEM'lerin audioUseCarVolumeGroupMuting yapılandırmasını ayarlaması gerekir config.xml adlı araç hizmetinde true adlı alıcıya:

<!-- 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 yapılandırmanın üzerine yazılması gerekiyordu. için çalışma zamanı kaynak yer paylaşımı ile packages/services/Car/service/res/values/config.xml (daha fazla bilgi edinmek için bkz. Derlemeyi kaynakla özelleştirme yer paylaşımlarını tıklayın). Android'den 13. Çalışma zamanında kaynak yer paylaşımlarını kullanarak yapılandırma değeridir. Daha fazla bilgi için Uygulama kaynaklarının değerini değiştirme çalışma zamanında ile ilgili daha fazla bilgi edinin.

Sistem uygulamaları, özelliğin etkinleştirilip etkinleştirilmediğini CarAudioManager#isAudioFeatureEnabled API. Aktarılan parametre CarAudioManager.AUDIO_FEATURE_VOLUME_GROUP_MUTING sabiti. Yöntem, Özellik cihazda etkinse true, aksi takdirde false.

AIDL, audioUseCarVolumeGroupMuting özelliğini etkinleştirmenin yanı sıra, ses kontrolü HAL'si, ses düzeyi grubu sessize alma mekanizmasını 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);
}

Sesi kapatma bilgilerinde ses sistemiyle ilgili ses kapatma bilgileri bulunur:

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, yoksaymak için iki farklı mekanizmaya sahiptir. Bunlardan bazıları:

  • Sesi kullanan önemli etkinlikler KEYCODE_VOLUME_MUTE.

  • Araba ses yöneticisi kapatma API'sini kullanarak çağrıları doğrudan araç sesi hizmetine yönlendirme CarAudioManager#setVolumeGroupMute

Etkinleştirildiğinde, her iki mekanizma da ses kontrolü HAL'sine çağrı sesini kapatma işlemini tetikler.

Araba sesini kısma

Android 12'de eşzamanlı izleme kontrolünü optimize etmek için araç sesini kısma özelliği kullanıma sunuldu ses akışlarının oynatılmasını sağlar. Bu, OEM'lerin kendi reklam daraltma özelliğini uygulamasına olanak tanır arabanın fiziksel ses yapılandırmasına ve mevcut çalmaya dayalı davranış durumu (araç ses hizmeti tarafından belirlenen) kullanır.

Sesi kısma mekanizması, ses odağı yığınındaki değişikliklere dayanır. Bir odaklanma değişikliği gerçekleştiğinde (odaklama isteğinin veya odağın terk edilmesi), sesin kontrol HAL'si bilgilendirilir. Arabanın ses düzeyini kapatma desteğine benzer şekilde, araba sesi 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>

AIDL ses kontrolü HAL'nin, özelliği etkinleştirmek için ilgili araç ses hizmetinden alınan sinyalle mantığın kullanımı:

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);
}

Ses kısmayla ilgili ses sistemi bilgileri bulunur bilgi:

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 dışında ördek kısma bilgileri, aynı zamanda hangi sesin çok önemli bir yer tutar. Bu verilerin amacı, ses özelliklerinin kullanıldığı ses sistemi.

Araç ses yapılandırmasında birden fazla ses sistemi özellikleri tek bir cihaza atanabilir ve hangi kullanımların etkin olduğu açık değil.

AIDL ses kontrolü HAL 2.0

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

  • PlaybackTrackMetadata ile ses odağı
  • Ses geri çağırmayı kazanıyor

Oynatma meta verileri android.hardware.audio.common içinde ş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'daki diğer tüm işlevler kaldı ve kullanılır. Aşağıda açıklandığı gibi, ses odağı değişikliği yöntemi ile ilgili bir istisna söz konusudur: Ses odağını değiştirme yöntemi.

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

HAL'nin altındaki ses sistemine daha fazla bilgi göstermek için artık güncellemeler PlaybackTrackMetadata Özellikle, ses kontrolü HAL'si yeni yöntem:

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 öğesinde de benzer ve buna 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

Yukarıdaki odaklama işlemleri, Ses Dosyası bölümünde belirtilenlerle aynı şekilde çalışır. odaklanma isteği. Yalnızca oynatma parçası meta verilerinde daha fazla bilgi bulunur. ses özelliklerinin kullanım bilgilerini de görürsünüz. Genellikle, ekstra Oynatma parçası meta verileri tarafından sağlanan bilgi gerekiyor. Güncellenmiş Android kontrol HAL'si, önceki yöntemleri kullanmaya devam edebilir.

HAL geliştiricileri, IAudioControl#onAudioFocusChangeWithMetaData, yöntem sonuç döndürmelidir Açıklanan UNKNOWN_TRANSACTION hatasıyla Sürümü Olan Arayüzü Kullanma Yöntemler.

Ses hizmeti ilk olarak onAudioFocusChangeWithMetaData ve ardından, UNKNOWN_TRANSACTION ise onAudioFocusChange yöntemiyle yeniden deneme yapılır. yardımcı olabilir.

Araba sesini kısma ve oynatma parçası meta verileri

AIDL ses kontrolü HAL'nin 2.0 sürümü, oynatma parçası meta verilerini şuraya ekledi: sesi kısma bilgisi:

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 desteği sonlandırıldı. Geliştiriciler artık Ses özelliği kullanımını ve diğer verileri belirlemek için playbackMetaDataHoldingFocus Ses bilgileri. Bununla birlikte, usagesHoldingFocus parametresi hâlâ bu seçenek resmi olarak kaldırılana kadar zorunlu değildir.

Ses kazancı geri çağırması

HAL'nin altındaki ses değişikliklerinin Android'de AAOS tarafından daha görünür olmasını sağlamak için 13 ile birlikte, bir paydaşla iletişim kurmak için ses, arabanın ses sisteminden araç ses hizmetine giden değişiklikleri elde eder. İlgili içeriği oluşturmak için kullanılan mekanizmanın, ses kazanç ses düzeyi dizini değişikliklerini ilgili bir nedenden dolayı gösterir. kazanç değişti:

  • Engellenmiş veya sessize alınmış kısıtlamalar
  • Sınırlama kısıtlamaları
  • Zayıflama kısıtlamaları

Bu değişiklikler, bu kısıtlamaları HAL'nin altından son olarak da kullanıcıyı bilgilendirmek amacıyla bir sistem kullanıcı arayüzü uygulamasına yönlendiriyor. Olası sistem kullanıcı arayüzüne maruz kalma olasılığı, Android 14, sistem kullanıcı arayüzü uygulamalarının bu bilgileri daha kolay almasına olanak tanır. geri çağırma mekanizması vardır.

Ses kontrolü HAL API'si, kazanç geri çağırmasını aşağıdaki şekilde 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 aşağıdaki ş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 çağırması araç ses hizmetini ses kontrolü HAL'sine bağlayabilirsiniz. API, ses kontrolü HAL'si, araç ses hizmeti uygun bir işlemle yanıt verir (örneğin, kazanç dizinini engelle, sınırla veya azalt) .

HAL, API'nin ne zaman çağrılacağını belirler. Çoğunlukla daha fazla bilgi edindiniz. Yönetmelik gereksinimlerine özel olarak arabanın ses sistemi gereken işlemi yapmalı ve geri çağırmayı kullanarak bilgileri kullanıcı tüketimine imkan tanımak için araç ses hizmeti. Örneğin, kullanıcı arayüzünü göstermek için kullanıcıya gösterir.

AIDL ses kontrolü HAL 3.0

Android 14 AIDL ses kontrolü HAL sürümü: API'leri daha güçlü ses kazancı sağlayacak şekilde güncellemek için sürüm 3.0'a güncellendi işlevi görür. Ses denetimi HAL API'si, ses hizmetinin IModuleChangeCallback ayarlayın ve bu ayarı kaldırın:

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, şu durumlarda araç ses hizmeti tarafından kaydedilir: sırasında veya bir hatadan kurtarma işlemi sırasında Örneğin, bir ses kontrol cihazı Araç ses hizmeti tarafından alınan HAL bağlayıcı ölüm bildirimi. Ses kontrol HAL uygulaması, mevcut modül değişikliği geri çağırmasının yerini almalıdır çağrılır.

clearModuleChangeCallback API için uygulama, mevcut geri çağırmayı kullanın veya mevcut bir geri çağırma yoksa hiçbir şey yapmayın. Paydaş analizine hazırlanırken bir ölüm gözlemcisini geri çağırmak üzere kaydetmek için ses denetimi uygulaması ve bağlayıcı ölümü tetiklenirse geri çağırmayı temizleme.

IModuleChangeCallback aşağıdaki ş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şimi geri çağırması araç ses hizmeti tarafından kaydedildiğinde onAudioPortChanged API aracılığıyla ses bağlantı noktası değişikliklerini almaya hazır. İlgili içeriği oluşturmak için kullanılan Ses sisteminin ses düzeyi kazançlarını geri arama kaydedildi. Diğer dinamik kazanç değişiklikleri için API, devam edebilir. İlgili değişiklikler uygulanır ve araç ses sistemi hizmeti güncellenir buna göre hazırlar.