Ses politikalarını yapılandırma

Android 10 sürümü, karmaşık otomotiv kullanım durumlarını desteklemek için daha fazla esneklik sağlamak amacıyla ses politikası yöneticisinde önemli bir yeniden düzenlemeyi içeriyor:

  • OEM'e özgü yönlendirme stratejileri.
  • Aynı hacim eğrilerini kullanan eski akış türleri 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 ile yapılandırılabilir kod arasında gelecekteki bir bölünmeye hazırlık yapan ve daha zengin ses cihazı yönetimi sunan dahili yeniden düzenleme. Örneğin, politika kurallarında yalnızca türünün değil tüm aygıt özelliklerinin kullanılması.

Android 7.0, ses topolojinizi açıklamak için bir ses politikası yapılandırma dosyası biçimini (XML) kullanıma sundu.

Ürününüzde bulunan ses cihazlarını bildirmek için device/<company>/<device>/audio/audio_policy.conf dosyasının kullanılması gereken önceki Android sürümleri (Galaxy Nexus ses donanımı için bu dosyanın bir örneğini device/samsung/tuna/audio/audio_policy.conf dosyasında görebilirsiniz) device/samsung/tuna/audio/audio_policy.conf ). Ancak CONF, televizyonlar ve otomobiller gibi dikeyler için karmaşık topolojileri tanımlayamayacak kadar sınırlı, basit ve özel bir formattır.

Android 7.0, audio_policy.conf kullanımdan kaldırdı ve insan tarafından daha kolay okunabilen, çok çeşitli düzenleme ve ayrıştırma araçlarına sahip ve karmaşık ses topolojilerini tanımlayacak kadar esnek olan bir XML dosya formatı kullanan bir ses topolojisi tanımlamak için destek ekledi. Android 7.0, yapılandırma dosyalarının XML biçimini seçmek için USE_XML_AUDIO_POLICY_CONF yapı bayrağını kullanır.

XML formatının avantajları

CONF dosyasında olduğu gibi, XML dosyası da çıkış ve giriş akışı profillerinin sayısını ve türlerini, oynatma ve yakalama için kullanılabilen cihazları ve ses niteliklerini tanımlamayı sağlar. Ek olarak, XML formatı aşağıdaki geliştirmeleri sunar:

  • Android 10'da aynı anda birden fazla aktif kayıt uygulamasına izin veriliyor.
    • Eşzamanlılık durumu nedeniyle kaydın başlatılması hiçbir zaman reddedilmez.
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) geri çağrısı, istemcilere yakalama yolu değişikliklerini bildirir.
  • Aşağıdaki durumlarda istemci sessiz ses örnekleri alır:
    • Gizliliğe duyarlı bir kullanım durumu (örneğin, VOICE_COMMUNICATION ) etkin.
    • İstemcinin bir ön plan hizmeti veya ön plan kullanıcı arayüzü yok.
    • Özel roller politika tarafından tanınır:
      • Erişilebilirlik hizmeti: Gizliliğe duyarlı bir kullanım durumu etkin olsa bile kayıt yapabilir.
      • Asistan: Kullanıcı arayüzünün üstte olması durumunda gizliliğe duyarlı olduğu kabul edilir.
  • Ses profilleri, HDMI basit ses tanımlayıcılarına benzer bir yapıya sahiptir ve her ses formatı için farklı örnekleme hızları/kanal maskeleri kümesi sağlar.
  • Cihazlar ve akışlar arasındaki tüm olası bağlantılar için açık tanımlar vardır. Daha önce örtülü bir kural, aynı HAL modülüne bağlı tüm cihazların bağlanmasını mümkün kılıyor ve ses politikasının ses yama API'leri ile istenen bağlantıları kontrol etmesini engelliyordu. XML formatında topoloji açıklaması bağlantı sınırlamalarını tanımlar.
  • Dahil etme desteği, standart A2DP, USB veya yeniden yönlendirme gönderme tanımlarının tekrarlanmasını önler.
  • Hacim eğrileri özelleştirilebilir. Daha önce hacim tabloları sabit kodlanıyordu. XML formatında hacim tabloları tanımlanır ve özelleştirilebilir.

frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml adresindeki şablon, bu özelliklerin çoğunun kullanımda olduğunu gösterir.

Dosya formatı ve konumu

