Çok bölgeli ses yönlendirme

Araba ses hizmeti, arabalardaki kullanım alanlarını kolaylaştırmak için Core Audio dinamik ses politikasını kullanır.

  • Her yolcu için ayrı ses oynatma (çok bölgeli ses olarak adlandırılır). Her bölge, sesin eşzamanlı olarak oynatılmasına olanak tanır.

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

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

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

Araç ses sistemi hizmeti mimarisi

1. şekil. Araba ses sistemi hizmeti mimarisi.

Arabadaki 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, 9-11 numaralı otobüs cihazları ise 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 kullanıcının belirli bir koltuk konumuna eşlenmesini tanımlamak için arabalarda kullanılır. CarOccupantZoneService, kullanıcı bir ekranda oturum açtıktan sonra 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.

    • 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 cihazına 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ı, yolcular kendi ekranlarına giriş yaptığında ses yönlendirmeyi etkinleştirme akışını gösterir:

resim

Şekil 2.

Bu sırada, kullanıcı girişi yolcu bölgesi hizmeti aracılığıyla araç ses hizmetine yayılır.

  1. Aracın ses hizmeti (belirli bir ses bölgesi için) kullanıcı cihazı yakınlıklarını kaldırmak üzere AudioPolicy#removeUserIdDeviceAffinity API'sini kullanır. Bu API, kullanıcı kimliği alır. Bu durumda, önceki bölgenin kullanıcısı.

  2. 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ı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.

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

3.Şekil 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>

Araç ses yöneticisi, ses yapılandırmalarının yönetimini kolaylaştırmak için yapılandırmaları yönetmeye yönelik 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ölgesi yapılandırmasını yönetmek için bu API'leri kullanabilir. Sorgu API'si, bu ikisini yolcuya gösterir. Kullanıcı, istediği yapılandırmanın komutuna dokunarak farklı bir yapılandırma seçebilir.

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

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

Birincil bölge yolcuları için 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.

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

5.şekil 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ın yapma 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 yapılmaz. 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 edilmesidir. 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 odaklanması 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. 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.

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

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

Bu yönlendirme yalnızca yolcular yansıtma modundayken etkinleştirilir. Aksi takdirde, ses bölgesiyle ilişkili cihazlar yolculara atanır. 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.

Ses yansıtma iş akışı

Ş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, yukarıda açıklandığı gibi kullanıcı yolcular için ses yönlendirmesini yapılandırır. Araba ses hizmeti, ses HAL'ına bir sinyal de göndererek ayna cihazındaki sesi yapılandırır ve ilgili bölgelere kopyalar.

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>