Çok bölgeli ses yönlendirme

Araç ses hizmeti, araçlardaki kullanım örneklerini kolaylaştırmak için Core Audio dinamik ses politikasını kullanır.

  • Çok bölgeli ses olarak adlandırılan, her yolcu için ayrı ses oynatımı, her bölgenin sesin eş zamanlı çalınmasına olanak sağlaması.

  • Dinamik ses bölgesi yapılandırması.

  • Yolcu birincil bölgesi ses yayını.

  • Yolcunun sesli aynası.

Her kullanım durumunda 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 aynı anda AAOS ile etkileşime girmesini sağlar. Bir dizi çıkış cihazı bir bölgeyle ilişkilendirilir ve her bölge ses odağını ve ses seviyesini korur. Sürücü birincil bölgedeki (genellikle ana kabin) başka bir kaynağı dinlerken yolcular da kendi seslerini dinleyebilir.

Çok bölgeli ses mimarisi

Araç ses hizmeti mimarisi

Şekil 1. Araç ses hizmeti mimarisi.

Araç ses bölgeleri, tümü bağımsız olarak yönetilebilen ses çıkışlarının, ses odağının ve diğer ses ayarlarının bir soyutlamasıdır. Yönlendirme amacıyla her bölge, ses politikası yapılandırmasında düzenlenen bir dizi ses çıkış veriyolu cihazı olarak tanımlanır. Cihazlar her ses bölgesi tanımı için farklılık gösterir. Şekil 1'de, 1'den 5'e kadar olan veri yolu cihazları sıfır bölgesine, 6'dan 8'e kadar olan veri yolu cihazları birinci bölgeye ve 9'dan 11'e kadar olan veri yolu cihazları ikinci bölgeye aittir.

Araç ses yapılandırması

Tipik olarak çıkış cihazları bir ses bölgesine atanır. Her ses bölgesi car_audio_configuration.xml dosyasında tanımlanır. Aşağıdaki kod parçacığı, Şekil 1 için bir araç ses yapılandırmasını göstermektedir:

<carAudioConfiguration version="3">
    <zones>
        <zone name="Zone0" audioZneId="0" occupantZoneI="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 araba hizmeti tanımıdır. Arabalarda, arabadaki bir kullanıcının belirli bir koltuk konumuna eşlemesini tanımlamak için kullanılır. CarOccupantZoneService ayrıca kullanıcı bir ekranda oturum açtığında kullanıcı bölgesinden ekranlara, diğer çevre birimlerine ve kullanıcıya eşlemeyi de tanımlar. Bir ses bölgesi şunları içerir:

  • Bir ses bölgesi kimliği ve bir yolcu bölgesi kimliği.

    • Ses bölgesini yolcu bölgesiyle (koltuk, ekranlar ve diğer çevre birimleri) eşleştirir
    • Oturum açtıktan sonra hangi kullanıcı kimliğinin ses bölgesine atandığını haritalayın
  • Ses yapılandırmalarının listesi. Her ses yapılandırmasında bir dizi ses düzeyi grubu bulunur. Her ses grubu grubunda bir dizi ses veri yolu cihazı bulunur.

    • Ses seviyesi değiştirildiğinde gruptaki tüm ses cihazları aynı şekilde kontrol edilir.

    • Her ses cihazına bir ses öznitelikleri listesi atanır. Bu bilgi, farklı şekilde atanmış ses niteliklerine sahip ses politikası karışımlarını 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 durumuna bağlı olarak farklı sesler aynı anda çalınabilir. Örneğin, ana kabini (birincil bölge), medya seslerini tüm hoparlörlerde çalacak, ancak navigasyon seslerini yalnızca sürücüye en yakın hoparlörlerde çalacak şekilde yapılandırmayı seçebilirsiniz. Eş zamanlı ses oynatımıyla ana kabin, navigasyon sürücüye iletilirken medyayı dinlemeye devam ediyor.

Çok bölgeli sesli yolcu oturum açma iş akışı

Aşağıdaki sıra diyagramı, bir yolcu kendi ekranına giriş yaptığında ses yönlendirmesini etkinleştirme akışını göstermektedir:

