Ses düzeyi yönetimi

Hacim yönetimi, sabit birimler kullanan CarAudioService içinde yer alır HAL'nin altında bir donanım veya donanım ya da bir amplifikatör olabilir. CarAudioService, çıkış cihazlarını düzenler bir reklamverenle ilişkili tüm cihazlara aynı kazanımları uygulamak için ses grubuna dokunun.

Sabit hacimler

AAOS uygulamalarında ses seviyesini kontrol etmek için farklı olabilir. Yan etkilerden kaçınmak için config_useFixedVolume işaretini şu değere ayarlayın: true (gerektiğinde yer paylaşımı):

<resources>
    <!-- Car uses hardware amplifier for volume. -->
    <bool name="config_useFixedVolume">true</bool>
</resources>

config_useFixedVolume işareti ayarlanmadığında (veya false olarak ayarlandığında) uygulamalar, ses düzeyini akışa göre değiştirmek için AudioManager.setStreamVolume() numarasını çağırabilir yazın. Bu durum, potansiyel riskler nedeniyle diğer uygulamalar üzerindeki etkileri ve yazılım karıştırıcıda ses azaltmanın tarafından alındığında sinyalde daha az anlamlı bitlerin kullanılmasına neden olabilir. donanım amplifikatöründe.

Birim grupları

Ses düzeyi grupları bir ses içindeki cihaz koleksiyonunun ses düzeylerini yönetir bölge. Ses düzeyi, her ses grubu için bağımsız olarak kontrol edilebilir. İlgili içeriği oluşturmak için kullanılan sonuçta elde edilen kazançlar, ilişkili cihazlarda yapılandırılarak aracın amplifikatörüne dokunun. Birim ayarları, kullanıcı için kalıcı olur ve yüklenir Kullanıcı oturum açtığında

Ses gruplarını tanımlama

CarAudioService, car_audio_configuration.xml içinde tanımlanan ses düzeyi gruplarını kullanır:

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

Her ses grubu grubunda ilişkilendirilmiş bir veya daha fazla çıkış cihazı adres. Adresler, şurada tanımlanan çıkış cihazlarına karşılık gelmelidir: audio_policy_configuration.xml

Birim grubu kazançlarını yapılandırma

Her ses grubunun minimum, maksimum ve varsayılan kazanç değerlerinin yanı sıra audio_policy_configuration.xml içinde yapılandırılan değerlere dayalı olarak adım boyutu Ses düzeyi grubuyla ilişkilendirilmiş cihazlar.

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

Başlatma sırasında birim grubu, ilgili cihazlar ve grubu aşağıdaki gibi yapılandırır:

  • Adım boyutu. Ses düzeyi grubu tarafından kontrol edilen tüm cihazlar için aynı olmalıdır.
  • Minimum kazanç. Gruptaki cihazlar arasındaki en düşük minimum kazanç.
  • Maksimum kazanç. Gruptaki cihazlar arasında en yüksek maksimum kazanım.
  • Varsayılan kazanç. Gruptaki cihazlar arasında en yüksek varsayılan kazanç.

Bu değerlerin nasıl yapılandırıldığı göz önüne alındığında, ses seviyesiyle ilişkilendirilmiş bir cihaz için desteklenen aralığın dışındaki ses grubu grubu. Bu durumda, o cihaz için kazanç, cihazın minimum veya hacim grubu değerinin altında mı yoksa üstünde mi olduğuna bağlı olarak maksimum kazanç değeri izin verir.

Birim grubu tanımlayıcıları

Birim grupları, çalışma zamanında XML dosyasında tanımlanan sırayla tanımlanır. Kimlikler, bir ses bölgesinde 0 ile N-1 arasında değişir. N değeri, videonun sayısıdır hacim grupları oluşturabilirsiniz. Bu sayede, birim grubu kimlikleri benzersiz olmaz sağlayabilir. Bu tanımlayıcılar, ilişkilendirilmiş CarAudioManager API için kullanılır ses seviyesi gruplarıyla. zoneId olmadan groupId alan tüm API'ler birincil ses bölgesine varsayılan olarak ayarlanır.

