Hacim yönetimi

Ses düzeyi yönetimi, birimlerin yazılım yerine bir donanım amplifikatörü tarafından HAL'nin altına uygulanması beklentisiyle sabit birimleri kullanan CarAudioService bulunur. CarAudioService aynı kazanımları bir birim grubuyla ilişkili tüm cihazlara uygulamak için çıkış cihazlarını birim grupları halinde düzenler.

Sabit hacimler

AAOS uygulamaları, ses seviyesini kontrol etmek için bir yazılım karıştırıcısı yerine bir donanım amplifikatörü kullanır. Yan etkilerden kaçınmak için config_useFixedVolume bayrağını true olarak ayarlayın (gerektiğinde kaplama):

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

config_useFixedVolume bayrağı ayarlanmadığında (veya false olarak ayarlandığında), uygulamalar ses düzeyini yazılım karıştırıcısında akış türüne göre değiştirmek için AudioManager.setStreamVolume() çağırabilir. Diğer uygulamalar üzerindeki potansiyel etkiler ve yazılım karıştırıcısındaki ses seviyesi zayıflamasının, donanım amplifikatörü tarafından alındığında sinyalde daha az sayıda önemli bit bulunmasına neden olabileceği gerçeği nedeniyle bu her zaman istenmeyebilir.

Cilt grupları

Ses seviyesi grupları, bir ses bölgesi içindeki bir dizi cihaz için ses birimlerini yönetir. Her ses düzeyi grubu için ses düzeyi bağımsız olarak kontrol edilebilir. Ortaya çıkan kazançlar, aracın amplifikatörü tarafından uygulanacak ilgili cihazlar üzerinde yapılandırılır. Ses düzeyi ayarları kullanıcı için kalıcı olur ve kullanıcı oturum açtığında yüklenir.

Birim gruplarını tanımlama

CarAudioService, car_audio_configuration.xml dosyasında tanımlanan birim 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 birim grubu, ilişkili adreslere sahip bir veya daha fazla çıkış aygıtı içermelidir. Adresler audio_policy_configuration.xml dosyasında tanımlanan çıkış aygıtlarına karşılık gelmelidir.

Hacim grubu kazanımlarını yapılandırma

Her ses düzeyi grubunun minimum, maksimum ve varsayılan kazanç değerlerinin yanı sıra ses düzeyi grubuyla ilişkili cihazlar için audio_policy_configuration.xml dosyasında yapılandırılan değerlere dayalı bir adım boyutu vardır.

<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ın kazanç değerlerini kontrol eder ve grubu aşağıdaki gibi yapılandırır:

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

Bu değerlerin yapılandırılma şekli göz önüne alındığında, bir ses seviyesi grubunun kazancını, ses grubuyla ilişkili bir cihaz için desteklenen aralığın dışında ayarlamak mümkündür. Bu durumda, o cihaz için kazanç, ses grubu değerinin aralığın altında veya üstünde olmasına bağlı olarak cihazın minimum veya maksimum kazanç değerine ayarlanır.

Birim grubu tanımlayıcıları

Birim grupları çalışma zamanında XML dosyasında tanımlanan sıraya göre tanımlanır. Kimlikler bir ses bölgesi içinde 0 ile N-1 arasında değişir; burada N o bölgedeki ses seviyesi gruplarının sayısıdır. Bu şekilde, birim grubu kimlikleri bölgeler arasında benzersiz değildir. Bu tanımlayıcılar, birim gruplarıyla ilişkili CarAudioManager API'leri için kullanılır. zoneId olmayan bir groupId alan herhangi bir API, varsayılan olarak birincil ses bölgesini kullanır.

Çok bölgeli ses düzeyi yönetimi

Her ses bölgesinin bir veya daha fazla ses seviyesi grubuna sahip olması beklenir ve her ses seviyesi grubu yalnızca tek bir ses bölgesiyle ilişkilendirilir. Bu ilişki car_audio_configuration.xml dosyasının bir parçası olarak tanımlanır. Daha fazla bilgi edinmek için yukarıdaki Birim gruplarını tanımlama bölümündeki örneğe bakın.

