Araç ses hizmeti, arabalarda kullanım alanlarını kolaylaştırmak için Core Audio dinamik ses politikasını kullanır.
Her yolcu için ayrı ses oynatma (çoklu bölgeli ses olarak adlandırılır). Bu özellikte her bölgenin sesi eşzamanlı olarak oynatmasına izin verilir.
Dinamik ses bölgesi yapılandırması.
Yolcu birincil bölgesi ses yayını.
Yolcu ses yansıtması.
Araç ses hizmeti, her kullanım alanında sesi belirtilen çıkış cihazına otomatik olarak yönlendirmek için dinamik ses politikasını kullanır.
Çok bölgeli ses
Çok bölgeli ses, birden fazla kullanıcının AAOS ile aynı anda etkileşim kurmasını sağlar. Bir çıkış cihazı grubu bir bölgeyle ilişkilendirilir ve her bölge ses odağını ve ses seviyesini korur. Sürücü birincil bölgede (genellikle ana kabinde) başka bir kaynaktan ses dinlerken yolcular kendi seslerini dinleyebilir.
Çok bölgeli ses mimarisi
Şekil 1. Araba ses sistemi hizmeti mimarisi.
Araç ses bölgeleri, ses çıkışları, ses odak noktası ve diğer ses ayarlarının soyut bir temsilidir. Bu ayarların tümü bağımsız olarak yönetilebilir. Yönlendirme amacıyla her bölge, ses politikası yapılandırmasında düzenlendiği şekilde bir ses çıkış otobüs cihazı grubu olarak tanımlanır. Cihazlar, her ses bölgesi tanımına göre değişiklik gösterir. Şekil 1'de 1 ile 5 arasındaki otobüs cihazları sıfır bölgeye, 6 ile 8 arasındaki otobüs cihazları birinci bölgeye ve 9 ile 11 arasındaki otobüs cihazları ikinci bölgeye aittir.
Araç ses sistemi yapılandırması
Çıkış cihazları genellikle tek bir ses bölgesine atanır. Her ses bölgesi car_audio_configuration.xml
içinde tanımlanır. Aşağıdaki kod snippet'inde, Şekil 1'deki bir araç ses yapılandırması gösterilmektedir:
<carAudioConfiguration version="3">
<zones>
<zone name="Zone0" audioZneId="0" occupantZoneId="0">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGoups>
<group>
<device address="bus_1">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_2">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="config0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_6">
<context context="music"/>
</device>
</group>
<group>
<device address="bus_7">
<context context="navigation"/>
</device>
</group>
...
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
...
...
</zones>
</carAudioConfiguration>
occupantZoneId
, CarOccupantZoneManager
tarafından yönetilen bir araç servisi tanımıdır. Araçlarda, araçtaki bir kullanıcının belirli bir koltuk konumuyla eşlemesini tanımlamak için kullanılır. CarOccupantZoneService
, kullanıcı bir ekrana giriş yaptığında kullanıcı bölgesi ile ekranlar, diğer çevre birimleri ve kullanıcı arasındaki eşlemeyi de tanımlar. Ses bölgelerinde şunlar bulunur:
Ses bölgesi kimliği ve kullanıcı bölgesi kimliği.
- Ses bölgesini kullanıcı bölgesine (koltuk, ekranlar ve diğer çevre birimleri) eşler.
- Giriş yapıldıktan sonra hangi kullanıcı kimliğinin ses bölgesine atanacağını eşleme
Ses yapılandırmalarının listesi. Her ses yapılandırmasında bir dizi ses seviyesi grubu bulunur. Her ses grubu bir dizi ses veri yolu cihazına sahiptir.
Ses düzeyi değiştirildiğinde gruptaki tüm ses cihazları aynı şekilde kontrol edilir.
Her ses cihazına bir ses özellikleri listesi atanır. Bu bilgiler, ses politikası miksajlarını farklı şekilde atanan ses özellikleriyle oluşturmak için kullanılır.
Bu yapılandırma, farklı ses özelliği kullanımlarının her bölgedeki farklı çıkış cihazlarına yönlendirilmesine olanak tanır. Kullanım alanına bağlı olarak farklı sesler aynı anda çalınabilir. Örneğin, ana kabini (birincil bölge) tüm hoparlörlerde medya seslerini, ancak navigasyon seslerini yalnızca sürücüye en yakın hoparlörlerde çalacak şekilde yapılandırabilirsiniz. Ses eşzamanlı olarak oynatıldığında, ana kabinde medya dinlemeye devam edilirken sürücüye navigasyon bilgisi verilir.
Çok bölgeli sesli yolcu girişi iş akışı
Aşağıdaki akış şemasında, bir yolcu kendi ekranına giriş yaptığında ses yönlendirme özelliğinin etkinleştirilme akışı gösterilmektedir:
Şekil 2.
Bu sırada kullanıcı girişi, yolcu bölgesi hizmeti aracılığıyla araç ses sistemine iletilir.
Araç ses hizmeti (belirli bir ses bölgesi için), kullanıcı cihaz yakınlıklarını kaldırmak amacıyla
AudioPolicy#removeUserIdDeviceAffinity
API'yi kullanır. Bu API, kullanıcı kimliği alır. Bu durumda, önceki bölgenin kullanıcısı.AudioPolicy#setUserIdDeviceAffinity
API, yeni kullanıcıyı bir bölgeye atar. Bu bölge, kullanıcı kimliğini ve belirli bir bölge yapılandırması için tüm cihazları alır.
Dinamik bölge yapılandırmaları
Android 14'te, OEM'lerin yolcular için farklı cihaz grupları yapılandırmasına olanak tanımak amacıyla dinamik bölge yapılandırmaları kullanıma sunulmuştur. Bu kullanım alanı, arka koltuktaki yolcuların arka koltuk baş dayanağı hoparlörü ile arka koltuk kulaklığı çevre birimi arasında geçiş yapmasına olanak tanır.
Bu durumda iki yapılandırma gerekir. Arka koltuk baş dayanağı ve kulaklık çevre birimi için birer tane. Belirli bir kullanıcının sesi, tek seferde yalnızca bir yapılandırmaya yönlendirilir.
Şekil 3. Dinamik bölge yapılandırması iş akışı.
Şekil 3, dinamik bölge yapılandırması iş akışının mimarisini göstermektedir. 1. ses bölgesi, sırasıyla çıkış cihazı hoparlörü ve koltuk başlığıyla ilişkilendirilmiş Config 0
ve Config 1
olmak üzere iki yapılandırma içerir.
Kullanıcı oturum açtığında varsayılan yapılandırma otomatik olarak atanır. Kullanıcı, genellikle bir sistem kullanıcı arayüzü aracılığıyla yapılandırmaları değiştirmeyi seçtiğinde araç ses hizmeti iki yapılandırma arasında geçiş yapar. Bu sayede çıkış cihazı Z1 hoparlör ile Z1 koltuk başlığı arasında geçiş yapar.
Aşağıdaki kod snippet'inde bu dinamik bölge yapılandırmasının kurulumu gösterilmektedir.
<carAudioConfiguration version="3">
<zones>
<zone name="Zone1" audioZoneId="1" occupantZoneId="1">
<zoneConfigs>
<zoneConfig name="Zone 1 Config 0" isDefault="true">
<volumeGroups>
<group>
<device address="bus_100">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
<zoneConfig name="Zone 1 Config 1">
<volumeGroups>
<group>
<device address="bus_101">
<context context="music"/>
***
</device>
</group>
</volumeGroups>
</zoneConfig>
</zoneConfigs>
</zone>
</zones>
Araç ses yöneticisi, ses yapılandırmalarının yönetimini kolaylaştırmak için yapılandırmaları yönetmek üzere API'leri gösterir:
- Bir bölgede kullanılabilen yapılandırmaları sorgulayın.
- Bir bölge için şu anda ayarlanmış yapılandırmayı sorgulayın.
- Farklı bir yapılandırmaya geçin.
Sistem kullanıcı arayüzü uygulaması veya hizmeti, Şekil 4'te gösterildiği gibi ses bölgesinin yapılandırmasını yönetmek için bu API'leri kullanabilir. Sorgu API'si bu ikisini yolcuya gösterir. Kullanıcı, istenen yapılandırmayla ilgili bir komuta dokunarak farklı bir yapılandırma seçebilir.
Şekil 4. Dinamik bölge yapılandırması iş akışı.
Birincil bölgedeki yolcu ses yayını
Birincil bölgedeki yolcu ses yayını, Android 14'te yolcuların medya seslerini birincil bölgede yayınlamasına olanak tanımak için kullanıma sunulan bir özelliktir. Bu sayede, sürücü tüm kontrolü elinde tutarken yolcunun medya sesi ana kabine aktarılabilir.
Aşağıdaki şekilde, birincil bölge yolcu medya ses yayını için mimarinin basitleştirilmiş bir sürümü gösterilmektedir.
Şekil 5. Dinamik bölge yapılandırması iş akışı.
Resimde, sürücünün medya çıkış cihazının yolcuyla paylaşıldığı gösterilmektedir. Bu durum yalnızca yolcu birincil bölgeye yayınlama modundayken gerçekleşir. Dinamik ses politikası, sürücünün ses yönlendirmesini yönetmek için de kullanılır ancak sürücünün cihaz yakınlıklarında herhangi bir değişiklik uygulanmaz. Yolcu için çıkış cihazlarının listesi aşağıdaki gibi değiştirilir:
- Yolcu için medya çıkış cihazı, cihaz listesinden kaldırıldı
- Sürücü için medya çıkış cihazı cihaz listesine eklenir
- Yolcu ses bölgeleri için kalan çıkış cihazları cihaz listesinde kalır
Bu yeni cihaz listesi, AudioPolicy#setUserIdDeviceAffinity
API tarafından yolcuya atanır. API'ye iletilen parametreler cihaz listesi ve yolcu kullanıcı kimliğidir. Ses sisteminin ses politikası hizmeti, yolcuyla ilişkili bir medya parçası için hangi ses karışımının seçileceğini sorguladığında birincil bölgeyle ilişkili medya ses karışımı seçilir.
Birincil bölge ses yayını için temel şart, birincil bölgenin medya çıkış cihazının diğer ses özelliği kullanımlarından izole edilmesidir. Aksi takdirde, ses miksajlarının oluşturulması sırasında miksajlara başka ses özellikleri eklenir. Karışım seçimi ses sistemi tarafından yapıldığında, karışıma eklenmiş tüm sesler ana kabinde çalınmak üzere seçilir.
Yolcu bölgesi ses yansıtma
Ses yansıtma özelliği, yolcuların ses paylaşmasına olanak tanır. Yansıtma özelliği, tüm yolcuların aynı sesi dinleyebilmesi için her ses bölgesindeki ses verilerini kopyalar. Bu durumda ses odak noktası, ses yansıtma işlemine dahil olan yolcularla paylaşılır.
Ses yansıtma yönlendirmesi
Ses yansıtmayı etkinleştirmek için en az iki yolcu gerekir. Sonuç olarak, yalnızca iki yolcu ses bölgesi içeren bir ses yapılandırması için bir yansıtma çıkış cihazı gerekir. Yukarıdaki tanımlamayla iki eşzamanlı yansıtma oturumu başlatılabilir.
Aşağıdaki resimde, iki yolcu arasında çok bölgeli ses yansıtma işleminin basitleştirilmiş şeması gösterilmektedir. Her iki yolcunun sesi de bir ses yansıtma cihazına (bus_1000
) yönlendirilir. Ses HAL'i, sinyali kaynak bölgelere kopyalar.
Şekil 6. Dinamik bölge yapılandırması iş akışı.
Bu yönlendirme yalnızca yolcular yansıtma modundayken etkinleştirilir. Aksi takdirde, ses bölgesine karşılık gelen cihazlar yolculara atanır.
Bir yolcu için yansıtma ilk kez etkinleştirildiğinde AudioPolicy#setUserIdDeviceAffinity
API, yönlendirmeyi değiştirir:
- Yolcu için medya çıkış cihazı, cihaz listesinden kaldırılır.
- Yansıtma çıkış cihazı, cihazlar listesine eklendi.
- Yolcu ses bölgesi için kalan çıkış cihazları cihaz listesinde kalır.
API, güncellenmiş cihaz listesi ve yolcunun kullanıcı kimliğiyle birlikte cihaz listesi ile çağrılır. Aşağıdaki resimde, ses yansıtma iş akışının ardışık düzeni gösterilmektedir.
Şekil 7. Ses yansıtma iş akışı.
Şekil 7'de, araç ses yöneticisinin ses yansıtmayı yönetmeye yönelik API'leri Medya Sistemi Hizmeti'nden çağrılıyor. Daha açık belirtmek gerekirse, 1. kullanıcı ve 2. kullanıcı için ses yansıtmayı etkinleştiren API (CarAudioManager#enableMirrorForAudioZones
).
Araç ses hizmeti, yukarıda açıklandığı gibi kullanıcı yolcular için ses yönlendirmesini yapılandırır. Araba ses hizmeti, ses HAL'ine de sinyal göndererek sesi yansıtma cihazından ilgili bölgelere yapılandırır ve kopyalar.
Yukarıdaki resimde araç ses hizmeti mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20
gönderiyor.
burada,
bus_1000
kaynak otobüs, bus_10
ve bus_20
ise hedef otobüslerdir.
Sıralı şema, AudioManager#setParameters
API aracılığıyla gönderilen ve ses hizmeti üzerinden HAL'e ulaşan sinyali göstermez.
Ses yansıtma devre dışı bırakıldığında aşağıdaki sinyal gönderilir:mirroring_src=bus_1000;mirroring=off
. Bu sinyal, ses yansıtma etkin olmadığında ses kopyalama özelliğini devre dışı bırakmak için HAL tarafından kullanılabilir. Ses yansıtma cihazlarını tanımlamak için araç ses yapılandırma dosyasında, aşağıdaki snippet'te gösterildiği gibi mirroringDevices
adlı bir bölüm bulunur.
Bu snippet'te, dört yolcunun ses yansıtmayı kullanabilmesi için bus_1000
ve bus_2000
olmak üzere iki yansıtma cihazı tanımlanmıştır.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>