Çoklu alt bölge hacim yönetimi

Her ses bölgesinin bir veya daha fazla ses düzeyi grubuna ve her ses düzeyine sahip olması beklenir grup yalnızca tek bir ses bölgesiyle ilişkilendirilir. Bu ilişki tanımlanıyor car_audio_configuration.xml kapsamında. Daha fazla bilgi edinmek için yukarıdaki örneğe bakın. Ses düzeyi gruplarını tanımlama başlıklı makaleyi inceleyin.

İlişkilendirilen her bir alt bölge için mevcut ses düzeyleri korunur. o bölgede çalışır. Bu ayarlar bölgeye özgüdür. Yani, kullanıcı bir birincil alt bölgeyle ilişkilendirilen, daha sonra alt bölgede oturum açtığında ikincil bir ses bölgesiyle ilişkilendirilmiş, ses düzeyleri yüklendi ve şu süre boyunca devam etti ilk alt bölge, ikincil alt bölgeye göre farklıdır.

Ses düzeyiyle ilgili önemli etkinlikleri işleme

Android, ses seviyesi kontrolü için çeşitli tuş kodları tanımlar. Örneğin:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

Varsayılan olarak Android, ses seviyesi önemli etkinliklerini uygulamalara yönlendirir. Otomotiv uygulamaları, bu önemli etkinliklerin Google Ads'de CarAudioService, ardından setGroupVolume veya setMasterMute öğesini çağırır. uygun olmalıdır. Bu davranışı zorunlu kılmak için true öğesine config_handleVolumeKeysInWindowManager işareti:

<resources>
    <bool name="config_handleVolumeKeysInWindowManager">true</bool>
</resources>

Hacim önemli etkinlikleri şu anda hangi alt bölgeyi ayırt etmek için kullanılamamaktadır her birinin birincil müşteriyle ilişkili olması amaçlanmıştır ve ses bölgesi. Ses seviyesi önemli etkinliği alındığında CarAudioService, etkin için ses bağlamları getirilerek ayarlanacak ses düzeyi grubu ses çalarları oluşturabilir ve çıkış cihazını içeren ses düzeyini ayarlayabilirsiniz. en yüksek önceliğe sahip ses bağlamıyla ilişkilendirilir. Önceliklendirme belirli bir sıralamaya dayanılarak belirlenir CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY

Kararma ve dengeleme

AudioControl HAL'nin her iki sürümü de şeffaflaşma ve denge ayarı için API'ler içerir. inceleyebilirsiniz. CarAudioManager kart değerleri için karşılık gelen sistem API'leri AudioControl HAL'ye gönderebilirsiniz. Bu API'ler için android.car.permission.CAR_CONTROL_AUDIO_VOLUME AudioControl API'leri şunlardır:

  • setBalanceTowardRight(float value) hoparlörün ses düzeyini arabanın sağ (+) veya sol (-) tarafı.

    • 0,0 ortalandı
    • +1.0 tamamen doğru
    • -1,0 tamamen sol tarafta
    • -1 ila 1 aralığının dışındaki bir değer hatadır
  • setFadeTowardFront(float value) hoparlörün ses düzeyini arabanın ön (+) veya arkası (-) işaretidir.

    • 0,0 ortalandı
    • +1.0 tamamen ileridir
    • -1,0 tamamen arkadır
    • -1 ila 1 aralığının dışındaki bir değer hatadır

Bu değerlerin nasıl uygulanması gerektiğine ve değerlerin yardımcı olur. Yalnızca medyaya veya genel olarak tüm kitlelere Android sesleri. Android 11 ayrıca ses efektleri uygulayın. Bu sayede proje boyunca uygun ses efektleriyle karartmayı ve dengeyi çıkış cihazları kullanmanızı öneririz.

Sesi kısma

Araç bir akışın kazancını azalttığında ses kısma olur. aynı anda oynatılan başka bir akış daha net duyulabiliyor. AAOS'de, ses kısma özelliği HAL tarafından uygulanır. Android'in sesler üzerinde herhangi bir kontrolü yoktur çok çaba sarf etti. Android 11'de temel bilgiler iki çıkışın olup olmadığına karar vermek için HAL’ye her iki cihazda da etkin akış var.