Yeni ses politikası yapılandırma dosyası audio_policy_configuration.xml ve /system/etc dizininde bulunur. Aşağıdaki örneklerde Android 12 ve Android 12'nin altındaki sürümler için XML dosya biçiminde basit bir ses politikası yapılandırması gösterilmektedir.

Üst düzey yapı, her bir ses HAL donanım modülüne karşılık gelen modüller içerir; burada her modülde miks bağlantı noktaları, aygıt bağlantı noktaları ve yönlendirmelerin bir listesi bulunur:

  • Karıştırma bağlantı noktaları, oynatma ve yakalama için ses HAL'inde açılabilen akışlara yönelik olası yapılandırma profillerini açıklar.
  • Cihaz bağlantı noktaları, eklenebilecek cihazları türleriyle (ve isteğe bağlı olarak adres ve ses özellikleriyle) açıklar.
  • Yollar, karıştırma bağlantı noktası tanımlayıcısından ayrılarak, aygıttan aygıta veya akıştan aygıta yolların tanımlanmasına olanak sağlar.

Hacim tabloları, bir kullanıcı arayüzü indeksinden dB cinsinden bir hacme çevirmek için kullanılan eğriyi tanımlayan basit nokta listeleridir. Ayrı bir içerme dosyası, varsayılan eğriler sağlar ancak belirli bir kullanım durumu ve cihaz kategorisi için her eğrinin üzerine yazılabilir.

Dosya eklemeleri

XML Eklemeleri (XInclude) yöntemi, diğer XML dosyalarında bulunan ses politikası yapılandırma bilgilerini dahil etmek için kullanılabilir. 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 (AOSP) ses HAL modülü yapılandırma bilgilerinin tüm ses ilkesi yapılandırma dosyalarına (hatalara açık) kopyalanmasını önlemek için içermeleri kullanın. Aşağıdaki ses HAL'leri için standart bir ses ilkesi yapılandırma XML dosyası sağlanır:

  • A2DP: a2dp_audio_policy_configuration.xml
  • Alt karışımı yeniden yönlendirin: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Ses politikası kodu organizasyonu

AudioPolicyManager.cpp bakımı ve yapılandırmayı kolaylaştırmak için birkaç modüle ayrılmıştır. frameworks/av/services/audiopolicy organizasyonu aşağıdaki modülleri içerir.

Modül Tanım
/managerdefault Tüm uygulamalarda ortak olan genel arayüzleri ve davranış uygulamasını içerir. Motor işlevselliği ve soyutlanmış ortak kavramlarla AudioPolicyManager.cpp benzer.
/common Temel sınıfları tanımlar (örneğin, giriş çıkış ses akışı profilleri, ses aygıtı tanımlayıcıları, ses yamaları ve ses bağlantı noktaları için veri yapıları). Bu daha önce AudioPolicyManager.cpp içinde tanımlanmıştı.
/engine

Belirli bir kullanım durumu için hangi cihazın ve birimlerin kullanılması gerektiğini tanımlayan kuralları uygular. Belirli bir oynatma veya yakalama kullanım durumu için uygun cihazı almak veya yönlendirmeyi değiştirebilecek bağlı cihazları veya harici durumu (yani, zorunlu kullanımın çağrı durumu) ayarlamak gibi genel parçayla standart bir arayüz uygular. karar.

İki sürümü mevcuttur: yapılandırılabilir ve varsayılan . Sürümün nasıl seçileceğine ilişkin bilgi için bkz. Parametre Çerçevesini Kullanarak Yapılandırma .

/engineconfigurable Parametre Çerçevesine dayanan politika motoru uygulaması (aşağıya bakın). Yapılandırma, Parametre Çerçevesini temel alır ve politikanın XML dosyalarıyla tanımlandığı yerdir.
/enginedefault Önceki Android Ses Politikası Yöneticisi uygulamalarına dayanan politika motoru uygulaması. Bu varsayılandır ve Nexus ve AOSP uygulamalarına karşılık gelen sabit kodlanmış kuralları içerir.
/service Bağlayıcı arayüzleri, iş parçacığı oluşturma ve çerçevenin geri kalanına yönelik arayüz ile kilitleme uygulamasını içerir.

Parametre Çerçevesini Kullanarak Yapılandırma

Ses politikası kodu, anlaşılmasını ve bakımını kolaylaştırmak için düzenlenirken aynı zamanda tamamen yapılandırma dosyaları tarafından tanımlanan bir ses politikasını da destekler. Organizasyon ve ses politikası tasarımı, parametrelerin işlenmesine yönelik eklenti tabanlı ve kural tabanlı bir çerçeve olan Intel'in Parametre Çerçevesini temel alır.

