Araç ses hizmeti, araçlardaki kullanım alanlarını kolaylaştırmak için Core Audio dinamik ses politikasını kullanır.
Her yolcu için ayrı ses çalma (çok bölgeli ses olarak adlandırılır). Bu özellik sayesinde her bölgede aynı anda ses çalınabilir.
Dinamik ses bölgesi yapılandırması.
Yolcu birincil bölgesi ses yayını.
Yolcu sesini yansıtma
Her kullanım alanında, araç ses hizmeti, sesi otomatik olarak belirlenen çıkış cihazına 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şimde bulunmasını sağlar. Bir dizi çıkış cihazı bir bölgeyle ilişkilendirilir ve her bölge ses odağını ve ses düzeyini korur. Yolcular kendi seslerini dinlerken sürücü birincil bölgedeki (genellikle ana kabin) başka bir kaynağı dinleyebilir.
Çok bölgeli ses mimarisi
Şekil 1. Araba ses sistemi hizmeti mimarisi.
Araba ses bölgeleri, ses çıkışlarının, ses odağının ve diğer ses ayarlarının soyut bir gösterimidir. Bunları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 dizi ses çıkışı yolu cihazı olarak tanımlanır. Cihazlar, her ses bölgesi tanımı için farklıdır. Şekil 1'de, 1-5 numaralı otobüs cihazları sıfırıncı bölgeye, 6-8 numaralı otobüs cihazları birinci bölgeye ve 9-11 numaralı otobüs cihazları ikinci bölgeye aittir.
Araç ses sistemi yapılandırması
Genellikle çıkış cihazları 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 araba ses sistemi 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ç hizmeti tanımıdır. Araçtaki bir kullanıcının belirli bir koltuk konumuna eşlenmesini tanımlamak için arabalarda kullanılır. CarOccupantZoneService, kullanıcının bir ekranda oturum açmasının ardından, işgal edilen bölgeden ekranlara, diğer çevre birimlerine ve kullanıcıya yönelik eşlemeyi de tanımlar. Ses bölgesinde:
Bir ses bölgesi kimliği ve bir yolcu bölgesi kimliği.
- Haritalar ses bölgesini yolcu bölgesine (koltuk, ekranlar ve diğer çevre birimleri) eşler.
- Giriş yapıldığında hangi kullanıcı kimliğinin ses bölgesiyle eşlendiğini belirleyin.
Ses yapılandırmalarının listesi. Her ses yapılandırmasında bir dizi ses grubu bulunur. Her birim grubunda bir dizi ses yolu cihazı bulunur.
Ses düzeyi değiştirildiğinde, gruptaki tüm ses cihazları aynı şekilde kontrol edilir.
Her ses sistemine bir ses özellikleri listesi atanır. Bu bilgiler, farklı şekilde atanmış ses özelliklerine sahip ses politikası karışımları 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. Sesin eşzamanlı olarak oynatılmasıyla birlikte, navigasyon sürücüye aktarılırken ana kabinde medya dinlenmeye devam eder.
Çok bölgeli ses yolcu girişi iş akışı
Aşağıdaki sıra şeması, yolcu kendi ekranına giriş yaptığında ses yönlendirmeyi etkinleştirme akışını gösterir:
Şekil 2.
Bu sırada, kullanıcı girişi yolcu bölgesi hizmeti aracılığıyla araç ses hizmetine yayılır.
Aracın ses hizmeti (belirli bir ses bölgesi için), kullanıcı cihazı yakınlıklarını kaldırmak üzere
AudioPolicy#removeUserIdDeviceAffinityAPI'sini kullanır. Bu API, kullanıcı kimliği alır. Bu durumda, önceki bölgenin kullanıcısı.AudioPolicy#setUserIdDeviceAffinityAPI, yeni kullanıcıyı bir bölgeye atar. Bu bölge, kullanıcı kimliğini ve belirli bir bölge yapılandırmasına ait 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ıyan dinamik bölge yapılandırmaları kullanıma sunulmuştur. Bu kullanım alanı, arka koltuktaki yolcuların arka koltuk başlığı hoparlörü ile arka koltuk kulaklığı arasında geçiş yapmasına olanak tanır.
Bu durumda iki yapılandırma gereklidir. Arka koltuk başlığı 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österir. Ses bölgesi 1, sırasıyla çıkış cihazı hoparlörü ve koltuk başlığıyla ilişkili olan 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 şekilde, çıkış cihazı Z1 hoparlörü ile Z1 başlığı arasında değiştirilir.
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>
Aracın ses yapılandırmalarının yönetimini kolaylaştırmak için araç ses yöneticisi, yapılandırmaları yönetmek üzere API'ler sunar:
- Bir bölgede kullanılabilen sorgu yapılandırmaları.
- Bir bölge için şu anda ayarlanmış yapılandırmayı sorgulayın.
- Farklı bir yapılandırmaya geçin.
Bir 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, ikisini de yolcuya gösterir. Kullanıcı, istediği yapılandırmanın komutuna dokunarak farklı bir yapılandırma seçebilir.
Şekil 4. Dinamik bölge yapılandırması iş akışı.
Birincil bölge yolcu ses yayını
Birincil bölge yolcu ses yayını, yolcuların birincil bölgede medya seslerini yayınlamalarına olanak tanımak için Android 14'te kullanıma sunulan bir özelliktir. Bu şekilde, yolcunun medya sesi ana kabine aktarılırken sürücü tam kontrolü elinde tutar.
Aşağıdaki şekilde, birincil bölge yolcularına yönelik medya ses yayını mimarisinin basitleştirilmiş bir versiyonu 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österiliyor. 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ı listesi şu şekilde değiştirilir:
- Yolcu için medya çıkışı cihazı, cihaz listesinden kaldırılır.
- 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'si 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 miksinin seçileceğini sorguladığında birincil bölgeyle ilişkili medya ses miksi seçilir.
Birincil bölge ses yayınında temel şart, birincil bölgenin medya çıkış cihazının diğer ses özelliği kullanımlarından izole edilmiş olmasıdır. Aksi takdirde, ses miksleri oluşturulurken mikse başka ses özellikleri eklenir. Karışım seçimi ses sistemi tarafından yapıldığında, karışıma eklenen tüm sesler ana kabinde oynatılmak üzere seçilir.
Yolcu bölgesi ses yansıtma
Ses yansıtma özelliği, yolcuların ses paylaşmasına olanak tanır. Aynalama özelliği, her ses bölgesindeki ses verilerini kopyalayarak tüm yolcuların aynı sesi dinlemesini sağlar. Bu durumda, ses yansıtma işlemine dahil olan yolcularla ses odağı paylaşılır.
Ses yansıtma yönlendirmesi
Ses yansıtmayı etkinleştirmek için en az iki yolcu gerekir. Bu nedenle, yalnızca iki yolcu ses bölgesi olan bir ses yapılandırması için bir yansıtma çıkış cihazı gerekir. Yukarıdaki tanıma göre, aynı anda iki yansıtma oturumu başlatılabilir.
Aşağıdaki şekilde, iki yolcu arasında çok bölgeli ses yansıtma için basitleştirilmiş bir şema gösterilmektedir. Her iki yolcunun sesi, bus_1000 ses yansıtma cihazına yönlendirilir. Audio HAL, 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ölgesi için ilgili cihazlar yolculara atanır.
Bir yolcu için ilk kez yansıtma etkinleştirildiğinde AudioPolicy#setUserIdDeviceAffinity API, yönlendirmeyi şu şekilde değiştirir:
- Yolcu için medya çıkış cihazı, cihaz listesinden kaldırılır.
- Aynalama çıkış cihazı, cihaz listesine eklendi.
- Yolcu ses bölgesi için kalan çıkış cihazları, cihaz listesinde kalır.
Cihaz listesiyle birlikte, API güncellenmiş cihaz listesi ve yolcunun kullanıcı kimliğiyle çağrılır. Aşağıdaki resimde, ses yansıtma iş akışının sıra diyagramı verilmiştir.
Şekil 7. Ses yansıtma iş akışı.
Şekil 7'de, ses yansıtmayı yönetmek için kullanılan araç ses yöneticisinin API'leri, Medya Sistemi Hizmeti'nden çağrılır. Özellikle, 1. ve 2. kullanıcı için ses yansıtmayı etkinleştirmeye yönelik API, CarAudioManager#enableMirrorForAudioZones.
Araç ses hizmeti, kullanıcı yolcular için ses yönlendirmesini yukarıda açıklandığı şekilde yapılandırır. Araba ses hizmeti, ayna cihazındaki sesi yapılandırmak ve ilgili bölgelere kopyalamak için ses HAL'ına da bir sinyal gönderir.
Yukarıdaki resimde, araç ses hizmeti mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20 gönderiyor.
nerede,
bus_1000 kaynak otobüs, bus_10 ve bus_20 ise hedef otobüslerdir.
Sıra şemasında gösterilmeyen, AudioManager#setParameters API aracılığıyla gönderilen ve ses hizmeti üzerinden HAL'ye ulaşan sinyaldir.
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 değilken sesin kopyalanmasını devre dışı bırakmak için HAL tarafından kullanılabilir. Ses yansıtma cihazlarını tanımlamak için araba ses sistemi 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ıtma özelliğini kullanabilmesi için iki yansıtma cihazı (bus_1000 ve bus_2000) tanımlanmıştır.
<carAudioConfiguration version="3">
<mirroringDevices>
<mirroringDevice address="bus_1000"/>
<mirroringDevice address="bus_2000"/>
</mirroringDevices>
<zones>
....
</zones>
</carAudioConfiguration>