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.
Önerilen kısma davranışı
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()
vegetGroupMaxVolume()
. - 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
listesiEventTypes
(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.
Dinamik birim yapılandırması
Bu özellik için aşağıdaki temel kullanım alanlarını göz önünde bulundururuz:
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ı.
Ç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.
İ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).
Ş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.
Ş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
- Cihaz bağlantı noktası.
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.