Ses politikalarını yapılandırın

Android 10 sürümünde sesin önemli ölçüde yeniden düzenlenmesi gerekir. daha fazla esneklik sağlamak için politika yöneticisinin sorumluluğundadır:

  • OEM'e özel yönlendirme stratejileri.
  • Aynı hacim eğrilerinin kullanıldığı eski akış türü grupları için özelleştirilebilir hacim grupları.
  • Sabit kodlanmak yerine, ses politikası motoru tarafından bildirilen yönlendirme stratejileri.
  • Ses politikası motoru tarafından yönetilen ses düzeyi eğrileri ve gruplar.
  • Ortak kod ve yapılandırılabilir kod arasında gelecekteki bir bölünme için dahili yeniden düzenleme hazırlığı Ayrıca daha zengin ses cihazı yönetimi sunabilirsiniz. Örneğin, yalnızca akıllı telefonlarının değil, tüm daha iyi olur.

Android 7.0, şunun için bir ses politikası yapılandırma dosyası biçimi (XML) sunmuştur: ses topolojinizi açıklamaktadır.

Önceki Android sürümleri device/<company>/<device>/audio/audio_policy.conf. ses cihazlarını beyan etmek için (örneğin, Galaxy Nexus ses donanımı için bu dosyayı device/samsung/tuna/audio/audio_policy.conf) tıklayın. Ancak CONF, karmaşık topolojileri tanımlayamayacak kadar sınırlı, basit, tescilli gibi sektör genelinde daha fazla ilgi görüyor.

Android 7.0, audio_policy.conf desteğini sonlandırdı ve destek ekledi daha özel bir XML dosya biçimini kullanarak ses topolojisi tanımlamak için insan tarafından okunabilir, çok çeşitli düzenleme ve ayrıştırma araçlarına sahiptir ve esnektir çok karmaşık ses topolojilerini tanımlamaya yeter. Android 7.0 XML seçimi için USE_XML_AUDIO_POLICY_CONF derleme işareti dosya biçimini kullanın.

XML biçiminin avantajları

CONF dosyasında olduğu gibi, XML dosyası da sayı ve türlerin tanımlanmasını sağlar. çıkış ve giriş akışı profillerinin, oynatma ve yakalama için kullanılabilen cihazların yanı sıra ses özellikleri. Ayrıca, XML biçimi aşağıdaki geliştirmeleri de sunar:

  • Android 10'da birden fazla etkin kayıt uygulaması izin verilir.
    • Kayıt başlangıcı, eşzamanlılık durumu nedeniyle hiçbir zaman reddedilmez.
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) geri çağırma özelliği, müşterileri yakalama yolu değişiklikleri konusunda bilgilendirir.
  • Aşağıdaki durumlarda, istemci sessiz ses örnekleri alır:
    • Gizlilik açısından hassas bir kullanım alanı (örneğin, VOICE_COMMUNICATION) etkin.
    • Müşterinin ön plan hizmeti veya ön plan kullanıcı arayüzü yok.
    • Özel roller politika tarafından tanınır:
      • Erişilebilirlik hizmeti: Gizlilik açısından hassas bir kullanım alanı etkin olsa bile kayıt yapılabilir.
      • Asistan: Kullanıcı arayüzü üstteyse gizlilik açısından hassas olarak değerlendirilir.
  • Ses profilleri, HDMI basit ses tanımlayıcılarına benzer bir yapıya sahiptir ve farklı bir ses sistemine sahiptir. Her ses biçimi için örnekleme hızı/kanal maskeleri grubu.
  • Cihazlar ve akışlar arasındaki tüm olası bağlantıların açık tanımları vardır. Önceden, örtülü bir kural, aynı HAL'ye bağlı tüm cihazların bağlanmasını mümkün kılıyordu modülünün, ses politikasının ses yamasıyla istenen bağlantıları kontrol etmesini engelliyor API'ler. XML biçiminde, topoloji açıklaması bağlantı sınırlamalarını tanımlar.
  • includes desteği, standart A2DP, USB veya yeniden yönlendirme işleminin yinelenmesini önler tanımlar.
  • Hacim eğrileri özelleştirilebilir. Önceden, birim tablolarının kodu sabit kodlanıyordu. XML'de biçiminde, hacim tablosuyla açıklanır ve özelleştirilebilir.

Şu konumdaki şablon: frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml. bu özelliklerin çoğunun kullanıldığını gösterir.

