Araç ses yapılandırması

Android 10'da car_audio_configuration.xml , car_volumes_groups.xml ve IAudioControl.getBusForContext değiştirildi. Genellikle satıcı bölümünde bulunan ses politikası dosyaları, kartın ses donanım yapılandırmasını temsil eder. car_audio_configuration.xml başvurulan tüm cihazlar audio_policy_configuration.xml adresinde tanımlanmalıdır.

Aşağıdaki Şekil 1, araç ses hizmetinin cihaz için ses ayarlamak için araba ses yapılandırma dosyasını okuduğu otomobil ses hizmeti mimarisinin üst düzey bir genel bakışını göstermektedir.

Araba Ses Mimarisi Genel Bakış

Şekil 1. Otomobil ses mimarisine genel bakış.

Araç Audio Configuration dosyasını cihaza vendor\etc\ veya system\etc\ ye yerleştirin, vendor\etc\ , araba ses hizmeti tarafından dosyayı aranan ilk yer. Ses yapılandırmasını belirlemek için araba ses hizmetleri car_audio_configuration.xml okur.

Araba Ses Bölgeleri:

  • Her ses bölgesi benzersiz bir ses bölgesi kimliği içerir.
  • Her ses bölgesi bir yolcu bölgesine eşlenebilir.
  • Her bölgedeki ses eylemleri birbirinden bağımsızdır:

    • Ses odağı
    • Sesli yönlendirme
    • Sesin kısılması
  • Araba Hacim Grupları:

    • Birim grubu içeren tüm ses aygıtları aynı kazanç değişiklikleriyle birlikte kontrol edilir. Bir gruptaki tüm cihazlar için ses kazancı yapılandırması aynı olmalıdır.

    • Ses cihazları eşlemeye ses bağlamı. Ses kullanımlarını bir çıkış cihazıyla eşleştiren 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 özniteliği kullanımları için doğru bir şekilde kurulmasını sağlar.

Ses bağlamları

AAOS sesinin yapılandırmasını basitleştirmek için benzer kullanımlar CarAudioContexts olarak gruplandırılmıştır. Bu ses bağlamları, yönlendirme, cilt grupları, ses odağı ve duding yönetimini tanımlamak için CarAudioService boyunca kullanılır. AAOS'taki statik ses bağlamları aşağıda listelenmiştir.

Bu tablo, ses bağlamları ve kullanımlar arasındaki eşlemeyi açıklar. Yeni bir sistem kullanımı için vurgulanan satırlar sağlanır.

Caraudiocontext İlişkili öznitelik
MÜZİK UNKNOWN
GAME
MEDIA
NAVİGASYON ASSISTANCE_NAVIGATION_GUIDANCE
SES KOMUTU ASSISTANT
ASSISTANCE_ACCESSIBILITY
Call_ring NOTIFICATION_RINGTONE
ARAMA VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
BİLDİRİ NOTIFICATION
NOTIFICATION_*
System_sound ASSISTANCE_SONIFICATION
ACİL DURUM EMERGENCY
EMNİYET SAFETY
Araç_status VEHICLE_STATUS
DUYURU ANNOUNCEMENT

AAOS Yönlendirmesini Etkinleştir

AAOS tabanlı yönlendirmeyi kullanmak için audioUseDynamicRouting bayrağını true olarak ayarlamanız gerekir:

<resources>
    <bool name="audioUseDynamicRouting">true</bool>
</resources>

false , yönlendirme ve CarAudioService çoğu devre dışı bırakıldığında ve AAOS, AudioService varsayılan davranışına geri döner.

Birincil bölge

Varsayılan olarak, tüm sesler birincil bölgeye yönlendirilir. isPrimary="true" özniteliği tarafından yapılandırmada belirtilen yalnızca bir birincil bölge vardır. Birincil bölgeye otomatik olarak Audiomanager.PRIMARY_AUDIO_ZONE atanır.

Örnek Yapılandırma (Sürüm 2)

