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.
Önerilen eğilme davranışı
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()
vegetGroupMaxVolume()
. - 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ınGeri 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:
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.
Ç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.
İ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.
Ş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.
Ş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
- Cihaz bağlantı noktası.
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.