Dosya biçimi ve konumu

Yeni ses politikası yapılandırma dosyası: audio_policy_configuration.xml ve şurada bulunuyor: /system/etc. Aşağıdaki örneklerde, Android 12 ve aşağıdaki sürümler için XML dosya biçimi Android 12.

Üst düzey yapı, her bir ses HAL'sine (HAL) karşılık gelen modüller içerir. her modülün karma bağlantı noktalarının, cihaz bağlantı noktalarının ve güzergahlar:

  • Karışık bağlantı noktaları, akışlar için olası yapılandırma profillerini açıklar. Bu dosyalar, oynatma ve kayıt için ses HAL'sinde açılabilir.
  • Cihaz bağlantı noktaları, eklenebilecek cihazları belirtir ve isteğe bağlı olarak adres ve ses özelliklerini ekleyin.
  • Rotalar, karma bağlantı noktası tanımlayıcısından ayrılır. Cihazlar arası veya cihazdan cihaza akışlarla ilgili açıklamaları etkinleştirme.

Hacim tabloları, çeviri işleminde kullanılan eğriyi tanımlayan basit noktaların listeleridir dB cinsinden bir hacme geçiş yapar. Ayrı bir dahil etme dosyası, varsayılan ama belirli bir kullanım alanı ve cihaz kategorisi için her bir eğri üzerine yazılır.

Dahil edilen dosyalar

XML Inclusions (XInclude) yöntemi, ses politikasını dahil etmek için kullanılabilir. diğer XML dosyalarındaki yapılandırma bilgilerini içerir. Dahil edilen tüm dosyalar Aşağıdaki kısıtlamalarla yukarıda açıklanan yapıya uygun olmalıdır:

  • Dosyalar yalnızca üst düzey öğeler içerebilir.
  • Dosyalar XInclude öğeleri içeremez.

Standart Android Açık Kaynak Projesi'nin (AOSP) kopyalanmasını önlemek için kullanın Tüm ses politikası yapılandırmasına ilişkin ses HAL modülü yapılandırmaları bilgileri dosyalarından (bu, hatalara açıktır). Standart ses politikası yapılandırma XML dosyası aşağıdaki ses HAL'leri için sağlanmıştır:

  • A2DP: a2dp_audio_policy_configuration.xml
  • Alt mix'i yeniden yönlendir: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Ses politikası kodunun düzenlenmesi

AudioPolicyManager.cpp birkaç modüle ayrıldı Böylece bakımını ve yapılandırmasını kolaylaştırır. Projenin frameworks/av/services/audiopolicy şunları içeriyor: daha fazla bilgi edineceksiniz.

Modül Açıklama
/managerdefault Herkes için yaygın olarak kullanılan genel arayüzleri ve uygulama davranışını içerir Motor olarak AudioPolicyManager.cpp ile benzer sosyal becerilerin ve ortak kavramların soyutlanması.
/common Temel sınıfları tanımlar (ör. giriş çıkışı ses akışı için veri yapıları profilleri, ses cihazı tanımlayıcıları, ses yamaları ve ses bağlantı noktaları). Bu, daha önce AudioPolicyManager.cpp içinde tanımlanır.
/engine

Hangi cihaz ve birimlerin kullanılması gerektiğini tanımlayan kuralları uygular bir şablon görevi görür. Genel bölümle birlikte standart bir arayüz uygular: kullanım alanı için uygun cihazı edinme ya da cihazları veya harici durumları (yani, zorunlu kullanıma yönelik çağrı durumu) yönlendirme kararını değiştirebilir.

İki sürümü mevcuttur: Yapılandırılabilir ve varsayılan. Sürümün nasıl seçileceği hakkında bilgi için bkz. Parametre Çerçevesi'ni kullanarak yapılandırma.

/engineconfigurable Parametre Çerçevesi'ne dayanan politika motoru uygulaması (aşağıya bakın). Yapılandırma, Parametre Çerçevesi'ne ve politikanın XML dosyalarıyla tanımlanır.
/enginedefault Önceki Android Ses Politikası Yöneticisi'ne dayalı politika motoru uygulaması hakkında bilgi edindiniz. Bu, varsayılan ayardır ve Nexus ve AOSP uygulamalarına karşılık gelir.
/service Bağlayıcı arayüzleri, iş parçacıkları oluşturma ve arayüze geri çevirebilirsiniz.

