AAOS, CarAudioService
içinde kendi ses düzeyi yönetimine sahiptir. Düzeltilmiş
bir donanım tarafından HAL'nin altında uygulanması beklenen birim sayısı
bir amplifikatör olabilir. Ayrıca çıkış cihazlarını ses grupları halinde düzenler
aynı kazanımları ses düzeyi grubuyla ilişkili tüm cihazlara da uygulayın.
Sabit birimleri kullanma
AAOS uygulamaları, ses düzeyini
farklı olabilir. Yan etkilerden kaçınmak için config_useFixedVolume
işaretini ayarlayın
"true" (doğru) olarak değiştirin (gerektiğinde yer paylaşımlı olarak):
<resources> <!-- Car uses hardware amplifier for volume. --> <bool name="config_useFixedVolume">true</bool> </resources>
config_useFixedVolume
işareti ayarlanmadığında (veya yanlış değerine ayarlandığında)
uygulamalar AudioManager.setStreamVolume()
işlevini çağırabilir ve
akış türüne göre ayrılmış ses seviyesidir. Bu işlem,
diğer uygulamalar üzerindeki potansiyel etkilerini ve hacmin azalmasının
Bu nedenle, yazılım karıştırıcının sinyalde daha az belirgin bit
alınan ses seviyesidir.
Birim grupları
Ses düzeyi grupları, bir ses bölgesindeki cihaz koleksiyonunun ses düzeylerini yönetir. Her ses grubu için ses düzeyi bağımsız olarak kontrol edilebilir. Bunun sonucunda, kazançlar, araç amplifikatörü tarafından uygulanacak, ilişkili cihazlarda yapılandırılır. Birim ayarları, kullanıcı için kalıcı olur ve kullanıcı oturum açtığında yüklenir.
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>
Örnek car_audio_configuration.xml
uygulaması.
Her ses grubu grubunda, ilişkili adreslere sahip bir veya daha fazla çıkış cihazı bulunmalıdır.
Bu adresler, şurada tanımlanan çıkış cihazlarına karşılık gelmelidir:
audio_policy_configuration.xml
Birim grubu kazançlarını yapılandırma
Her hacim grubunun minimum, maksimum ve varsayılan kazanç değerlerinin yanı sıra
boyutudur. Bunlar,
İlişkilendirilmiş cihazlar için audio_policy_configuration.xml
ses seviyesi grubuyla.
<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 ses grubu grubu, ilgili cihazları bulun ve grubu aşağıdaki gibi yapılandırın:
- 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 yapılandırılma şekli nedeniyle, ses grubu, ses düzeyi grubuyla ilişkilendirilmiş bir cihaz için desteklenen aralığın dışındadır. Bu durumda, o cihaz için kazanç, cihazın minimum veya maksimum değerine ayarlanır. hacim grubu değerinin aralığın altında mı yoksa üstünde mi olduğuna bağlı olarak değer kazanç elde eder.
Birim grubu tanımlayıcıları
Birim grupları, çalışma zamanında XML dosyasındaki tanım sıralarına göre tanımlanır.
Kimlikler, bir ses bölgesinde 0 ile N-1 arasında değişir. N,
o bölgede çalışır. Bu şekilde, birim grubu kimlikleri alt bölgeler arasında benzersiz olmaz. Bu tanımlayıcılar
birim gruplarıyla ilişkilendirilmiş CarAudioManager
API için kullanılır. Tüm API'ler
zoneId
olmadan bir groupId
alan öğeler için varsayılan olarak
birincil ses bölgesi.
Çoklu alt bölge hacim yönetimi
Her ses bölgesinin bir veya daha fazla ses düzeyi grubuna ve her ses düzeyi grubuna sahip olması beklenir
yalnızca tek bir ses bölgesiyle ilişkilendirilir. Bu ilişkinin tanımı,
car_audio_configuration.xml
Şurada sağlanan örneği inceleyin:
Yukarıda birim grupları 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 ekranda oturum açtığında önce alt bölgeyle ilişkilendirilen alt bölgeyle ilişkilendirilen bir alt bölgede ikincil ses bölgesi varsa birinci alt bölgede yüklenen ve devam eden ses düzeyleri ikincil alt bölgeye göre farklı olmalıdır.
Hacimsel önemli etkinlikleri işleme
Android ses seviyesi kontrolü için çeşitli tuş kodları tanımlar. Örneğin:
KEYCODE_VOLUME_UP
, KEYCODE_VOLUME_DOWN
ve
KEYCODE_VOLUME_MUTE
. Varsayılan olarak Android ses seviyesi tuşunu yönlendirir
nasıl aktarabileceğinizi açıklayacağım. Otomotiv uygulamaları, bu önemli etkinlikleri
CarAudioService
, daha sonra şu numarayı arayabilir: setGroupVolume
veya
setMasterMute
.
Bu davranışı zorunlu kılmak için config_handleVolumeKeysInWindowManager
ayarını yapın
true
olarak işaretle:
<resources> <bool name="config_handleVolumeKeysInWindowManager">true</bool> </resources>
Hacim önemli etkinlikleri için şu anda bunların hangi alt bölge olduğunu ayırt etmek mümkün değildir
birincil ses bölgesiyle ilişkili olduğu varsayılır.
Ses düzeyi önemli etkinliği alındığında CarAudioService
hangi hacmi belirler?
grubu düzenleyerek etkin oynatıcılar için ses bağlamlarını getirip
en yüksek önceliğe sahip çıkış cihazını içeren ses düzeyi grubu
ses bağlamı. Önceliklendirme, şurada tanımlanan sabit bir sıralamaya göre belirlenir:
CarVolume.AUDIO_CONTEXT_VOLUME_PRIORITY
Kararma ve dengeleme
AudioControl HAL'nin her iki sürümünde de renk solması ve denge ayarı için API'ler bulunur.
araç. CarAudioManager'da, değerleri ileten ilgili sistem API'leri bulunur
AudioControl HAL'sine indirilir. Bu API'ler için
android.car.permission.CAR_CONTROL_AUDIO_VOLUME
AudioControl API'leri şunlardır:
setBalanceTowardRight(float value)
Hoparlörün ses seviyesini şuraya kaydırır: arabanın sağ (+) veya sol (-) tarafına basın. 0,0 ortalanmış, +1.0 tamamen sağlanmış, -1, 0 tamamen soldur ve -1 - 1 aralığının dışında kalan bir değer hatadır.setFadeTowardFront(float value)
- Hoparlörün ses seviyesini doğru kaydırır ön (+) veya arka (-) simgesine dokunun. 0, 0 ortalanmış, +1.0 tamamen ileri doğrudur. -1, 0 tamamen geridedir ve -1 - 1 aralığının dışındaki bir değer hatadır.
Bu değerlerin nasıl uygulanacağına ve ürün kalitesinin nasıl gösterilir. Yalnızca medyaya veya genel tüm Android seslerini duyabilirsiniz.
Android 11'de, çıkış cihazlarına ses efektleri uygulama desteği de sunuldu. Bu özellikte, ses efektleriyle solma ve dengelemeyi yönetmeniz de mümkün. .
Sesi kısma
Sesi kısma, araç bir akışın kazancını azalttığında gerçekleşir Böylece aynı anda oynatılan başka bir yayın daha net duyulabilir. AAOS'de, potansiyel olarak çok sayıda ses olduğundan, sesi kısma özelliği HAL'ye bırakılır Android dışındaki cihazlar da dahildir. Android 11'de temel bilgiler karar vermek için HAL'ye ulaşabilen, iki çıkış cihazının da etkin akış.
Ne zaman kapatılmalı?
Sıralamanın HAL tarafından nasıl ele alınacağını belirlemek bireysel OEM'nin sorumluluğu olsa da önerdiğimiz bazı genel yönergelerdir. Android'de oynatılan birden fazla akış: Genellikle iki uygulama/hizmet aynı anda ses odağına sahip olduğunda ortaya çıkar. Demek ki, Etkileşim matrisi adlı makaleyi inceleyin Android'in ne zaman aynı anda odaklanma sağlayabileceğini ve böylece, aynı anda iki ayrı farklı canlı yayınları aynı anda oynatabilirsiniz.
Android ile karıştırılan tüm akışların bunu herhangi bir kazançtan önce yapacağını unutmayın hakkında daha fazla bilgi edineceksiniz. Bu nedenle, Diğeri, HAL'nin daha önce azaltma uygulayabilmesi için ayrı çıkış cihazlarına yönlendirilmelidir. bir araya getirmektir.
Önerilen kısma davranışı
Sesi kısmanızı önerdiğimiz olası eş zamanlı etkileşimler aşağıda verilmiştir uygulanacak:
EMERGENCY
SAFETY
dışındaki her şeyi kısmak veya sesini kapatmak için sürücünün sesi duyduğundan emin olunSAFETY
EMERGENCY
dışındaki her şeyi kısmak için sürücü sesi duyarNAVIGATION
SAFETY
ve dışındaki her şeyi dahil etEMERGENCY
CALL
SAFETY
hariç her şeyi kapat,EMERGENCY
veNAVIGATION
VOICE
ÖrdekCALL_RING
- Etkin
VEHICLE_SOUNDS
ürünün önemini belirlemek OEM'lerin görevidir ve sürücünün bunları duyması için diğer sesleri kısmak isteyip istemediklerine karar verin. MUSIC
veANNOUNCEMENT
her şeyin altında durmalıdır. Bunun ana istisnası, şu andaSYSTEM_SOUND
.
Beğenmeyi tercih ederken dikkat edilmesi gereken diğer noktalar
Navigasyon veya asistan gibi bazı uygulamalar/hizmetler, görevleri tamamlamak için birden fazla oynatıcı kullanabilir en iyi uygulamaları görelim. OEM'ler, akış verilerinin ne zaman durduğuna bağlı olarak içeriğin çok agresif bir şekilde ayrılmasından kaçınmalıdır kullanıcının kısa bir süre içinde medyanın geri gitmediğinden emin olmak için bu çıkış cihazları üzerinden navigasyon sırasındaki bir sonraki oynatma sırasında küçülmeden önce en yüksek ses seviyesine ayarlanır veya Asistan uygulaması başlar.
Birden fazla ses kademesi bulunan ve yeterince iyi izolasyona sahip araçlar için sesi kısmak yerine arabanın farklı alanlarına yönlendirmesini sağlar. Örneğin, gezinme müzik devam ederken talimatlar sürücünün baş desteği hoparlörlerine yönlendirilebilir kabinde normal ses seviyesinde oynatıyoruz.
Güvenlikle ilgili önemli sesler
Android 11 kullanıma sunulduktan sonra
HAL ses odağı API'leri
kritik önem taşıyan güvenlik seslerine öncelik verilmesini sağlamak için hâlâ HAL’ye bağlıdır.
diğerleri. HAL, USAGE_EMERGENCY
için ses odağını korusa bile
Android'deki uygulama ve hizmetlerin ses çalmayacağını garanti ederiz. Bu, HAL’ye bağlıdır
Güvenlik açısından kritik sesler nedeniyle Android'den gelen akışların
karıştırılması veya sesinin kapatılması
oynandı.
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 (ayrıca: (Birim gruplarını yapılandırma bölümünde açıklandığı gibi) yer paylaşımlı olarak ekleyin. Bu ayırma, bir engelin Gelecekte birim gruplarının yapılandırması değişirse değişiklik yapılması gerekir.
Araba Ayarları kullanıcı arayüzünde packages/apps/Car/Settings/res/xml/car_volume_items.xml
dosyası, tanımlı her bir öğeyle ilişkili kullanıcı arayüzü öğeleri (başlık ve simge kaynakları) içerir
AudioAttributes.USAGE
. Bu dosya, dosyanın makul bir şekilde oluşturulmasını
ilkiyle ilişkilendirilen kaynakları kullanarak tanımlanan VolumeGroups
her VolumeGroup'ta yer alan tanınan kullanımları kabul eder.
Örneğin, aşağıdaki örnekte bir VolumeGroup hem
voice_communication
ve voice_communication_signalling
. Varsayılan
araba ayarları kullanıcı arayüzünün uygulanması, ilişkili kaynakları kullanarak VolumeGroup'u oluşturur
Dosyadaki ilk öğe olduğu için voice_communication
.
<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ü, aşağıdaki VolumeGroup tabanlı CarAudioManager API'lerini kullanır:
- Kaç 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. - Ses seviyesi değişiklikleriyle ilgili bildirim almak için
registerVolumeChangeObserver()
.