Her bir bölgenin mevcut ses seviyesi seviyeleri, o bölgeyle ilişkili kullanıcı için kalıcı olur. Bu ayarlar bölgeye özgüdür; yani bir kullanıcı birincil bölgeyle ilişkili bir ekranda oturum açarsa ve daha sonra ikincil ses bölgesiyle ilişkili bir bölgede oturum açarsa, ilk bölge için yüklenen ve sürdürülen ses seviyeleri, ikincil bölge.

Ses seviyesi tuşu etkinliklerini yönetin

Android, ses kontrolü için aşağıdakiler de dahil olmak üzere çeşitli tuş kodlarını tanımlar:

  • KEYCODE_VOLUME_UP
  • KEYCODE_VOLUME_DOWN
  • KEYCODE_VOLUME_MUTE

Varsayılan olarak Android, ses seviyesi tuşu olaylarını uygulamalara yönlendirir. Otomotiv uygulamaları, bu önemli olayların, daha sonra uygun şekilde setGroupVolume veya setMasterMute çağıran CarAudioService tarafından işlenmesini sağlamalıdır. Bu davranışı zorlamak için config_handleVolumeKeysInWindowManager bayrağını true olarak ayarlayın:

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

Ses seviyesi tuşu etkinliklerinin şu anda hangi bölgeye yönelik olduklarını ayırt etme yolu yoktur ve hepsinin birincil ses bölgesiyle ilişkili olduğu varsayılmaktadır. Bir ses seviyesi tuşu olayı alındığında CarAudioService aktif oynatıcılar için ses bağlamlarını getirerek ve ardından en yüksek öncelikli ses bağlamıyla ilişkili çıkış cihazını içeren ses seviyesi grubunu ayarlayarak hangi ses seviyesi grubunun ayarlanacağını belirler. Önceliklendirme, CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY içinde tanımlanan sabit sıralamaya göre belirlenir.

Solma ve denge

AudioControl HAL'in her iki versiyonu da araçta solma ve dengeyi ayarlamak için API'ler içerir. CarAudioManager için ilgili sistem API'leri, değerleri AudioControl HAL'a aktarır. Bu API'ler android.car.permission.CAR_CONTROL_AUDIO_VOLUME gerektirir. AudioControl API'leri şunlardır:

  • setBalanceTowardRight(float value) hoparlör sesini arabanın sağ (+) veya sol (-) tarafına doğru kaydırır.

    • 0,0 ortalanmıştır
    • +1.0 tamamen doğru
    • -1.0 tamamen kaldı
    • -1 ila 1 aralığının dışındaki bir değer hatadır
  • setFadeTowardFront(float value) hoparlör sesini arabanın önüne (+) veya arkasına (-) doğru kaydırır.

    • 0,0 ortalanmıştır
    • +1.0 tamamen ileri
    • -1.0 tamamen geride
    • -1 ila 1 aralığının dışındaki bir değer hatadır

Bu değerlerin nasıl uygulanması gerektiğine ve değerlerin kullanıcılara nasıl görüntüleneceğine siz karar verirsiniz. Kesinlikle medyaya veya genel olarak tüm Android seslerine uygulanabilirler. Android 11 ayrıca çıkış cihazlarına ses efektleri uygulama desteğini de tanıttı. Bununla, alternatif olarak bu API'ler yerine uygun çıkış cihazlarındaki ses efektleri aracılığıyla solmayı ve dengelemeyi yönetmek mümkündür.

Sesin kısılması

Araç, aynı anda çalınan başka bir akışın daha net duyulabilmesi için bir akışın kazancını azalttığında ses kısılması meydana gelir. AAOS'ta ses kısma HAL tarafından uygulanır. Android'in işletim sistemi dışındaki sesler üzerinde kontrolü yoktur. Android 11'de, HAL'in kullanabileceği ana bilgi, iki çıkış cihazının her ikisinin de aktif akışlara sahip olup olmadığıdır.