Parametre Çerçevesi'ni kullanarak yapılandırma

Ses politikası kodu, anlaşılması kolay ve tümüyle yapılandırmaya göre tanımlanan bir ses politikasını destekler dosyası olarak da kaydedebilir. Kuruluş ve ses politikası tasarımı, Intel Parametresi'ni temel alır. Çerçeve, parametrelerin işlenmesi için eklenti tabanlı ve kural tabanlı bir çerçevedir.

Yapılandırılabilir ses politikasını kullanmak, tedarikçi firmalar OEM'lerin şunları yapmasına olanak tanır:

  • XML'de bir sistemin yapısını ve parametrelerini açıklama.
  • Açıklanan erişime ulaşmak için yazın (C++'ta) veya bir arka uç (eklentiyi) yeniden kullanın parametreleridir.
  • E-posta teslim etmek için gereken koşulları/kuralları (XML olarak veya alana özgü bir dilde) belirtilen parametrenin belirli bir değeri alması gerekir.

AOSP, Çerçeve: Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Örneğin, ayrıntılı bilgi için Parametre Çerçevesi.

Android 10 veya önceki sürümlerde yapılandırılabilir ses politikası USE_CONFIGURABLE_AUDIO_POLICY derleme seçeneği kullanılarak seçilir. Android 11 veya sonraki sürümlerde ses politikasının sürümü audio_policy_configuration.xml dosyasında motor seçili. Yapılandırılabilir ses politikası motorunu seçmek için engine_library değerini ayarlayın globalConfiguration öğesinin configurable özelliğini aşağıdaki örnekte olduğu gibi:

<audioPolicyConfiguration>
    <globalConfiguration engine_library="configurable" />
...
</audioPolicyConfiguration>

Ses politikası yönlendirme API'leri

Android 6.0, herkese açık bir Numaralandırma ve Seçim API'sini kullanıma sundu. bağlantı noktası altyapısının en üstünde görünür ve uygulamaya belirli cihaz çıkışı veya girişi için bir tercih belirtmek üzere ses kayıtlarını veya parçalarını kaydedebilir.

Android 7.0'da Numaralandırma ve Seçim API'si, CTS testleri tarafından doğrulanır ve yerel C/C++ (OpenSL ES) ses akışları için yönlendirmeyi içerecek şekilde genişletilir. Yerel akışların yönlendirme işlemi, ve desteği sonlandıran AudioRouting arayüzü özel olarak tanımlanmış AudioTrack ve AudioRecord sınıf.

Numaralandırma ve Seçim API'si hakkında ayrıntılı bilgi için şuraya bakın: Android yapılandırma arayüzleri ve OpenSLES_AndroidConfiguration.h. Ses yönlendirmeyle ilgili ayrıntılar için bkz. Ses Yönlendirme.

Çok kanallı destek

Donanımınız ve sürücünüz HDMI üzerinden çok kanallı sesi destekliyorsa şunları yapabilirsiniz: ses akışının çıkışını doğrudan ses donanımına verir (bu, İki kanala indirilmemesi için AudioFlinger mikseri.) Ses HAL'si bir çıkış akış profilinin çok kanallı sesi destekleyip desteklemediğini göstermelidir özellikler. HAL, özelliklerini ortaya çıkarırsa, varsayılan politika yöneticisi HDMI üzerinden çok kanallı oynatmaya olanak tanır. Uygulama ayrıntıları için bkz. device/samsung/tuna/audio/audio_hw.c

Ürününüzün çok kanallı ses çıkışı içerdiğini belirtmek için cihazınızın çok kanallı çıkışını açıklayan ses politikası yapılandırma dosyası belirler. Bu örnekte, frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml. Bir dinamik kanal maskesi gösterir. Bu, ses politikası yöneticisinin kanalı sorguladığını gösterir. ve bağlantıdan sonra HDMI havuzunun desteklediği maskeleri gösterir.

Ayrıca, şunlar gibi statik bir kanal maskesi de belirtebilirsiniz: AUDIO_CHANNEL_OUT_5POINT1 AudioFlinger'ın mikseri, harici bir ses cihazına gönderildiğinde, otomatik olarak stereo sese Çok kanallı sesi destekler.

Medya codec'leri

Donanımınızın ve sürücülerinizin desteklediği ses codec'lerinin doğru şekilde yapıldığından emin olun kullanın. Ayrıntılar için bkz. Codec'leri Çerçeve.