Araç ses sistemi yapılandırması

Android 10'da car_audio_configuration.xml, car_volumes_groups.xml ve IAudioControl.getBusForContext'nin yerini aldı. Genellikle tedarikçi bölümünde bulunan ses politikası dosyaları, kartın ses donanımı yapılandırmasını temsil eder. car_audio_configuration.xml içinde referans verilen tüm cihazlar audio_policy_configuration.xml içinde tanımlanmalıdır.

Şekil 1'de, araba ses hizmetinin cihazda ses ayarlamak için araba ses yapılandırma dosyasını okuduğu araba ses hizmeti mimarisine genel bir bakış gösterilmektedir.

Araç ses sistemi mimarisine genel bakış

1. şekil. Araba ses sistemi mimarisine genel bakış.

Araba ses sistemi yapılandırma dosyasını cihazda vendor/etc/ veya system/etc/ konumuna yerleştirin. Araba ses sistemi hizmeti, dosyayı ararken ilk olarak vendor/etc/ konumunda arar. Araba ses hizmetleri, ses yapılandırmasını belirlemek için car_audio_configuration.xml değerini okur.

Araç ses bölgeleri:

  • Her ses bölgesinde benzersiz bir ses bölgesi kimliği bulunur.
  • Her ses bölgesi, bir yolcu bölgesiyle eşlenebilir.
  • Her bölgedeki ses işlemleri birbirinden bağımsızdır:

    • Ses odağı
    • Ses yönlendirme
    • Sesi kısma
  • Araç ses seviyesi grupları:

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

    • Ses bağlamının ses cihazlarıyla eşlenmesi. Bunu, ses kullanımlarını bir çıkış cihazıyla eşleyen bir ses miksi oluşturmak için kullanın.

    • Tüm ses bağlamları bir bölge içinde gösterilmelidir. Bu, tüm ses özelliği kullanımları için ses yönlendirmenin doğru şekilde ayarlanmasına olanak tanır.

Ses bağlamları

AAOS sesinin yapılandırılmasını kolaylaştırmak için benzer kullanımlar CarAudioContexts altında gruplandırılmıştır. Bu ses bağlamları, yönlendirme, ses seviyesi grupları, ses odağı ve ses kısma yönetimini tanımlamak için CarAudioService genelinde kullanılır. AAOS'taki statik ses bağlamları bu tabloda listelenmiştir.

Bu tabloda, ses bağlamları ile kullanımları arasındaki eşleme açıklanmaktadır. Yeni sistem kullanımı için satırlar vurgulanır.

CarAudioContext Associated AttributeUsages
MUSIC UNKNOWN
GAME
MEDIA
NAVIGATION ASSISTANCE_NAVIGATION_GUIDANCE
VOICE_COMMAND ASSISTANT
ASSISTANCE_ACCESSIBILITY
CALL_RING NOTIFICATION_RINGTONE
CALL VOICE_COMMUNICATION
VOICE_COMMUNICATION_SIGNALING
ALARM ALARM
NOTIFICATION NOTIFICATION
NOTIFICATION_*
SYSTEM_SOUND ASSISTANCE_SONIFICATION
EMERGENCY EMERGENCY
SAFETY SAFETY
VEHICLE_STATUS VEHICLE_STATUS
ANNOUNCEMENT ANNOUNCEMENT

AAOS yönlendirmesini etkinleştirme

AAOS tabanlı yönlendirmeyi kullanmak için audioUseDynamicRouting işaretini true olarak ayarlamanız gerekir:

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

false devre dışı bırakıldığında yönlendirme ve CarAudioService'nin büyük bir kısmı devre dışı bırakılır ve AAOS, AudioService'nin varsayılan davranışına geri döner.

Yapılandırılabilir ses politikası motoru

Android 14'te araç ses yönetimi özelliklerini daha da genişletmek için AAOS, Yapılandırılabilir Ses Politikası Motoru (CAP) aracılığıyla ses yönetimi kullanımını kullanıma sundu. Bu sayede, ses yönlendirme ve ses seviyesi yönetimi üzerinde daha fazla esneklik elde edebilir, ayrıca aşağıdakiler için çok yönlü tanımlar yapabilirsiniz:

Yapılandırılabilir ses politikası (CAP) motorunu useCoreAudioVolume ve useCoreAudioRouting kullanarak etkinleştirebilirsiniz. Ayrıntılar için Yapılandırılabilir ses politikası motoru başlıklı makaleyi inceleyin.

Birincil bölge

Varsayılan olarak tüm sesler birincil bölgeye yönlendirilir. Yalnızca bir birincil bölge vardır ve bu bölge, yapılandırmada isPrimary="true" özelliğiyle belirtilir. Birincil bölgeye otomatik olarak Audiomanager.PRIMARY_AUDIO_ZONE atanır.

Örnek yapılandırma (2. sürüm)

Örneğin, bir araçta birincil bölge ve arka koltuk eğlence sistemi olmak üzere iki bölge 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 sayede HAL, farklı son işlem efektleri uygulayabilir ve aracın donanımını kullanarak her cihazdaki çıkışı karıştırabilir. Cihazlar; medya, navigasyon, aramalar, alarmlar ve sistem sesleri olmak üzere çeşitli ses gruplarına ayrılmıştır. Sistem useFixedVolume olarak yapılandırılmışsa her grubun ses seviyeleri, bu cihazların çıkışına uygulanmak üzere HAL'ye iletilir.

Birincil bölge için sistem seslerinin diğer seslerden ayrı olmasını öneririz. Bu sayede araç seslerine daha yüksek öncelik verilir. Araba ses hizmeti, odaklanma ve ses kısma yönetimi açısından araç sesleri için bu ayrımları zaten yapıyor. Örneğin, acil durum sesi odaklanma isteğinin önceliği diğer odaklanma isteklerinden daha yüksektir.

İkincil bölge örneğinde, tüm ses bağlamları tek bir cihaza ve ses grubuna yönlendirilir.

CAP motoru için birim grubu tanımı

Yapılandırılabilir ses politikası motoru bölümünde belirtildiği gibi, CAP motoru aracılığıyla ses yönetimi kullanmak için ses grubu tanımı da bir ad içermelidir:


<group name="media">
  <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 name="navigation">
  <device address="bus1_navigation_out">
    <context context="navigation"/>
  </device>
  <device address="bus2_voice_command_out">
    <context context="voice_command"/>
  </device>
</group>

Bu birim grubu adı, CAP motorunda tanımlanan birim adıyla eşleşmelidir. Ayrıca, useFixedVolume parametresi de false olarak ayarlanmalıdır. Ayrıntılar için Ses yapılandırması AAOS işaretleri başlıklı makaleyi inceleyin.

Yolcu bölgesi ses yapılandırması

Android 11'de car_audio_configuration.xml ve occupantZoneId olmak üzere iki yeni alan audioZoneId kullanıma sunuldu. Ses bölgesi yönetimini kontrol etmek için audioZoneId kullanabilirsiniz. Kullanıcı kimliğine göre yönlendirmeyi yapılandırmak için occupantZoneId simgesini kullanabilirsiniz.

Ses yapılandırmasını yeniden gözden geçirip yeni alanları kullanarak işgal edilen bölge kimliği ve ses bölgesi kimliği eşlemesi yaparsanız ses grubu tanımları olmayan 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>

Yapılandırmada, birincil bölge ile 0 numaralı bölge ve audioZoneId 1 ile occupantZoneId 1 arasında eşleme tanımlanır. Kullanıcı bölgesi ile ses bölgesi arasındaki tüm eşlemeler yapılandırılabilir. Ancak eşleme bire bir olmalıdır. İki yeni alanı tanımlayan kurallar şunlardır:

  • 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 numaraları tekrarlanamaz.

  • audioZoneId ve occupantZoneId yalnızca bire bir eşlemeye sahip olabilir.

Android 14'te araç ses yapılandırması

Android 14'te AAOS, OEM eklenti hizmetini kullanıma sundu. Bu hizmet, araç ses hizmeti tarafından denetlenen ses davranışını yönetmenize olanak tanır. Yeni eklenti hizmetlerinin yanı sıra, araç ses sistemi yapılandırma dosyasına aşağıdaki değişiklikler eklenir:

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

OEM tarafından tanımlanan araç ses bağlamı

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