Ne zaman eğilmeli

HAL tarafından eğilmenin nasıl ele alınacağına karar vermek bireysel OEM'e bağlı olsa da, aşağıdaki yönergeleri öneriyoruz.

  • Android'de birden fazla akış oynatılması genellikle iki uygulama veya hizmetin aynı anda ses odağını tutması durumunda ortaya çıkar. Android'in ne zaman eşzamanlı odaklama izni verebileceğini öğrenmek için Kısıtlama türleri bölümündeki etkileşim matrisine bakın. Araç ses eklentisinin kullanıma sunulmasıyla birlikte bu aynı zamanda AudioFocus yönetiminize de bağlıdır.

  • Android tarafından karıştırılan tüm akışlar, herhangi bir kazanç uygulanmadan önce gerçekleştirilir. Bu nedenle, bir başkasıyla eş zamanlı oynatıldığında kısaltılması gereken herhangi bir akış, HAL'in bunları karıştırmadan önce yumuşatma uygulayabilmesi için ayrı çıkış cihazlarına yönlendirilmelidir.

Aşağıda potansiyel eşzamanlı etkileşimler yer almaktadır ve eğilme önerilir.

Etkileşim Aksiyon
EMERGENCY SAFETY dışındaki her şeyi devre dışı bırakır veya sessize alır
SAFETY EMERGENCY dışında her şeyi görmezden gelir
NAVIGATION SAFETY ve EMERGENCY dışındaki her şeyi göz ardı eder
CALL SAFETY , EMERGENCY ve NAVIGATION dışındaki her şeyi göz ardı eder
VOICE Ördekler CALL_RING
VEHICLE_SOUNDS Aktif sesin önemini ve diğer sesleri engelleyip engellemediğini siz belirlersiniz.
MUSIC ve ANNOUNCEMENT Herşeye boyun eğdim. SYSTEM_SOUND olarak çalınan dokunma etkileşimi tonları istisnadır.

Eğilirken dikkat edilmesi gerekenler

Navigasyon veya asistan gibi bazı uygulamalar ve hizmetler, eylemleri gerçekleştirmek için birden fazla oynatıcıyı kullanabilir. Bir veri akışının çıkış aygıtlarından akışı durduğunda, navigasyondan veya bir asistan uygulamasından bir sonraki oynatma başlatılmadan3 önce medyanın tam ses düzeyine dönmemesini sağlamak için agresif ses kısma işleminden kaçının.

Yeterince iyi izolasyona sahip birden fazla ses aşamasına sahip araçlar için, eğilmek yerine sesi arabanın farklı bölgelerine yönlendirebilirsiniz. Örneğin, kabin içerisinde normal ses seviyesinde müzik çalmaya devam ederken navigasyon talimatları sürücünün koltuk başlığı hoparlörlerine yönlendirilebilir.

Güvenlik açısından kritik sesler

Android 11 , HAL ses odaklama API'lerini kullanıma sundu. HAL, güvenlik açısından kritik seslerin diğer seslere göre önceliklendirilmesini sağlar. HAL, USAGE_EMERGENCY için ses odağını koruyorsa, Android uygulamalarının ve hizmetlerinin ses çalmayacağı garanti edilmez. HAL, güvenlik açısından kritik sesleri oynatmak için Android'den hangi akışların karıştırılması veya sessize alınması gerektiğini belirler.

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

AAOS, birim ayarları kullanıcı arayüzünü birim grubu yapılandırmasından ayırır. Bunlar , Hacim grubu kazançlarını yapılandırma bölümünde açıklandığı gibi üst üste yerleştirilebilir. Bu ayırma, birim gruplarının yapılandırmasının değişmesi durumunda herhangi bir değişikliğe gerek kalmamasını sağlar.