Örneğin, bir aracın iki bölge, birincil bölge ve arka koltuk eğlence sistemi olabilir. Bu senaryoda, olası bir car_audio_configuration.xml sürüm 2'yi 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, HAL'in farklı işlem sonrası efektleri uygulamasını ve aracın donanımını kullanarak her cihazdaki çıkışı karıştırmasını sağlar. Cihazlar birkaç cilt grubunda düzenlenmiştir: medya, navigasyon, çağrılar, alarmlar ve sistem sesleri. Sistem useFixedVolume şekilde yapılandırılmışsa, her grubun ses düzeyi düzeyleri bu aygıtların çıkışına uygulanmak üzere HAL'ye iletilir.

Birincil bölge için sistem seslerinin diğer seslerden ayrı olmasını öneririz. Bu, araç seslerinin daha yüksek bir öncelikle muamele edilmesini sağlar. Araba ses hizmeti, odak ve duding yönetimi açısından araç sesleri için bu ayrımları zaten yapıyor. Örneğin, acil ses odağı isteği, başka bir odak talebinden daha yüksek önceliğe sahiptir.

İşleri basit tutmak için, ikincil bölge örneğinde tüm ses bağlamları tek bir cihaza ve bir cilt grubuna yönlendirilir.

Yolcu Bölgesi Ses Yapılandırması

Android 11'de car_audio_configuration.xml iki yeni alan tanıttı: audioZoneId ve occupantZoneId . Ses bölgesi yönetimini kontrol etmek için audioZoneId kullanabilirsiniz. Kullanıcı kimliğine dayalı yönlendirmeyi yapılandırmak için occupantZoneId kullanabilirsiniz.

Yukarıdaki ses yapılandırmasını yeniden ziyaret etme, ancak yeni alanı Yolcu Bölgesi Kimliği ve Ses Bölgesi Kimliği eşlemesi için kullanma, cilt grubu tanımları olmadan 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 konfigürasyon, birincil bölge için bir haritalama, yolcu bölgesi 0 ve audioZoneId 1'e occupantZoneId 1'e bir eşleme tanımlar. Genel olarak, yolcu bölgesi ve ses bölgesi arasındaki 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 zaman PRIMARY_AUDIO_ZONE kimliğidir. isPrimary="true" tanımlanmışsa audioZoneId gerekli değildir.

  • audioZoneId ve occupantZoneId sayıları tekrarlanamaz.

  • audioZoneId ve occupantZoneId sadece bire bir eşlemeye sahip olabilir.

Android 14 araç ses yapılandırması

Android 14'te AAOS, otomobil ses hizmeti tarafından denetlenen ses davranışını daha aktif olarak yönetmenizi sağlayan OEM eklentisi hizmetini tanıttı. Yeni eklenti hizmetleri ile birlikte, Araç Ses Yapılandırma dosyasına aşağıdaki değişiklikler eklenir:

  • OEM tanımlı araç ses bağlamı
  • Birincil olmayan bölge dinamik yapılandırmaları

OEM tanımlı araç ses bağlamı

Esnek bir ses yapılandırmasını etkinleştirmek için Android 14'te araç ses hizmeti, ses kullanımlarının yukarıda tanımlanan statik Ses bağlamlarından farklı şekilde gruplandırılmasına olanak tanır. Bu OEM tanımlı içerik car_audio_configuration.xml sürüm 3 dosyasında tanımlanabilir.

Bunun yerine halihazırda tanımlanmış statik ses bağlamları kullanılır. OEM tanımlı araba ses bağlamının genel formatı aşağıda gösterilmiştir.

OEM bağlamlarının her biri, bağlama atanan ses öznitelikleri kullanımı listesi ile birlikte bir name gerektirir. 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 ve AUDIO_USAGE_UNKNOWN içerir
  • game Bağlamı Yalnızca AUDIO_USAGE_GAME içerir

