Android 10'da car_audio_configuration.xml
, car_volumes_groups.xml
ve IAudioControl.getBusForContext
yerine kullanıldı. Genellikle tedarikçi firma 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.
Aşağıdaki Şekil 1'de, araç ses hizmetinin cihazın sesini ayarlamak için araç ses yapılandırması dosyasını okuduğu araç ses hizmeti mimarisine genel bir bakış gösterilmektedir.
Şekil 1. Araç ses mimarisine genel bakış.
Araba ses sistemi yapılandırma dosyasını cihazdaki vendor\etc\
veya system\etc\
konumuna yerleştirin. Araba ses sistemi hizmeti, dosyayı ilk olarak vendor\etc\
konumunda arar. Araç ses hizmetleri, ses yapılandırmasını belirlemek için car_audio_configuration.xml
değerini okur.
Araç ses sistemi bölgeleri:
- Her ses bölgesi benzersiz bir ses bölgesi kimliği içerir.
- Her ses bölgesi, bir kullanıcı 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 seviyesi 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ı ile ses cihazları eşleme. Ses kullanımlarını bir çıkış cihazıyla eşleyen bir ses karışımı oluşturmak için bunu kullanın.
Tüm ses bağlamları bir bölgede temsil edilmelidir. Bu, ses yönlendirmesinin tüm ses özelliği kullanımları için doğru şekilde ayarlanmasına olanak tanır.
Ses bağlamları
AAOS sesinin yapılandırmasını basitleştirmek için benzer kullanımlar CarAudioContexts
altında gruplandırılmıştır. Bu ses bağlamları, yönlendirme, ses seviyesi grupları, ses odak noktası ve ses azaltma yönetimini tanımlamak için CarAudioService
'te kullanılır. AAOS'teki statik ses bağlamları aşağıda listelenmiştir.
Bu tabloda, ses bağlamları ile kullanımlar arasındaki eşleme açıklanmaktadır. Vurgulanan satırlar, yeni bir sistem kullanımı için sağlanır.
CarAudioContext | İlişkili AttributeUsages |
---|---|
MÜZİK | UNKNOWN GAME |
NAVIGATION | ASSISTANCE_NAVIGATION_GUIDANCE |
VOICE_COMMAND | ASSISTANT |
CALL_RING | NOTIFICATION_RINGTONE |
ARA | VOICE_COMMUNICATION VOICE_COMMUNICATION_SIGNALING |
ALARM | ALARM |
BİLDİRİM | NOTIFICATION NOTIFICATION_* |
SYSTEM_SOUND | ASSISTANCE_SONIFICATION |
ACİL DURUM | EMERGENCY |
GÜVENLİK | SAFETY |
VEHICLE_STATUS | VEHICLE_STATUS |
DUYURU | 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
, yönlendirme ve CarAudioService
'un büyük bir kısmı devre dışı bırakıldığında AAOS, AudioService
'nin varsayılan davranışına geri döner.
Birincil alt bölge
Varsayılan olarak tüm sesler birincil bölgeye yönlendirilir. Yalnızca bir birincil bölge vardır ve yapılandırmada isPrimary="true"
özelliğiyle gösterilir. 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 bulunabilir. Bu senaryoda, olası bir car_audio_configuration.xml
2. sürümünü 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, aracın donanımını kullanarak farklı son işlem efektleri uygulayabilir ve 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 uygulanması için HAL'e iletilir.
Birincil bölgede, sistem seslerinin diğer seslerden ayrı olmasını öneririz. Bu sayede araç sesleri daha yüksek öncelikli olarak işlenir. Araç ses hizmeti, odaklanma ve ses azaltma yönetimi açısından araç sesleri için bu ayrımları zaten yapmaktadır. Örneğin, acil durum ses odak isteği diğer odak isteklerinden daha yüksek önceliğe sahiptir.
Basitleştirmek amacıyla, ikincil bölge örneğinde tüm ses bağlamları tek bir cihaza ve bir ses grubuna yönlendirilir.
Kullanıcı bölgesi ses yapılandırması
Android 11'de car_audio_configuration.xml
, audioZoneId
ve occupantZoneId
adlı iki yeni alan kullanıma sundu. Ses bölgesi yönetimini kontrol etmek için audioZoneId
simgesini kullanabilirsiniz. Yönlendirmeyi kullanıcı kimliğine göre yapılandırmak için occupantZoneId
kullanabilirsiniz.
Yukarıdaki ses yapılandırmasını tekrar ziyaret ederek, kullanıcı bölgesi kimliği ve ses bölgesi kimliği eşleme için yeni alanı kullanarak ses grubu tanımları içermeyen 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>
Yukarıdaki yapılandırma, birincil bölge ile kullanıcı bölgesi 0 ve audioZoneId
1 ile occupantZoneId
1 için bir eşleme tanımlar. Genel olarak, kullanıcı bölgesi ile ses bölgesi arasında herhangi bir eşleme yapılandırılabilir. Ancak eşleme bire bir olmalıdır. İki yeni alanı tanımlayan kurallar aşağıda listelenmiştir.
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
arasında yalnızca bire bir eşleme olabilir.
Android 14 araç ses sistemi yapılandırması
Android 14'te AAOS, araç ses hizmeti tarafından yönetilen ses davranışını daha etkin bir şekilde yönetmenize olanak tanıyan OEM eklenti hizmetini kullanıma sundu. Araç ses sistemi yapılandırma dosyasına yeni eklenti hizmetlerinin yanı sıra aşağıdaki değişiklikler de eklendi:
- 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 araba ses hizmeti, esnek bir ses yapılandırması sağlamak için ses kullanımlarının yukarıda tanımlanan statik ses bağlamlarından farklı şekilde gruplandırılmasına olanak tanır.
OEM tarafından tanımlanan bu bağlam, car_audio_configuration.xml
sürüm 3 dosyasında tanımlanabilir.
Bunun yerine, şu anda tanımlanmış statik ses bağlamları kullanılır. OEM tarafından tanımlanan araç ses bağlamının genel biçimi aşağıda gösterilmiştir.
OEM bağlamlarının her biri için, bağlama atanan ses özelliklerinin kullanımının listesi ile birlikte bir name
gerekir. Yukarıdaki ö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 üst kısmında tanımlanmalıdır. OEM bağlamları tanımlandığında, araç ses sisteminin geri kalanı önceki gibi yapılandırılabilir. Araç içi ses bağlamı için 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ğinin 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.
OEM ses bağlamı tanımı için ses kullanımının android.audio.policy.configuration.V7_0.AudioUsage
dize temsili kullanılmalıdır. Gelecekte, bir Android sürümünden diğerine geçiş sırasında hataları azaltmak için yeni ses özelliği kullanımları en uygun bağlama atanacaktır.
OEM tanımlı bağlam, OEM eklenti ses hizmetini daha da genişletmek için kullanıma sunulmuştur ancak OEM eklenti hizmeti olmadan da kullanılabilir. Ses davranışı, statik ses hizmetininkine benzer:
Ses odağı etkileşimleri. Ses özniteliği, ses odak etkileşim matrisi tarafından ayarlandığı şekilde en iyi eşleşen davranışı belirlemek için kullanılır. Ayrıntılı bilgi için Ses odağı başlıklı makaleyi inceleyin.
Ses seviyesi denetimi 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ılmış statik hacim listesindeki öncelik.
Sesi kısma davranışı:
Mevcut ses odak noktası için ses özelliği kullanımı, araç ses yapılandırması dosyasında tanımlanan çı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.
Dinamik ses bölgesi yapılandırmaları
Android 14'te, dinamik ses bölgesi yapılandırmasına uyum sağlamak için ses bölgelerini tanımlamaya yönelik araç ses yapılandırması şeması da 3. sürüme güncellendi. Yeni şema, her bölge için bir yapılandırma oluşturulmasını gerektirir.
<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. Araç ses 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ölgesindeki ses yapılandırmaları farklı olabilir:
- Ses gruplarının ayarlarının aynı olması gerekmez.
- Ses bağlamı atamalarının aynı olması gerekmez.
Ses çıkış cihazı adları, bölgeler veya yapılandırmalar genelinde benzersiz olmalıdır. Cihaz adı, ses yapılandırmasında veya bölgelerde yalnızca bir kez görünmelidir.
Aynı ses grubuna ait ses cihazlarının ses kazancı yapılandırmaları aynı 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 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üncellenen OEM'ler car_audio_configuration.xml
dosyasını yeniden kullanabilir.
car_audio_configuration.xml
'te yeni bilgiler gerektiren yeni bir özelliği kullanmak için sürümün güncellenmesi gerekir. Bir dosyanın, o dosya sürümünde desteklenmeyen bilgiler içeren eski bir sürümünü kullanmaya çalışmak, araç hizmeti başlatılırken IllegalStateException
hatası oluşturur. İstisna mesajında, hangi bilgilerin kullanıldığı ve hangi minimum sürümün gerekli olduğuyla ilgili bilgiler yer alır.