Araç ayarları kullanıcı arayüzünde, packages/apps/Car/Settings/res/xml/car_volume_items.xml tanımlanan her AudioAttributes.USAGE ile ilişkili kullanıcı arayüzü öğelerini (başlık ve simge kaynakları) içerir. Bu dosya, her VolumeGroup yer alan ilk tanınan kullanımla ilişkili kaynakları kullanarak tanımlanan VolumeGroups makul bir şekilde oluşturulmasını sağlar.

Örneğin, aşağıdaki örnekte bir VolumeGroup voice_communication ve voice_communication_signalling içerecek şekilde tanımlanır. Araç ayarları kullanıcı arayüzünün varsayılan uygulaması, dosyadaki ilk matc olduğu için voice_communication ile ilişkili kaynakları kullanarak VolumeGroup oluşturur.

<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 nitelikler ve değerler packages/apps/Car/Settings/res/values/attrs.xml dosyasında beyan edilmiştir. Ses seviyesi ayarları kullanıcı arayüzü aşağıdaki VolumeGroup tabanlı CarAudioManager API'lerini kullanır:

  • Kaç kontrolün çizilmesi gerektiğini öğrenmek için getVolumeGroupCount() .
  • Alt ve üst sınırları almak için getGroupMinVolume() ve getGroupMaxVolume() .
  • Geçerli birimi almak için getGroupVolume() .
  • Ses düzeyi değişikliklerinden haberdar olmak için registerVolumeChangeObserver() .

Araç hacmi grubu etkinliği

Ses seviyesi güncellemesi ve sessize alma geçişinin otomotiv kullanım durumları, ses seviyesi ayarları gibi belirli uygulamaların eylemlerini tanımlayabilen bağlamsal temellere sahiptir. Araç ses yığınından geçerli ses seviyesi ve sessiz geri arama, sınırlı bağlamsal bilgi sağlar. Otomotiv kullanım senaryolarına ve gelecekteki ölçeklenebilirliğe daha iyi hizmet vermek için CarVolumeGroupEvent, Android 14'e eklendi. Her etkinlik üç kritik türde bilgi taşır:

  • CarVolumeGroupInfo Listesi
  • EventTypes (bit eşlemeli)
  • ExtraInfos Listesi

Araç HacmiGrupBilgisi

Olay geri aramasının alıcısı, etkilenen araç hacim grubu bilgilerinin listesine hazır erişime sahiptir. Bu, uygulamanın en son durumu almak için Araç ses sistemine herhangi bir ek çağrı yapmasına gerek olmadığı anlamına gelir. Kullanıcı to update the UI or internal states. To make it easier for apps, the aspects that changed in a car volume group are also provided as part of alınan CarVolumeGroupInfos kullanabilir. to update the UI or internal states. To make it easier for apps, the aspects that changed in a car volume group are also provided as part of .

Etkinlik Türleri

CarVolumeGroupInfo'nun hangi yönünün değiştiğini tanımlar. Uygulamalar, değişiklikleri tanımlamak ve gerekli eylemleri gerçekleştirmek için bunu kullanabilir. Örneğin, EVENT_TYPE_VOLUME_MAX_INDEX_CHANGED , ilgili CarVolumeGroups' maximum volume gain index has changed and can be queried by belirtir.

Aşağıdaki tabloda EventType ve CarVolumeGroupInfo arasındaki ilişki gösterilmektedir.

Etkinlik tipi Araç HacmiGrupBilgisi
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.isMated()
EVENT_TYPE_VOLUME_BLOCKED_CHANGED CarVolumeGroupInfo.isBlocked()
EVENT_TYPE_ATTENUATION_CHANGED CarVolumeGroupInfo.isAttenuated()
EVENT_TYPE_ZONE_CONFIGURATION_CHANGED CarVolumeGroupInfo.getAudioAttributes()

Ekstra Bilgiler