Bağlam, car_audio_configuration.xml dosyasının üstünde tanımlanmalıdır. OEM bağlamları tanımlandığında, araba ses konfigürasyonunun geri kalanı eskisi gibi ilerleyebilir. Araç 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.

  • Birden fazla bağlamda ses özniteliği kullanımı atamayın.

  • AudioAttributes tanımlanan tüm ses kullanımları, bağlamı oluşturmak için kullanılmalıdır.

Kesinlikle konuşursak, android.audio.policy.configuration.V7_0.AudioUsage Ses Kullanımının Dize Dizesi, OEM ses bağlamı tanımı için kullanılmalıdır. Gelecekte, bir Android sürümünden diğerine geçerken hatayı azaltmak için daha yeni ses özniteliği kullanımları en uygun bağlamda atanacaktır.

OEM eklentisi ses hizmetini daha da genişletmek için OEM tanımlı bağlam tanıtılmış olsa da, yine de OEM eklentisi hizmeti olmadan kullanılabilir. Ses davranışına statik ses hizmetine benzemektedir:

  • Ses odağı etkileşimleri. Ses özelliği, ses odak etkileşim matrisi tarafından ayarlandığı gibi en iyi eşleşen davranışı belirlemek için kullanılır. Ayrıntılar için bkz. Ses odağı .

  • En iyi eşleşmeyi belirlemek için ses düzeyi kontrolü ses özelliği kullanılır:

    • OEM tanımlı bağlama dayalı birim grubu.
    • Yapılandırılan statik birim listesinden öncelik.
  • Sesi kısma davranışı:

    • Geçerli ses odağı için ses özniteliği kullanımı, araç ses yapılandırma dosyasında tanımlandığı gibi çıkış ses cihazı bilgileriyle eşlemek için kullanılır.

    • Ses özniteliği, statik ses azaltma matrisine dayalı olarak karşılık gelen statik bağlamı ördekle eşlemek için kullanılır.

Dinamik ses bölgeleri yapılandırmaları

Android 14'te, dinamik ses bölgeleri yapılandırmasına uyum sağlamak için ses bölgelerini tanımlamaya yönelik araç ses yapılandırma şeması da sürüm 3'e güncellendi. Yeni şema, her bölge için bir yapılandırmanın ayarlanmasını gerektiriyor.

<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 edinmek için, device/generic/car/emulator/audio/car_audio_configuration.xml dosyasında tanımlanan sürüm 3 dosyasına bakın. Android 14'ten itibaren birincil alt bölgenin yalnızca bir (1) yapılandırması olabilir. Primer olmayan bölgelerde birden fazla konfigürasyon olabilir. Araç ses yapılandırmaları için aşağıdaki kurallar geçerlidir:

  • Birincil ses bölgesi yalnızca bir konfigürasyona sahip olabilir.

  • Birincil olmayan ses bölgeleri birden fazla konfigürasyona sahip olabilir.

  • Ad, her ses bölgesi ve ses bölgesi yapılandırması için benzersiz olmalıdır.

  • Bir ses bölgesi içinde ses konfigürasyonları farklı olabilir:

    • Birim grupları kurulumunun aynı olması gerekmez.
    • Ses bağlamı atamasının aynı olması gerekmez.
  • Ses çıkış cihazı adları, bölgeler veya konfigürasyonlar arasında benzersiz olmalıdır. Bir cihaz adı, ses konfigürasyonunda veya bölgelerde yalnızca bir kez görünmelidir.

  • Aynı ses düzeyi grubuna ait ses cihazları aynı ses kazanımı yapılandırmalarına sahip 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 dosyasını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üncelleme yapan OEM'ler car_audio_configuration.xml dosyasını yeniden kullanabilir.

car_audio_configuration.xml dosyasında yer alan yeni bilgileri gerektiren yeni bir özelliği kullanmak için sürümün güncellenmesi gerekir. Bir dosyanın eski bir sürümünü, o dosya sürümünde desteklenmeyen bilgilerle kullanmaya çalışmak, araç hizmeti başlatıldığında bir IllegalStateException oluşturur. İstisna mesajı, hangi bilgilerin kullanıldığı ve hangi minimum sürümün gerekli olduğu ile ilgili bilgileri içerir.