Ne zaman kapatılmalı?

Sıralamanın alan tarafından nasıl ele alınacağına karar vermek bireysel OEM'nin HAL, aşağıdaki yönergeleri öneririz.

  • Android'de birden fazla yayın aynı anda iki uygulama veya hizmet tarafından oynatıldığında gerçekleşir ses odağını aynı anda basılı tut. Android'in ne zaman eşzamanlı erişim izni verebileceğini öğrenmek için Kısıtlama türleri bölümündeki etkileşim matrisine bakın. Araç ses sistemi eklentisi kullanıma sunulduğunda bu durum, ses AudioFocus yönetimi.

  • Android ile karıştırılan tüm akışlar, herhangi bir kazanç elde edilmeden önce geçerlidir. Eşzamanlı olarak oynatıldığında diğer akışlar da bilgilendirilmeli ayrı çıkış cihazlarına yönlendirilmelidir. Böylece, HAL karıştırmadan önce biraz kıstırarak.

Aşağıda, etkisinin azaltılması önerilir. Eşzamanlı olası etkileşimleri görebilirsiniz.

Etkileşim İşlem
EMERGENCY SAFETY hariç her şeyin sesini kapatır veya sesini kapatır
SAFETY EMERGENCY dışındaki her şeyi kapatır
NAVIGATION SAFETY ve EMERGENCY dışındaki her şeyi kapatır
CALL SAFETY, EMERGENCY ve diğer tüm ve NAVIGATION
VOICE Ördekler CALL_RING
VEHICLE_SOUNDS Aktif sesin önemini ve önem derecesini siz belirlersiniz. diğer sesleri kapatır.
MUSIC ve ANNOUNCEMENT Her şeyden mahrum kaldım. İstisna olarak, SYSTEM_SOUND

Sesi kısma sırasında dikkat edilmesi gereken noktalar

Navigasyon veya asistan gibi bazı uygulama ve hizmetler birden fazla oyuncuların işlem yapmasını sağlar. Veri akışı olduğunda agresif ayrılmalardan kaçının medyanın tamamen dolmadığından emin olmak için çıkış cihazlarında akışı durdurur oynatmadan önce küçülmeden önceki en yüksek ses düzeyini veya asistan uygulaması başlatılır.

Yeterince iyi izolasyona sahip birden fazla ses kademesi bulunan araçlarda: sesi kısmak yerine arabanın farklı alanlarına yönlendirmesini sağlar. Örneğin, navigasyon talimatları, sürücünün koltuğundaki hoparlöre yönlendirilebilir. kulübede normal ses seviyesinde müzik çalmaya devam ediyor.

Güvenlikle ilgili önemli sesler

Android 11 kullanıma sunuldu HAL ses odağı API'leri. HAL, Güvenlikle ilgili önemli sesler, diğer seslere göre önceliklidir. HAL, USAGE_EMERGENCY için odaklanıldığında, bu uygulama ve hizmetlerin Android ses çalmaz. HAL, Android'den hangi akışların güvenlik açısından kritik sesler çalmak için karıştırılmamalı veya sessize alınmalıdır.

Ses düzeyi ayarları kullanıcı arayüzünü yapılandırma

AAOS, ses düzeyi ayarları kullanıcı arayüzünü ses düzeyi grubu yapılandırmasından ayırır. Bunlar, Birim grubu kazançlarını yapılandırın. Bu ayırma, yapılandırmanın değişmesi durumunda değişiklik yapmaya gerek olmadığını kontrol edin.

Araba ayarları kullanıcı arayüzünde packages/apps/Car/Settings/res/xml/car_volume_items.xml her AudioAttributes.USAGE tanımlandı. Bu dosya, uygulamanızın İlki ile ilişkilendirilen kaynakları kullanarak tanımlanan VolumeGroups ve kabul edilen kullanımları VolumeGroup ile gösterilir.