CarVolumeGroup neden değiştiğine ilişkin ek bilgi sağlar. Uygulamalar, kullanıcıyı harekete geçmesi veya bilgilendirmesi konusunda uyarmak amacıyla ek bağlam sağlamak için bu bilgileri kullanabilir. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_THERMAL , termal aşırı yük nedeniyle aktif geçici zayıflamayı belirtir. Uygulama, ses seviyesini artırmaya çalışırsa kullanıcıyı bilgilendirebilir.

ExtraInfos için herhangi bir işlem uygulamıyoruz. ExtraInfos göre süreci belirlemek sizin takdirinize bırakılmıştır. Örneğin, EXTRA_INFO_TRANSIENT_ATTENUATION_DUCKED nedeniyle zayıflama etkinse, kullanıcının ses düzeyini değiştirmesini önlemek için başlangıçta ses çubuğu kullanıcı arayüzünü soluklaştırmayı da seçebilirsiniz. Diğerleri, eğilmenin aktif olduğunu gösteren bir tost göstermeyi ve kullanıcının ses seviyesini değiştirmesine izin vermeyi tercih edebilir.

Araç ses çerçevesi, önerilen ExtraInfos sağlamak için AudioControl HAL IAudioGainCallback bağlıdır. Daha fazla bilgi edinmek için bkz. Ses Kazanımını Geri Arama .

CarVolumeGroupEvent araç ses sistemi çerçevesinin gelecekteki ihtiyaçlarını karşılayacak şekilde ölçeklenir. Yeni özellikleri yalnızca CarVolumeGroupEvent aracılığıyla desteklemeyi amaçlıyoruz . Uygulama geliştiricilerinin grup ses düzeyini yönetmek ve değişiklikleri sessize almak için CarVolumeGroupEvent kullanmasını önemle tavsiye ederiz.

Araç hacmi grubu etkinliği geri araması

Android 14, ayrıcalıklı ve platform uygulamalarının CarVolumeGroupEvents kaydolması ve bildirim alması için yeni bir geri arama sağlar.

  • Geri aramaya kaydolmak için CarAudioManager#registerCarVolumeGroupEventCallback() işlevini kullanın

  • Geri aramanın kaydını silmek için CarAudioManager#unregisterCarVolumeGroupEventCallback() işlevini kullanın.

Bir uygulama yeni CarVolumeGroupEventCallback ve eski CarVolumeCallback kaydolursa CarVolumeGroupEventCallbacks etkinliğine öncelik verilir. Araç ses yığını artık CarVolumeCallback tetiklemiyor. Bu, aynı etkinlik için aynı uygulamaya yönelik yinelenen tetikleyicileri önler.

Grup ses düzeyini yönetmek ve değişiklikleri sessize almak için CarVolumeGroupEventCallback kullanmanızı önemle tavsiye ederiz.

Ses kazancı geri araması

Android 13'ten bu yana AudioControl HAL, araç ses sistemindeki değişiklikler nedeniyle ses seviyesi güncellemelerini yönetmek için eşzamansız bir geri aramayı tetikleyebilir.

HAL API'si

Ses Kontrolü @2.0 AIDL

AudioControl AIDL HAL'in 2.0 Sürümü aşağıdaki API'yi ekler:

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

AudioControl HAL geri çağrısı, nedenlerin listesini ve aşağıdakilerden oluşan ilgili AudioGainConfigInfo içerir:

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

Nedenleri genel olarak şu şekilde sınıflandırılabilir:

  • Kısıtlama nedenleri. Ses seviyesinde ve sessiz 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 itibaren desteklenen kısıtlama türleri şunlardır:

  • Sesini kapatmak
  • Engelleme
  • Sınırlama
  • zayıflama
Aktif kısıtlama Kullanıcı tarafından tetiklenen ses seviyesi değişikliği Kullanıcı tarafından tetiklenen sessize alma geçişi
Sesini kapatmak ❌ (sesi aç)

✔ (sessiz)
Engelleme
Sınırlama ❌ (sınır aşımı)

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

Kısıtlamalar arasındaki öncelik Sessiz > Engelleme > Sınırlama > Zayıflatma şeklindedir.