Bunun yerine, önceden tanımlanmış statik ses bağlamları kullanılır. OEM tarafından tanımlanan araç ses bağlamının genel biçimi daha sonra gösterilmektedir.

OEM bağlamlarının her biri için name ve bağlama atanan ses özellikleri kullanım listesi gerekir. Önceki ö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çeriyor
  • game bağlamı yalnızca AUDIO_USAGE_GAME içeriyor

Bağlam, car_audio_configuration.xml dosyasının en üstünde tanımlanmalıdır. OEM bağlamları tanımlandığında, araç ses yapılandırmasının geri kalanı eskisi gibi devam edebilir. Araba ses sistemi bağlamında 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.

  • Ses özelliği kullanımını birden fazla bağlama atamayın.

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

Kesin olarak söylemek gerekirse, OEM ses bağlamı tanımı için ses kullanımının android.audio.policy.configuration.V7_0.AudioUsagedize gösterimi kullanılmalıdır. Gelecekte, bir Android sürümünden diğerine geçiş sırasında hatayı azaltmak için daha yeni ses özelliği kullanımları en uygun bağlama atanacak.

OEM tarafından tanımlanan bağlam, OEM eklentisi ses hizmetini daha da genişletmek için kullanıma sunulmuş olsa da OEM eklentisi hizmeti olmadan da kullanılabilir. Ses davranışı, statik ses hizmetinin davranışına benzer:

  • Ses odağı etkileşimleri Ses özniteliği, ses odağı etkileşim matrisi tarafından belirlenen en iyi eşleşme davranışını belirlemek için kullanılır. Ayrıntılı bilgi için Ses odağı başlıklı makaleyi inceleyin.

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

    • OEM tarafından tanımlanan bağlama dayalı ses grubu.
    • Yapılandırılan statik birim listesindeki öncelik.
  • Sesi kısma davranışı:

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

    • Ses özelliği, statik ses azaltma matrisine göre ilgili statik bağlamı azaltma ile eşlemek için kullanılır.

CAP engine ürün stratejileri

Bir cihazın ses veya yönlendirme yönetimi için CAP motorunu kullanması gerektiğinde, OEM tarafından tanımlanan bağlamınız CAP motoru ürün stratejisi tanımıyla eşleşmelidir. Aksi takdirde, CAP motoru olmadan OEM tanımlı bağlamı kullanabilirsiniz.

Daha fazla bilgi edinmek için AAOS'teki CAP motoru ürün ürün stratejisine bakın.

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 3. sürüme güncellendi. Yeni şemada her bölge için bir yapılandırma ayarlanması gerekir.

<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 için device/generic/car/emulator/audio/car_audio_configuration.xml adresinde tanımlanan 3. sürüm dosyasına bakın. Android 14'ten itibaren birincil bölgede yalnızca bir (1) yapılandırma olabilir. Birincil olmayan bölgelerde birden fazla yapılandırma olabilir. Araba ses sistemi yapılandırmaları için aşağıdaki kurallar geçerlidir:

  • Birincil ses bölgesinde yalnızca bir yapılandırma olabilir.

  • Birincil olmayan ses bölgelerinde birden fazla yapılandırma olabilir.

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

  • Ses bölgesinde ses yapılandırmaları farklı olabilir:

    • Ses gruplarının kurulumu aynı olmak zorunda değildir.
    • Ses bağlamı atamasının aynı olması gerekmez.
  • Ses çıkışı cihazı adları bölgeler veya yapılandırmalar arasında benzersiz olmalıdır. Bir cihaz adı, ses yapılandırmasında veya bölgelerde yalnızca bir kez görünmelidir.

  • Aynı ses grubu içinde yer alan ses cihazları aynı ses kazancı 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'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 içinde yer alan yeni bilgilerin gerekli olduğu yeni bir özelliği kullanmak için sürümün güncellenmesi gerekir. Bilgilerin dosya sürümünde desteklenmediği bir dosyanın eski sürümünü kullanmaya çalışmak, araç hizmeti başlatıldığında IllegalStateException hatası veriyor. İstisna mesajında, hangi bilgilerin kullanıldığı ve hangi minimum sürümün gerekli olduğuyla ilgili bilgiler yer alır.