görüntü

Şekil 2.

Bu sırada kullanıcı oturum açma bilgisi, yolcu bölgesi hizmeti aracılığıyla araç ses hizmetine iletilir.

  1. Araç ses hizmeti (belirli bir ses bölgesi için), kullanıcı cihazı benzeşimlerini kaldırmak için AudioPolicy#removeUserIdDeviceAffinity API'sini kullanır. Bu API bir kullanıcı kimliği alır. Bu durumda önceki bölgenin kullanıcısıdır.

  2. AudioPolicy#setUserIdDeviceAffinity API, yeni kullanıcıyı belirli bir bölge yapılandırması için kullanıcı kimliğini ve tüm cihazları alan bir bölgeye atar.

Dinamik bölge yapılandırmaları

Android 14'te, OEM'lerin yolcular için farklı cihaz gruplarını yapılandırmasına olanak tanıyan dinamik bölge yapılandırmaları tanıtıldı. Kullanım durumu, arka koltuktaki yolcuların arka koltuk kafalık hoparlörü ile arka koltuk kulaklık çevre birimi arasında geçiş yapmasına olanak tanır.

Bu durumda iki konfigürasyon gereklidir. Arka koltuk başlığı ve kulaklık çevre birimi için birer adet. Belirli bir kullanıcının sesi aynı anda yalnızca tek bir yapılandırmaya yönlendirilir.

Dinamik bölge yapılandırması iş akışı

Ş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. Ses bölgesi 1, sırasıyla çıkış cihazı hoparlörü ve kafalık ile ilişkili olan Config 0 ve Config 1 olmak üzere iki yapılandırma içerir.

Oturum açtıktan sonra kullanıcıya otomatik olarak varsayılan yapılandırma 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ındaki geçişi gerçekleştirir. Bu şekilde çıkış cihazı Z1 hoparlörü ile Z1 koltuk başlığı arasında geçiş yapar.

Aşağıdaki kod parçacığı bu dinamik bölge yapılandırmasının kurulumunu göstermektedir.

<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>

Ses yapılandırmalarının yönetimini kolaylaştırmak için araç ses yöneticisi, yapılandırmaları yönetecek API'leri kullanıma sunar:

  • Bir bölgede kullanılabilen sorgu yapılandırmaları.
  • Bir bölge için geçerli olarak ayarlanmış yapılandırmayı sorgulayın.
  • Farklı bir konfigürasyona 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'yi kullanabilir. Sorgu API'si, ikisini yolcunun kullanımına sunar. Kullanıcı, istenen konfigürasyon için bir komuta dokunarak farklı bir konfigürasyon seçebilir.

Dinamik bölge yapılandırması iş akışı

Ş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 medya seslerini birincil bölgede yayınlamasına olanak tanıyan, Android 14'te sunulan bir özelliktir. Bu şekilde, sürücü tam kontrolde kalırken, yolcunun medya sesi ana kabine aktarılabiliyor.

Aşağıdaki şekil, birincil bölge yolcu medyası ses yayını mimarisinin basitleştirilmiş bir versiyonunu göstermektedir.

Dinamik bölge yapılandırması iş akışı

Şekil 5. Dinamik bölge yapılandırması iş akışı.

Resimde, sürücüye ait medya çıkış cihazının yolcuyla paylaşıldığı gösterilmektedir; bu yalnızca yolcu birincil bölgeye geçiş modundayken gerçekleşir. Dinamik ses ilkesi, sürücünün ses yönlendirmesini yönetmek için de kullanılır ancak sürücüye yönelik aygıt benzeşimlerinde herhangi bir değişiklik uygulanmaz. Yolcu için çıkış cihazlarının listesi aşağıdaki şekilde değiştirilir:

  • Yolcu için medya çıkış cihazı, cihazlar listesinden kaldırıldı
  • Sürücü için ortam çıkış aygıtı aygıt listesine eklendi
  • Yolcu ses bölgeleri için kalan çıkış cihazları, cihaz listesinde kalır