Yapılandırılabilir ses ilkesinin kullanılması, satıcı OEM'lerin şunları yapmasını sağlar:

  • Bir sistemin yapısını ve parametrelerini XML'de tanımlayın.
  • Açıklanan parametrelere erişmek için bir arka uç (eklenti) yazın (C++ dilinde) veya yeniden kullanın.
  • Belirli bir parametrenin belirli bir değeri alması gereken koşulları/kuralları (XML'de veya alana özgü bir dilde) tanımlayın.

AOSP Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml Parametre Çerçevesini kullanan bir ses politikası yapılandırma dosyası örneğini içerir. Ayrıntılar için Parametre Çerçevesi hakkındaki Intel belgelerine bakın.

Android 10 veya daha düşük sürümlerde, yapılandırılabilir ses politikası USE_CONFIGURABLE_AUDIO_POLICY oluşturma seçeneği kullanılarak seçilir. Android 11 veya sonraki sürümlerde, ses politikası motorunun sürümü audio_policy_configuration.xml dosyasında seçilir. Yapılandırılabilir ses ilkesi motorunu seçmek için globalConfiguration öğesinin engine_library niteliğinin değerini aşağıdaki örnekte olduğu gibi configurable olarak ayarlayın:

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

Ses politikası yönlendirme API'leri

Android 6.0, ses yaması/ses bağlantı noktası altyapısının üzerinde yer alan ve uygulama geliştiricilerinin bağlı ses kayıtları veya parçalar için belirli bir cihaz çıkışı veya girişi için bir tercih belirtmesine olanak tanıyan genel bir Numaralandırma ve Seçim API'sini kullanıma sundu.

Android 7.0'da, Numaralandırma ve Seçim API'si CTS testleriyle doğrulanır ve yerel C/C++ (OpenSL ES) ses akışlarına yönelik yönlendirmeyi içerecek şekilde genişletilir. Yerel akışların yönlendirilmesi, AudioTrack ve AudioRecord sınıflarına özel açık yönlendirme yöntemlerinin yerini alan, birleştiren ve kullanımdan kaldıran bir AudioRouting arabiriminin eklenmesiyle Java'da yapılmaya devam etmektedir.

Numaralandırma ve Seçim API'sine ilişkin ayrıntılar için Android yapılandırma arayüzlerine ve OpenSLES_AndroidConfiguration.h bakın. Ses yönlendirmeyle ilgili ayrıntılar için AudioRouting'e bakın.

Çok kanallı destek

Donanımınız ve sürücünüz HDMI aracılığıyla çok kanallı sesi destekliyorsa, ses akışını doğrudan ses donanımına gönderebilirsiniz (bu, AudioFlinger karıştırıcısını atlar, böylece iki kanala karıştırılmaz.) Ses HAL'i, bir çıkış akışı profilinin olup olmadığını ortaya çıkarmalıdır. çok kanallı ses yeteneklerini destekler. HAL yeteneklerini açığa çıkarırsa, varsayılan ilke yöneticisi HDMI üzerinden çok kanallı oynatmaya izin verir. Uygulama ayrıntıları için bkz. device/samsung/tuna/audio/audio_hw.c .

Ürününüzün çok kanallı bir ses çıkışı içerdiğini belirtmek için, ses ilkesi yapılandırma dosyasını ürününüzün çok kanallı çıkışını tanımlayacak şekilde düzenleyin. frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml dosyasındaki aşağıdaki örnek, dinamik bir kanal maskesini gösterir; bu, ses politikası yöneticisinin, bağlantı sonrasında HDMI havuzu tarafından desteklenen kanal maskelerini sorguladığı anlamına gelir.

Ayrıca AUDIO_CHANNEL_OUT_5POINT1 gibi statik bir kanal maskesi de belirleyebilirsiniz. AudioFlinger'ın mikseri, çok kanallı sesi desteklemeyen bir ses cihazına gönderildiğinde içeriği otomatik olarak stereoya karıştırır.

Medya codec bileşenleri

Donanımınızın ve sürücülerinizin desteklediği ses codec bileşenlerinin ürününüz için doğru şekilde bildirildiğinden emin olun. Ayrıntılar için bkz . Codec'leri Çerçeveye Sunma .