Örneğin, aşağıdaki örnekte bir VolumeGroup öğesi voice_communication ve voice_communication_signalling. Varsayılan araba ayarları kullanıcı arayüzünün uygulanması, VolumeGroup öğesini ilk matc olduğu için voice_communication ile ilişkili kaynakları dosyadır.

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

Yukarıdaki yapılandırmada kullanılan özellikler ve değerler şurada açıklanmıştır: packages/apps/Car/Settings/res/values/attrs.xml Ses düzeyi ayarları kullanıcı arayüzünün aşağıdaki VolumeGroup tabanlı CarAudioManager API'leri:

  • Kaç tane kontrol çizilmesi gerektiğini öğrenmek için getVolumeGroupCount().
  • Alt ve üst sınırları almak için getGroupMinVolume() ve getGroupMaxVolume().
  • Mevcut ses seviyesini öğrenmek için getGroupVolume() tuşlarına basın.
  • Hacim değişiklikleri hakkında bildirim almak için registerVolumeChangeObserver().

Arabanın ses seviyesi grubu etkinliği

Ses düzeyi güncelleme ve sesi kapatma açma/kapatma seçeneklerinin bağlamsal olduğu Automotive kullanım alanları belli uygulamaların işlemlerini (ör. hacim gibi) tanımlayabilecek Ayarlar'da devre dışı bırakabilirsiniz. Araç ses grubundan gelen mevcut ses düzeyi ve sesi kapatma geri çağırması bağlamsal bilgiler sınırlıdır. Otomotiv kullanım alanlarına ve gelecektekilere daha iyi hizmet vermek CarVolumeGroupEvent, Android 14'e eklendi. Her etkinlikte üç kritik bilgi türü bulunur:

  • CarVolumeGroupInfo listesi
  • EventTypes (bit eşlenmiş)
  • ExtraInfos listesi

AraçbirimiGrupBilgisi

Etkinlik geri aramasının alıcısı, etkilenen arabanın listesine hazır erişime sahip ses grubu bilgileri. Bu, uygulamanın herhangi bir işlem yapması en güncel durumu almak için Araba ses çerçevesine ek çağrılar gönderir. O da kullanıcı arayüzünü veya dahili öğeyi güncellemek için alınan CarVolumeGroupInfos eyaletler. Uygulamaların kolay kullanılmasını sağlamak için arabanın ses düzeyinde değişen yönler grubu, aşağıda açıklandığı gibi EventTypes kapsamında da sağlanır.

Etkinlik Türleri

CarVolumeGroupInfo özelliğinin hangi özelliğinin değiştiğini tanımlar. Uygulamalar bunu şu amaçlarla kullanabilir: ve gerekli önlemleri almalısınız. Örneğin, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED, ilgili CarVolumeGroups maksimum hacim kazanç dizini değişti ve sorgulanabilir: CarVolumeGroupInfo.getMaxVolumeGainIndex().

Aşağıdaki tabloda EventType ve CarVolumeGroupInfo.

Etkinlik Türü AraçbirimiGrupBilgisi
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.isSessiz()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
ETKİNLİK_TÜRÜ_ATTENUATION_DEĞİŞTİRİLDİ CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_DEĞİŞTİRİLDİ CarVolumeGroupInfo.getAudioAttributes()

Ek bilgiler

CarVolumeGroup belgesinin neden değiştiğiyle ilgili ek bilgi sağlar. Uygulamalar bu bilgileri, kullanıcıyı uyarmak amacıyla ek bağlam sağlamak için kullanabilir veya bildirimde bulunması gerekir. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL bir termal aşırı yük nedeniyle aktif geçici zayıflama olduğunu gösterir. Uygulama kullanıcıya bilgi verebilir.

ExtraInfos için herhangi bir süreç zorunlu kılınmamaktadır. Bu sizin karar verme yetkinize bağlıdır süreci ExtraInfos temel alarak belirler. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED nedeniyle etkin. Ayrıca şunu da seçebilirsiniz: Kullanıcının ses düzeyini değiştirmesini önlemek için başlangıçta ses düzeyi çubuğunun kullanıcı arayüzünü karartın. Diğerleri, ertelemenin etkin olduğunu belirten bir kısa mesaj göstermeyi ve kullanıcıya izin vermeyi tercih edebilir ses düzeyini değiştirin.