Bu yeni cihaz listesi yolcuya AudioPolicy#setUserIdDeviceAffinity API tarafından atanır. API'ye iletilen parametreler, cihazların 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 gereksinim, birincil bölgenin medya çıkış cihazının diğer ses özelliği kullanımlarından izole edilmesidir. Aksi halde, ses miksajlarının oluşturulması sırasında miksajın içine başka ses nitelikleri de eklenir. Mix seçimi ses sistemi tarafından gerçekleştirildiğinde, mix'e eklenen tüm sesler ana kabinde çalınmak üzere seçilir.

Yolcu bölmesi ses aynası

Sesli ayna özelliği yolcuların sesi paylaşmasına olanak tanır. Ayna özelliği, tüm yolcuların aynı sesi dinleyebilmesi için her ses bölgesindeki ses verilerini kopyalar. Bu durumda ses odağı, ses yansıtma işlemine dahil olan yolcularla paylaşılır.

Ses aynası yönlendirme

Ses yansıtmayı etkinleştirmek için en az iki yolcu gereklidir. Sonuç olarak, yalnızca iki yolcu ses bölgesine sahip bir ses konfigürasyonu, bir ayna çıkış cihazı gerektirecektir. Yukarıdaki tanımla eş zamanlı iki yansıtma oturumu başlatılabilir.

Aşağıdaki şekilde iki yolcu arasındaki çok bölgeli ses yansıtmanın basitleştirilmiş bir diyagramı gösterilmektedir. Her iki yolcudan gelen ses, bus_1000 adlı bir ses yansıtma cihazına yönlendirilir. Ses HAL, sinyali kaynak bölgelere kopyalar.

Dinamik bölge yapılandırması iş akışı

Ş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 yansıtma ilk kez etkinleştirildiğinde AudioPolicy#setUserIdDeviceAffinity API, yönlendirmeyi değiştirir:

  • Yolcu için medya çıkış cihazı, cihazlar listesinden kaldırıldı.
  • Ayna çıkış cihazı, cihazlar listesine eklendi.
  • Yolcu ses bölgesi için kalan çıkış cihazları, cihazlar listesinde kalır.

Cihaz listesiyle API, güncellenen 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ı sağlanmaktadır.

Ses yansıtma iş akışı

Ş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 Hizmetinden çağrılır. Özellikle, Kullanıcı 1 ve Kullanıcı 2 için ses yansıtmayı etkinleştiren API, CarAudioManager#enableMirrorForAudioZones .

Araç ses hizmeti, kullanıcı yolcuları için ses yönlendirmesini yukarıda açıklandığı gibi yapılandırır. Araç ses hizmeti ayrıca sesi yapılandırmak ve ayna cihazından ilgili bölgelere kopyalamak için ses HAL'e bir sinyal gönderir.

Yukarıdaki resimde araç ses hizmeti, mirroring_src=bus_1000;mirroring_dest=bus_10,bus_20 gönderiyor

Neresi,

bus_1000 kaynak veriyoludur ve bus_10 ve bus_20 hedef veriyoludur.

AudioManager#setParameters API aracılığıyla gönderilen ve ses hizmeti aracılığıyla HAL'ye ulaşan sinyal, sıra şemasında gösterilmemektedir.

Ses yansıtmasının devre dışı bırakılması üzerine şu sinyal gönderilir: mirroring_src=bus_1000;mirroring=off . Bu sinyal, ses yansıtma etkinleştirilmediğinde ses çoğaltmayı 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ı, aşağıdaki kod parçasında gösterildiği gibi, mirroringDevices adlı bir bölüm içerir.

Bu kod parçasında, bus_1000 ve bus_2000 olmak üzere iki yansıtma cihazı tanımlanmıştır, böylece dört yolcu ses yansıtmayı kullanabilir.

<carAudioConfiguration version="3">
   <mirroringDevices>
       <mirroringDevice address="bus_1000"/>
       <mirroringDevice address="bus_2000"/>
   </mirroringDevices>
  <zones>
    ....
  </zones>
</carAudioConfiguration>