Kısıtlamaları sessize alma

Sessize alma kısıtlamaları şunlardır:

  • Reasons.TCU_MUTE
  • Reasons.REMOTE_MUTE

Araç ses sistemi çerçevesi dahili olarak şu iki sessiz durumunu korur:

  • Kullanıcıyı sessize alın. Kullanıcının isteğine göre CarAudioManager veya önemli olaylar aracılığıyla değiştirildi.

  • HAL sessiz. AudioGain geri araması yoluyla alınan sessize alma kısıtlamalarına göre değiştirildi.

Ayarlar uygulaması gibi dinleyiciler için, ses grubu genel sessize alma ( CarVolumeGroupInfo.isMuted() ) durumu, yukarıdaki sessize alma seçeneklerinden herhangi birinin etkin olup olmadığına bağlı olacaktır.

HAL sessize alma etkinleştirildiğinde, gelen tüm ses seviyesi değişikliği ve grup sesini açma istekleri, kısıtlama süresi boyunca dikkate alınmaz.

Etkileşim durumu: HAL sessize alma etkin ve Kullanıcı Sessize alma geçişi için istekte bulunuyor

HAL sessize alma etkinleştirildiğinde ve Kullanıcı sessize alma devre dışı bırakıldığında:

  • Birim grubu genel sessize alma durumu true olarak değiştirildi.
  • Kullanıcının sessizin etkinleştirilmesine yönelik istekleri işleme alınacaktır.
    • Sebep: Kullanıcı gizliliğini korumak için kullanıcının sessize alma istekleri her zaman yerine getirilmelidir.

HAL sessize alma etkinleştirildiğinde ve Kullanıcı sessize alma etkinleştirildiğinde:

  • Birim grubu genel sessize alma durumu true olarak değiştirildi.

  • Kullanıcının sessize almayı devre dışı bırakma istekleri NOT . Önbelleğe Alınmış Kullanıcıyı sessize alma durumu etkin kalır.

    • Sebep: Kullanıcının sesini açma istekleri yalnızca etkin kısıtlama olmadığında yerine getirilecektir.

    • Sebep: Önbelleğe alınan Kullanıcının sesini kapatmak, istenmeyen ses patlamasına neden olabilir ve kullanıcı güvenliğini tehlikeye atabilir. Bu, özellikle kullanıcıların ses seviyesi algısına ilişkin farkındalığını azaltan, kontak döngüleri boyunca sessiz durumu etkinleştirildiğinde geçerlidir.

Etkileşim durumu: HAL Sessize alma etkin ve devre dışı, Kullanıcı sessize almada ise hiçbir değişiklik yok

HAL sessize alma işlemi, birim grubunun genel sessize alma durumunu değiştirecektir. Ancak kullanıcının sessiz durumunu doğrudan güncellemez. Kullanıcı sessize alma devre dışı bırakıldığında ve HAL sessize almanın etkinleştirilmesi için geri çağrı alındığında:

  • Birim grubu genel sessize alma durumu true olarak değiştirildi.
  • HAL sessize alma etkinken Kullanıcının ses düzeyini değiştirme istekleri NOT .

    • Sebep: Sessiz etkinken kullanıcı sesi algılayamıyor. Ses seviyesi değişikliğine izin verilmesi ses patlamasına neden olabilir ve kullanıcı güvenliğini tehlikeye atabilir.

    • Sebep: OEM tarafından beklenen davranış buysa, birim uygulamaları geri aramalar için kaydolabilir ve kullanıcı müdahalesi olmadan otomatik olarak sessizin açılmasını (CarAudioManager.setVolumeGroupMute(...,/* mute=*/ true,..)) tetikleyebilir.

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

  • Birim grubunun sessiz durumu false olarak değiştirildi.

    Sebep: Sessiz durumunu yapışkan hale getirmek ve Kullanıcıdan sessizliği açmasını istemek, sessiz durumları sık sık değiştiğinde Kullanıcının gereksiz şekilde kesintiye uğramasına neden olabilir.

  • Kullanıcıların ses düzeyini değiştirmeye yönelik talepleri normal şekilde işlenecektir.