Araç ses çerçevesi, ses kontrolü HAL'sine (IAudioGainCallback) bağlı olarak önerilen ExtraInfos öğesini sağlayın. Daha fazla bilgi edinmek için bkz. Ses Artışı Geri Çağırması.

CarVolumeGroupEvent, araç ses çerçevesinin gelecekteki ihtiyaçlarını karşılayacak şekilde ölçeklendirilir. Biz yalnızca CarVolumeGroupEvent tarihine kadar desteklemeyi planlıyoruz. Biz uygulama geliştiricilerin, CarVolumeGroupEvent değişiklikleri sessize alma ve gruplandırma ses düzeyini ayarlayabilirsiniz.

Araba ses düzeyi grubu etkinliği geri araması

Android 14, ayrıcalıklı ve güvenli cihazlar için yeni bir geri çağırma CarVolumeGroupEvents adlı platforma kaydolun ve bildirim alın.

  • Geri çağırmaya kaydolmak için şunu kullanın: CarAudioManager#registerCarVolumeGroupEventCallback().

  • Geri çağırma kaydını iptal etmek için şunu kullanın: CarAudioManager#unregisterCarVolumeGroupEventCallback().

Bir uygulama yeni CarVolumeGroupEventCallback ve eski sürüme kaydolduğunda CarVolumeCallback, CarVolumeGroupEventCallbacks etkinliğine öncelik verilir. Araba ses yığını artık CarVolumeCallback cihazını tetiklemiyor. Bu durum, aynı etkinlik için aynı uygulamaya yinelenen tetikleyiciler.

Yönetmek için CarVolumeGroupEventCallback kullanmanızı önemle tavsiye ederiz değişiklikleri sessize alma ve gruplandırma ses düzeyini ayarlayabilirsiniz.

Ses kazancı geri çağırması

Android 13'ten itibaren, AudioControl HAL bir sistemi.

HAL API'sı

2.0 AIDL'de AudioControl

AudioControl AIDL HAL sürüm 2.0 aşağıdaki API'yı eklemektedir:

API Amaç
IAudioControl#registerGainCallback AudioControl HAL ile bir IAudioGainCallback örneğini kaydeder.
IAudioGainCallback#onAudioDeviceGainsChanged Ses kazancı yapılandırmasındaki değişiklikleri bildirmek için eşzamansız geri arama.

AudioControl HAL geri çağırması nedenlerin listesini ve ilgili Şunları içeren AudioGainConfigInfo:

  • Bölge Kimliği
  • Cihaz bağlantı noktası adresi
  • Hacim dizini > dizin, kısıtlanmış bir dizin veya güncelleme dizini olabilir.

Nedenler geniş bir şekilde aşağıdaki şekilde kategorize edilebilir:

  • Kısıtlama nedenleri. Ses düzeyi ve sesi kapatma davranışında geçici değişiklik.
  • Nedenleri güncelleyin. Hacim davranışında kalıcı değişiklik.

Kısıtlama türleri

AudioControl HAL AIDL V3 itibarıyla, desteklenen türler şunlardır: kısıtlamalar:

  • Kapat
  • Blokaj
  • Sınırlama
  • Zayıflama
Etkin kısıtlama Kullanıcı tarafından tetiklenen hacim değişikliği Kullanıcı tarafından tetiklenen sesi kapatma açma/kapatma düğmesi
Kapat ❌ (sesi aç)

✔ (sesi aç)
Blokaj
Sınırlama ❌ (sınırın üzerinde)

✔ (sınırın altında)
Zayıflama

Kısıtlamalar arasındaki öncelik Yoksay > Engelleme > Sınırlama > Zayıflama.

Kısıtlamaları yoksay

Sesi kapatma kısıtlamaları şunlardır:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

