Android 10'da car_audio_configuration.xml
, car_volumes_groups.xml
ve IAudioControl.getBusForContext
'nin yerini aldı. Genellikle tedarikçi bölümünde bulunan ses politikası dosyaları, kartın ses donanımı yapılandırmasını temsil eder. car_audio_configuration.xml
içinde referans verilen tüm cihazlar audio_policy_configuration.xml
içinde tanımlanmalıdır.
Şekil 1'de, araba ses hizmetinin cihazda ses ayarlamak için araba ses yapılandırma dosyasını okuduğu araba ses hizmeti mimarisine genel bir bakış gösterilmektedir.
1. şekil. Araba ses sistemi mimarisine genel bakış.
Araba ses sistemi yapılandırma dosyasını cihazda vendor/etc/
veya system/etc/
konumuna yerleştirin. Araba ses sistemi hizmeti, dosyayı ararken ilk olarak vendor/etc/
konumunda arar. Araba ses hizmetleri, ses yapılandırmasını belirlemek için car_audio_configuration.xml
değerini okur.
Araç ses bölgeleri:
- Her ses bölgesinde benzersiz bir ses bölgesi kimliği bulunur.
- Her ses bölgesi, bir yolcu bölgesiyle eşlenebilir.
Her bölgedeki ses işlemleri birbirinden bağımsızdır:
- Ses odağı
- Ses yönlendirme
- Sesi kısma
Araç ses seviyesi grupları:
Ses grubu içeren tüm ses cihazları, aynı kazanç değişiklikleriyle birlikte kontrol edilir. Bir gruptaki tüm cihazların ses kazancı yapılandırması aynı olmalıdır.
Ses bağlamının ses cihazlarıyla eşlenmesi. Bunu, ses kullanımlarını bir çıkış cihazıyla eşleyen bir ses miksi oluşturmak için kullanın.
Tüm ses bağlamları bir bölge içinde gösterilmelidir. Bu, tüm ses özelliği kullanımları için ses yönlendirmenin doğru şekilde ayarlanmasına olanak tanır.
Ses bağlamları
AAOS sesinin yapılandırılmasını kolaylaştırmak için benzer kullanımlar CarAudioContexts
altında gruplandırılmıştır. Bu ses bağlamları, yönlendirme, ses seviyesi grupları, ses odağı ve ses kısma yönetimini tanımlamak için CarAudioService
genelinde kullanılır. AAOS'taki statik ses bağlamları bu tabloda listelenmiştir.
Bu tabloda, ses bağlamları ile kullanımları arasındaki eşleme açıklanmaktadır. Yeni sistem kullanımı için satırlar vurgulanır.
CarAudioContext | Associated AttributeUsages |
---|---|
MUSIC |
UNKNOWN GAME MEDIA |
NAVIGATION |
ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND |
ASSISTANT |
CALL_RING |
NOTIFICATION_RINGTONE |
CALL |
VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM |
ALARM |
NOTIFICATION |
NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND |
ASSISTANCE_SONIFICATION |
EMERGENCY |
EMERGENCY |
SAFETY |
SAFETY |
VEHICLE_STATUS |
VEHICLE_STATUS |
ANNOUNCEMENT |
ANNOUNCEMENT |
AAOS yönlendirmesini etkinleştirme
AAOS tabanlı yönlendirmeyi kullanmak için audioUseDynamicRouting
işaretini true
olarak ayarlamanız gerekir:
<resources>
<bool name="audioUseDynamicRouting">true</bool>
</resources>
false
devre dışı bırakıldığında yönlendirme ve CarAudioService
'nin büyük bir kısmı devre dışı bırakılır ve AAOS, AudioService
'nin varsayılan davranışına geri döner.
Yapılandırılabilir ses politikası motoru
Android 14'te araç ses yönetimi özelliklerini daha da genişletmek için AAOS, Yapılandırılabilir Ses Politikası Motoru (CAP) aracılığıyla ses yönetimi kullanımını kullanıma sundu. Bu sayede, ses yönlendirme ve ses seviyesi yönetimi üzerinde daha fazla esneklik elde edebilir, ayrıca aşağıdakiler için çok yönlü tanımlar yapabilirsiniz:
Yapılandırılabilir ses politikası (CAP) motorunu useCoreAudioVolume
ve useCoreAudioRouting
kullanarak etkinleştirebilirsiniz. Ayrıntılar için Yapılandırılabilir ses politikası motoru başlıklı makaleyi inceleyin.
Birincil bölge
Varsayılan olarak tüm sesler birincil bölgeye yönlendirilir. Yalnızca bir birincil bölge vardır ve bu bölge, yapılandırmada isPrimary="true"
özelliğiyle belirtilir. Birincil bölgeye otomatik olarak Audiomanager.PRIMARY_AUDIO_ZONE
atanır.
Örnek yapılandırma (2. sürüm)
Örneğin, bir araçta birincil bölge ve arka koltuk eğlence sistemi olmak üzere iki bölge olabilir. Bu senaryoda, olası bir car_audio_configuration.xml
sürüm 2'yi aşağıdaki gibi tasarlayabilirsiniz:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group>
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
<group>
<device address="bus4_call_out">
<context context="call"/>
</device>
</group>
<group>
<device address="bus5_alarm_out">
<context context="alarm"/>
</device>
</group>
<group>
<device address="bus7_system_sound_out">
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
</device>
</group>
</volumeGroups>
</zone>
<zone name="rear seat zone" audioZoneId="1">
<volumeGroups>
<group>
<device address="bus100_rear_seat">
<context context="music"/>
<context context="navigation"/>
<context context="voice_command"/>
<context context="call_ring"/>
<context context="call"/>
<context context="alarm"/>
<context context="notification"/>
<context context="system_sound"/>
<context context="emergency"/>
<context context="safety"/>
<context context="vehicle_status"/>
<context context="announcement"/>
</device>
</group>
</volumeGroups>
</zones>
</audioZoneConfiguration>
Bu örnekte, birincil bölge bazı ses bağlamlarını farklı cihazlara ayırır. Bu sayede HAL, farklı son işlem efektleri uygulayabilir ve aracın donanımını kullanarak her cihazdaki çıkışı karıştırabilir.
Cihazlar; medya, navigasyon, aramalar, alarmlar ve sistem sesleri olmak üzere çeşitli ses gruplarına ayrılmıştır. Sistem useFixedVolume
olarak yapılandırılmışsa her grubun ses seviyeleri, bu cihazların çıkışına uygulanmak üzere HAL'ye iletilir.
Birincil bölge için sistem seslerinin diğer seslerden ayrı olmasını öneririz. Bu sayede araç seslerine daha yüksek öncelik verilir. Araba ses hizmeti, odaklanma ve ses kısma yönetimi açısından araç sesleri için bu ayrımları zaten yapıyor. Örneğin, acil durum sesi odaklanma isteğinin önceliği diğer odaklanma isteklerinden daha yüksektir.
İkincil bölge örneğinde, tüm ses bağlamları tek bir cihaza ve ses grubuna yönlendirilir.
CAP motoru için birim grubu tanımı
Yapılandırılabilir ses politikası motoru bölümünde belirtildiği gibi, CAP motoru aracılığıyla ses yönetimi kullanmak için ses grubu tanımı da bir ad içermelidir:
<group name="media">
<device address="bus0_media_out">
<context context="music"/>
<context context="announcement"/>
</device>
<device address="bus3_call_ring_out">
<context context="call_ring"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
<group name="navigation">
<device address="bus1_navigation_out">
<context context="navigation"/>
</device>
<device address="bus2_voice_command_out">
<context context="voice_command"/>
</device>
</group>
Bu birim grubu adı, CAP motorunda tanımlanan birim adıyla eşleşmelidir. Ayrıca, useFixedVolume
parametresi de false
olarak ayarlanmalıdır. Ayrıntılar için Ses yapılandırması AAOS işaretleri başlıklı makaleyi inceleyin.
Yolcu bölgesi ses yapılandırması
Android 11'de car_audio_configuration.xml
ve occupantZoneId
olmak üzere iki yeni alan audioZoneId
kullanıma sunuldu. Ses bölgesi yönetimini kontrol etmek için audioZoneId
kullanabilirsiniz. Kullanıcı kimliğine göre yönlendirmeyi yapılandırmak için occupantZoneId
simgesini kullanabilirsiniz.
Ses yapılandırmasını yeniden gözden geçirip yeni alanları kullanarak işgal edilen bölge kimliği ve ses bölgesi kimliği eşlemesi yaparsanız ses grubu tanımları olmayan yeni yapılandırma aşağıdaki gibi ayarlanabilir:
<audioZoneConfiguration version="2.0">
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
...
</zone>
<zone name="rear seat zone" audioZoneId="1" occupantZoneId="1">
...
</zone>
</zones>
</audioZoneConfiguration>
Yapılandırmada, birincil bölge ile 0 numaralı bölge ve audioZoneId
1 ile occupantZoneId
1 arasında eşleme tanımlanır. Kullanıcı bölgesi ile ses bölgesi arasındaki tüm eşlemeler yapılandırılabilir. Ancak eşleme bire bir olmalıdır. İki yeni alanı tanımlayan kurallar şunlardır:
Birincil bölge için
audioZoneId
her zamanPRIMARY_AUDIO_ZONE
kimliğidir.isPrimary="true"
tanımlanmışsaaudioZoneId
gerekli değildir.audioZoneId
veoccupantZoneId
numaraları tekrarlanamaz.audioZoneId
veoccupantZoneId
yalnızca bire bir eşlemeye sahip olabilir.
Android 14'te araç ses yapılandırması
Android 14'te AAOS, OEM eklenti hizmetini kullanıma sundu. Bu hizmet, araç ses hizmeti tarafından denetlenen ses davranışını yönetmenize olanak tanır. Yeni eklenti hizmetlerinin yanı sıra, araç ses sistemi yapılandırma dosyasına aşağıdaki değişiklikler eklenir:
- OEM tarafından tanımlanan araç ses bağlamı
- Birincil olmayan bölge dinamik yapılandırmaları
OEM tarafından tanımlanan araç ses bağlamı
Android 14'te esnek bir ses yapılandırması etkinleştirmek için araç ses hizmeti, ses kullanımlarının tanımlanan statik ses bağlamlarından farklı şekilde gruplandırılmasına olanak tanır.
Bu OEM tanımlı bağlam, car_audio_configuration.xml
sürüm 3 dosyasında tanımlanabilir.
Bunun yerine, önceden tanımlanmış statik ses bağlamları kullanılır. OEM tarafından tanımlanan araç ses bağlamının genel biçimi daha sonra gösterilmektedir.
OEM bağlamlarının her biri için name
ve bağlama atanan ses özellikleri kullanım listesi gerekir. Önceki örnekte iki bağlam tanımlanmıştır:
<carAudioConfiguration version="3">
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
media
bağlamıAUDIO_USAGE_MEDIA
veAUDIO_USAGE_UNKNOWN
içeriyorgame
bağlamı yalnızcaAUDIO_USAGE_GAME
içeriyor
Bağlam, car_audio_configuration.xml
dosyasının en üstünde tanımlanmalıdır. OEM bağlamları tanımlandığında, araç ses yapılandırmasının geri kalanı eskisi gibi devam edebilir. Araba ses sistemi bağlamında aşağıdaki kurallar geçerlidir:
OEM bağlam tanımları isteğe bağlıdır. Bunun yerine statik ses bağlamı kullanılır.
Bağlam adlarını tekrarlamayın.
Ses özelliği kullanımını birden fazla bağlama atamayın.
Bağlamı oluşturmak için
AudioAttributes
içinde tanımlanan tüm ses kullanımları kullanılmalıdır.
Kesin olarak söylemek gerekirse, OEM ses bağlamı tanımı için ses kullanımının android.audio.policy.configuration.V7_0.AudioUsage
dize gösterimi kullanılmalıdır. Gelecekte, bir Android sürümünden diğerine geçiş sırasında hatayı azaltmak için daha yeni ses özelliği kullanımları en uygun bağlama atanacak.
OEM tarafından tanımlanan bağlam, OEM eklentisi ses hizmetini daha da genişletmek için kullanıma sunulmuş olsa da OEM eklentisi hizmeti olmadan da kullanılabilir. Ses davranışı, statik ses hizmetinin davranışına benzer:
Ses odağı etkileşimleri Ses özniteliği, ses odağı etkileşim matrisi tarafından belirlenen en iyi eşleşme davranışını belirlemek için kullanılır. Ayrıntılı bilgi için Ses odağı başlıklı makaleyi inceleyin.
Ses düzeyi kontrolü ses özelliği, en iyi eşleşmeyi belirlemek için kullanılır:
- OEM tarafından tanımlanan bağlama dayalı ses grubu.
- Yapılandırılan statik birim listesindeki öncelik.
Sesi kısma davranışı:
Mevcut ses odağı için ses özelliği kullanımı, araç ses yapılandırma dosyasında tanımlandığı şekilde çıkış ses cihazı bilgileriyle eşlemek için kullanılır.
Ses özelliği, statik ses azaltma matrisine göre ilgili statik bağlamı azaltma ile eşlemek için kullanılır.
CAP engine ürün stratejileri
Bir cihazın ses veya yönlendirme yönetimi için CAP motorunu kullanması gerektiğinde, OEM tarafından tanımlanan bağlamınız CAP motoru ürün stratejisi tanımıyla eşleşmelidir. Aksi takdirde, CAP motoru olmadan OEM tanımlı bağlamı kullanabilirsiniz.
Daha fazla bilgi edinmek için AAOS'teki CAP motoru ürün ürün stratejisine bakın.
Dinamik ses bölgeleri yapılandırmaları
Android 14'te, dinamik ses bölgeleri yapılandırmasına uyum sağlamak için ses bölgelerini tanımlamaya yönelik araç ses yapılandırma şeması da 3. sürüme güncellendi. Yeni şemada her bölge için bir yapılandırma ayarlanması gerekir.
<carAudioConfiguration version="3">
<!-- optional OEM context -->
<oemContexts>
<oemContext name="media">
<audioAttributes>
<usage value="AUDIO_USAGE_MEDIA" />
<usage value="AUDIO_USAGE_UNKNOWN"/>
</audioAttributes>
</oemContext>
<oemContext name="game">
<audioAttributes>
<usage value="AUDIO_USAGE_GAME" />
</audioAttributes>
</oemContext>
...
</oemContexts>
<zones>
<zone name="primary zone" isPrimary="true" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="primary zone config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus0_media_out">
<context context="media"/>
<context context="game"/>
<context context="announcement"/>
</device>
<device address="bus6_notification_out">
<context context="notification"/>
</device>
</group>
...
</zoneConfigs>
</zone
</zones>
Daha fazla bilgi için device/generic/car/emulator/audio/car_audio_configuration.xml
adresinde tanımlanan 3. sürüm dosyasına bakın. Android 14'ten itibaren birincil bölgede yalnızca bir (1) yapılandırma olabilir. Birincil olmayan bölgelerde birden fazla yapılandırma olabilir. Araba ses sistemi yapılandırmaları için aşağıdaki kurallar geçerlidir:
Birincil ses bölgesinde yalnızca bir yapılandırma olabilir.
Birincil olmayan ses bölgelerinde birden fazla yapılandırma olabilir.
Ad, her ses bölgesi ve ses bölgesi yapılandırması için benzersiz olmalıdır.
Ses bölgesinde ses yapılandırmaları farklı olabilir:
- Ses gruplarının kurulumu aynı olmak zorunda değildir.
- Ses bağlamı atamasının aynı olması gerekmez.
Ses çıkışı cihazı adları bölgeler veya yapılandırmalar arasında benzersiz olmalıdır. Bir cihaz adı, ses yapılandırmasında veya bölgelerde yalnızca bir kez görünmelidir.
Aynı ses grubu içinde yer alan ses cihazları aynı ses kazancı yapılandırmalarına sahip olmalıdır.
Her ses yapılandırması için tüm ses bağlamları (OEM veya statik) atanmalıdır.
İleriye dönük uyumluluk
car_audio_configuration.xml
'nın yeni sürümleri her güncellemede yeni özellikler sunsa da eski dosyaları AAOS'un yeni sürümlerinde kullanmaya devam edebilirsiniz. Android'in yeni sürümlerine güncelleme yapan OEM'ler car_audio_configuration.xml
dosyasını yeniden kullanabilir.
car_audio_configuration.xml
içinde yer alan yeni bilgilerin gerekli olduğu yeni bir özelliği kullanmak için sürümün güncellenmesi gerekir. Bilgilerin dosya sürümünde desteklenmediği bir dosyanın eski sürümünü kullanmaya çalışmak, araç hizmeti başlatıldığında IllegalStateException
hatası veriyor. İstisna mesajında, hangi bilgilerin kullanıldığı ve hangi minimum sürümün gerekli olduğuyla ilgili bilgiler yer alır.