Engelleme

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

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

Engelleme kısıtlamaları etkin olduğunda kullanıcılardan aşağıdaki istekler alınır:

  • Değişiklik hacmi işlenmiyor .
  • Sessize alma işlemi 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 aşağıdaki istekler alınır:

  • Sesi değiştir:

    • Sınırlama dahilinde işlenir
    • Sınırlamanın üstünde işlem yapılmaz
  • Sessize alma işlemi işlenir.

zayıflama

Zayıflatma kısıtlamaları şunlardır:

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

Zayıflatma kısıtlamaları etkin olduğunda kullanıcılardan aşağıdaki istekler alınır:

  • Değişiklik hacmi işlenir. Yeni mevcut ses seviyesi, zayıflatılmış ses seviyesine (eski ses seviyesi yerine) ayarlanır. Gelecekteki hacim değişiklikleri bu seviyeden yapılır.

  • Sessize alma işlemi işlendi.

Dizine güncelleme

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

Bu nedenle AudioControl HAL, ses grubu geçerli dizinini belirtilen dizine güncelleyebilir. Bu öncelikle Araç ses sistemi çerçevesinden gelen ses seviyesi değişikliği talebi için ses sisteminden geri bildirim olarak kullanılır. Dizin güncellemesi aynı zamanda dizini senkronize etmek için Apps ile CarVolumeGroupEvent geri çağrısı olarak da iletilir.

Örnekler

Kullanım Örneği: Kullanıcı birim indeksini 30 olarak günceller

  • Kullanıcı, ses endeksini 30 olarak değiştirmek için Volume uygulamasını kullanır.

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

  • Audio HAL satıcı uygulamaları yeni ses seviyesi kazancını alır ve ses sistemini (harici amplifikatör gibi) günceller.

  • Ses sistemi, ses seviyesinin yalnızca indeks 15'e güncellendiğini (Android tarafından bilinmeyen nedenlerden dolayı) yanıt verir.

  • AudioControl HAL tetikleyicilerinin satıcı uygulamaları:

    IAudioGainCallback.onAudioDeviceGainsChanged(EXTERNAL_AMP_VOL_FEEDBACK, {...,  15 /* New index */})
    
  • Araç ses hizmeti, kalıcılık için kullanılan geri aramadan ve ses düzeyi uygulamasına yapılan geri aramalardan yeni dizini kullanır. Kullanıcının talep ettiği dizin 30'dur. Ancak ses sisteminin eşzamansız geri bildirimi, dizini 15'e günceller.

Kullanım örneği: Askıya alma durumundan çıktıktan sonra ilk ses oynatımı

  • Askıya almadan önceki hacim endeksi 95 gibi yüksek bir seviyeye ayarlanmıştır (aralık: [0-99]).

  • Android askıya alma moduna girer.

  • Android var olduğunda askıya alın (örneğin devam ettirin):

    • Satıcı Audio HAL/AudioControl HAL ses sistemine yerel olarak 30'luk bir güvenli dizin uygular.

    • Satıcı AudioControl HAL ayrıca güvenli dizin için geri aramayı da tetikler:

    IAudioGainCallback.onAudioDeviceGainsChanged(SUSPEND_EXIT_VOL_LIMITATION, {...,  30 /* safe index */})
    
  • Araç ses hizmeti, yeni dizini kalıcılık için kullanılan geri aramadan ve kendi geri aramalarından dizini senkronize eden ses uygulamasına kadar tüketir. Askıya almadan önce ses düzeyi endeksi 95'tir. Ancak devam ettirildikten sonra bu dizin, AudioControl HAL uygulayıcısı tarafından güvenli ses düzeyi 30'a ayarlanır.

Dinamik birim yapılandırması