Araç ses çerçevesi dahili olarak aşağıdaki iki ses kapatma durumunu korur:

  • Kullanıcı yoksayar. Kullanıcının isteğine göre CarAudioManager veya önemli etkinlikler.

  • HAL sesini kapatma. AudioGain tarihine kadar alınan yoksayma kısıtlamalarına dayalı olarak açıldı geri arama.

Ayarlar uygulaması gibi dinleyiciler için ses grubu genel sesi kapatılır. (CarVolumeGroupInfo.isMuted()) durumu, üst seviye kapatmalar etkin.

HAL sesini kapatma etkinleştirildiğinde tüm gelen sesler değişir ve grup sesi açılır İstekler, kısıtlama süresince yoksayılır.

Etkileşim destek kaydı: HAL sesini kapatma etkin etkin ve Ses kapatma için kullanıcı istekleri.

HAL kapatma etkin olduğunda ve Kullanıcı sessize alma devre dışı bırakıldığında:

  • Ses grubu genel sesini kapatma durumu true olarak değiştirildi.
  • Kullanıcının yoksaymayı etkinleştirme istekleri işleme alınır.
    • Nedeni: Kullanıcıların gizliliğini korumak amacıyla, kullanıcıların yoksayma istekleri her zaman dikkate alınmalıdır.

HAL kapatma etkin ve Kullanıcı yoksayma etkin olduğunda:

  • Ses grubu genel sesini kapatma durumu true olarak değiştirildi.

  • Kullanıcının yoksaymayı devre dışı bırakma istekleri NOT işlenir. Önbelleğe Alınan Kullanıcı sesi kapatma durumu etkin kalır.

    • Neden: Kullanıcıların yoksaymaktan vazgeçme istekleri yalnızca etkin kısıtlama yoksa kabul edilir.

    • Neden: Önbelleğe alınan Kullanıcı sesini kapatma özelliğinin kapatılması, istenmeyen ses patlamalarına neden olabilir ve kullanıcı güvenliğini tehlikeye atmaktadır. Bu, özellikle sessize alma durumu etkinse geçerlidir Bu nedenle, kondisyon döngüsü boyunca ses düzeyinin farkındalığı oluşturuyor.

Etkileşim destek kaydı: Kullanıcı sessize alma işleminde herhangi bir değişiklik yokken HAL sessize alma etkinleştirildi ve devre dışı bırakıldı

HAL sesinin kapatılması, ses grubunun genel sesini kapatma durumunu değiştirir. Ancak, kullanıcının yoksayma durumunu doğrudan güncellemez. Kullanıcı sesini kapatma devre dışı olduğunda ve HAL yoksayıldığında etkinleştirmek için geri çağırma alındı:

  • Ses grubu genel sesini kapatma durumu true olarak değiştirildi.
  • Kullanıcının ses düzeyini değiştirme istekleri, HAL sesi kapalıyken NOT işlenir etkin olduğundan emin olun.

    • Neden: Ses kapatma etkin durumdayken kullanıcı sesi algılayamaz. İzin veriliyor sesin değiştirilmesi ses patlamasına neden olabilir ve kullanıcı güvenliğini tehlikeye atabilir.

    • Neden: Ses düzeyi uygulamaları geri çağırmalara kaydolabilir ve sesi açmayı tetikleyebilir (CarAudioManager.setVolumeGroupSessiz(...,/* sessize alma=*/ gerçek,..)) (beklenen davranış buysa) kullanıcı müdahalesi olmadan otomatik olarak satın alabilirsiniz.

Kullanıcı sessize alma özelliği devre dışıyken HAL kapatma özelliği devre dışı bırakıldığında:

  • Ses grubunun sesini kapatma durumu false olarak değiştirildi.

    Neden: Yoksayma durumunu sabit hale getirmek ve Kullanıcı'dan sesi açmasını istemek Sesi kapatma durumları sık sık geçiş yaptığında kullanıcının gereksiz yere çalışmasını kesintiye uğratabilir.

  • Kullanıcıların hacmi değiştirme istekleri normal şekilde işlenir.

Blokaj

Engelleme kısıtlamaları şu şekildedir:

  • Reasons.FORCED_MASTER_MUTE
  • Reasons.REMOTE_MUTE
  • Reasons.TCU_MUTE.

Engelleme kısıtlamaları etkin olduğunda kullanıcılardan gelen istekler:

  • Ses değişiklikleri iş edilmez.
  • Sesi kapatma/açma işlemleri işlenir.

Sınırlama

Sınırlama kısıtlamaları şunlardır:

  • Reasons.THERMAL_LIMITATION
  • Reasons.SUSPEND_EXIT_VOL_LIMITATION

Sınırlama kısıtlamaları etkin olduğunda kullanıcılardan gelen istekler:

  • Ses düzeyini değiştirme:

    • Sınırlama içinde işlenir
    • Sınırlamanın üzerindeki öğeler işlenmez
  • Sesi kapatma/açma işlemleri işlenir.

Zayıflama

Azaltma kısıtlamaları şunlardır:

  • Reasons.ADAS_DUCKING
  • Reasons.NAV_DUCKING
  • Reasons.PROJECTION_DUCKING

Zayıflama kısıtlamaları etkin olduğunda kullanıcılardan gelen istekler:

  • Ses seviyesi değişiklikleri işlenir. Mevcut yeni ses seviyesi şuna ayarlandı: azaltılmış ses düzeyi (eski ses düzeyi yerine). Gelecekteki hacim değişiklikleri bu düzeyden yapılır.

  • Sesi kapatma/açma işlemi işlendi.

Dizine güncelle

Aşağıdakiler, eşzamansız hacim dizini güncellemesi olarak kabul edilir: Reasons.EXTERNAL_AMP_VOL_FEEDBACK

Bu nedenle, AudioControl HAL, ses grubu mevcut dizinini güncelleyebilir dizine eklenir. Bu öncelikle ses sisteminden gelen geri bildirim olarak kullanılır araba ses sistemi çerçevesinden gelen ses düzeyi değiştirme isteği içindir. Dizin güncellemesi ayrıca, Google Apps ile senkronize etmek için CarVolumeGroupEvent geri çağırması olarak iletişim kurdu dizine ekler.

Örnekler