Bu özellik için aşağıdaki birincil kullanım durumlarını göz önünde bulunduruyoruz:

  1. Araç hat sonu (EOL) konfigürasyonu.

    • Otomobil üreticileri EOL'deki ses düzeyi yapılandırmalarını araç ses sistemi kurulumuna göre güncellemeyi tercih ediyor. Genellikle bu, Android SW görüntüsünü güncellemeden yapılan bir yan yüklemedir.

    • Otomobil üreticilerinin servis planı sırasında birim yapılandırmasını güncellemesi gerekebilir.

  2. Çalışma zamanı yapılandırması. Otomotiv ses sistemleri, harici amplifikatör yapılandırmalarını destekler ve bu ECU'lar, önyükleme sırasında sorgulanan ses aralığı yapılandırmalarını barındırabilir.

  3. İsteğe bağlı yapılandırma. Kullanıcıların belirli bir süre için gelişmiş sinyal işlemeye abone oldukları talebe dayalı ses özelliklerine yönelik artan ihtiyacı desteklemek için sunulmaktadır. Yeni ses düzeyi aralığı yapılandırmaları abonelik süresi boyunca geçerlidir.

Tasarım

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

  • Keşif. Satıcının AudioControl HAL uygulaması, satıcının sahip olduğu özel bir IPC mekanizması aracılığıyla yeni ses düzeyi aralığı güncellemelerini keşfeder.

    Keşfedildikten sonra AudioControl::IModuleChangeCallback aracılığıyla bir geri arama oluşturulur.

  • Güncelleme. Araç ses yığını, ses seviyesi grubu durumlarını yeni ses seviyesi aralıklarıyla günceller.

    Ses aralığı güncellemesinden sonra aynı ses düzeyini korumak için çaba gösterilmektedir. Ancak endeksin sınırların dışına çıkması durumunda mevcut hacim endeksi güvenli bir değere ayarlanır. Örneğin, geri arama sırasında satıcı tarafından sağlanan varsayılan düzey.

  • Geri çağırmak.

    • Ses grubu aralığı güncellemelerini yayınladığınızda araç ses yığını, CarVolumeGroupEventCallback aracılığıyla kaydedilen uygulamalara bir geri aramayı tetikler.

    • CarVolumeGroupEvent güncellenmiş CarVolumeGroupInfo , Etkinlik türü (ne değişti) ve Ekstra bilgi (neden değişti) bilgilerini taşır.

resim

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

HAL API'si

Ses Kontrolü @ 3.0 AIDL

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

API'si
IAudioControl#setModuleChangeGeri Arama AudioControl HAL ile IModuleChangeCallback örneğini ayarlar.
IAudioControl#clearModuleChangeCallback AudioControl HAL ile önceden ayarlanan IModuleChangeCallback örneğini temizler.
IModuleChangeCallback#onAudioPortsChanged AudioPort'lardaki değişiklikleri bildirmek için geri arama

Sekans

Dinamik hacim konfigürasyonunun sıra diyagramı aşağıda gösterilmektedir.

resim

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

Anahtar yönler

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

  • Geri aramanın bir parçası olarak sağlanan AudioPort'lar Otomotiv BUS tanımıyla eşleşmelidir :

    • Cihaz bağlantı noktası. IN_DEVICE , OUT_DEVICE
    • Bağlantı. BUS
    • Adres. Ses HAL tanımında tanımlanmıştır
    • Kazanç modu. JOINT
  • Satıcılar, Ses HAL politikasında ses aralığı tanımlarının bir üst kümesini tanımlamalı ve bunu araç çeşitlerine göre özelleştirmek için geri aramayı kullanmalıdır. Daha fazla bilgi için IModuleChangeCallbac AIDL tanımına bakın.

  • Birden fazla ses BUS'u aynı ses düzeyi grubuna ait olduğunda, her birinin aynı ses düzeyi aralığı tanımlarına sahip olması gerekir . Bunun yapılmaması, araç ses sistemi çerçevesinin yeni ses seviyesi aralığı tanımını reddetmesine neden olur.