Kullanım Örneği: Kullanıcı, hacim dizinini 30 olarak günceller

  • Kullanıcı, hacim dizinini 30 olarak değiştirmek için Cilt uygulamasını kullanır.

  • Bu dizin, ses kazancına dönüştürülür ve Ses HAL'ye gönderilir.

  • Audio HAL tedarikçilerinin uygulamaları, yeni hacim artışı ve güncelleme alır ses sistemine (harici amplifikatör gibi) dokunun.

  • Ses sistemi, ses seviyesinin yalnızca dizin 15 olarak güncellendiğini belirten bir yanıt veriyor (Android'de bilinmeyen nedenlerle).

  • AudioControl HAL tetikleyicilerinin satıcı uygulamaları:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • Araba ses hizmeti, ve ses düzeyi uygulamasına yapılan geri çağırmalar. Kullanıcı tarafından istenen dizin 30'dur. Ancak, ses sistemi eşzamansız geri bildirimi, dizini 15 olarak günceller.

Kullanım alanı: Askıya alma işleminden çıkıldıktan sonra ilk ses çalma

  • Askıya alma işleminden önceki hacim dizini 95 değerine (aralık: [0-99]) ayarlandı.

  • Android, askıya alma işlemine girer.

  • Android askıya alındığında (örneğin, devam ettirme):

    • Audio HAL/AudioControl HAL tedarikçisi, yerel olarak ayarlayabilirsiniz.

    • AudioControl HAL tedarikçisi, güvenli dizin için geri çağırmayı da tetikliyor:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • Araba ses hizmeti, kalıcılık ve dizini senkronize eden hacim uygulamasına yaptığı geri çağırmaları içerir. Askıya alma işleminden önceki hacim dizini 95'tir. Ancak bu dizinde AudioControl HAL uygulaması tarafından güvenli ses düzeyini 30 olarak ayarladım.

ziyaret edin.

Dinamik birim yapılandırması

Bu özellik için aşağıdaki temel kullanım alanlarını göz önünde bulundururuz:

  1. Araç çizgi sonu (EOL) yapılandırması.

    • Otomobil üreticileri, araca göre EOL'deki ses düzeyi yapılandırmalarını güncellemeyi tercih ediyor ses sistemi kurulumu. Genellikle bu, Android SW resmi.

    • Araç üreticilerinin hizmet programı.

  2. Çalışma zamanı yapılandırması. Otomotiv ses sistemleri harici desteği destekler amplifikatör yapılandırmaları ve bu ECU'lar ses aralığını barındırabilir yapılandırmanın en iyi yoludur.

  3. İsteğe bağlı yapılandırma. Bu Çevik proje yönetimi planlamasına Kullanıcıların gelişmiş sinyale abone olduğu talebe dayalı ses özellikleri bir süre boyunca işlenmesini ifade eder. Yeni hacim aralığı yapılandırmaları abonelik süresince geçerlidir.

Tasarım

Dinamik birim yapılandırması üç aşamada gerçekleştirilir:

  • Keşif. Tedarikçi firma AudioControl HAL uygulaması, yeni ses seviyesi keşfetti aralığı, tedarikçi firmanın sahip olduğu özel bir IPC mekanizması aracılığıyla güncellenir.

    Bulunduktan sonra, AudioControl::IModuleChangeCallback

  • Güncelleyin. Araç ses grubu, ses grubu durumunu yeni ile günceller. ses seviyesi aralıkları.

    Hacim aralığı güncellemesinden sonra aynı hacim düzeyini korumak için çalışılmaktadır. Bununla birlikte, dizin sınırların dışında kalırsa mevcut hacim endeksi değerini belirlemektir. Örneğin, tedarikçinin geri arama.

  • Geri arama.

    • Ses grubu aralığı güncellendikten sonra araç ses yığını, CarVolumeGroupEventCallback aracılığıyla kaydedilen uygulamalar.

    • CarVolumeGroupEvent, güncellenmiş CarVolumeGroupInfo, Event-type değerini taşır (ne değişti) ve Ek bilgiler (neden değiştiği).

resim

Şekil 1. Dinamik birim yapılandırması.

HAL API'sı

3.0 AIDL'de AudioControl

AudioControl AIDL HAL sürüm 3.0 aşağıdaki API'leri sunmaktadır:

API
IAudioControl#setModuleChangeCallback AudioControl HAL ile IModuleChangeCallback örneğini ayarlar.
ISesDenetimi#clearModuleChangeCallback Daha önce AudioControl HAL.
IModuleChangeCallback#onAudioPortsChanged AudioPorts'ta yapılan değişiklikleri bildirmek için geri arama

Sıra

Dinamik birim yapılandırmasının sıra şeması aşağıda gösterilmektedir.

resim

Şekil 2. Dinamik birim yapılandırması için sıra şeması.

Temel unsurlar

Bu özelliği optimize etmek için aşağıdakileri göz önünde bulundurun.

  • Geri çağırmanın bir parçası olarak sağlanan AudioPort'lar, Automotive ile eşleşmelidir BUS tanımı:

    • Cihaz bağlantı noktası. IN_DEVICE OUT_DEVICE
    • Bağlantı. BUS
    • Adres. Ses HAL tanımında tanımlanmıştır
    • Kazanç modu. JOINT
  • Sağlayıcılar, Ses dosyasında ses seviyesi aralığı tanımlarının üst kümesini tanımlamalıdır HAL politikasını ve araç varyantlarına göre özelleştirmek için geri çağırmayı kullanın. Bkz. IModuleChangeCallbac Daha fazla bilgi için AIDL tanımını inceleyin.

  • Birden fazla ses BUS'u aynı ses düzeyi grubuna ait olduğunda, her biri aynı ses düzeyi grubuna ait olmalıdır aynı hacim aralığı tanımlarına sahiptir. Aksi takdirde arabada yeni ses aralığı tanımını reddeden ses çerçevesi.