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 için ses politikası yöneticisinde önemli bir yeniden düzenleme içerir:

  • OEM'e özel yönlendirme stratejileri.
  • Aynı hacim eğrilerini kullanan eski akış türleri grupları için özelleştirilebilir hacim grupları.
  • Sabit kodlanmak yerine ses ilkesi motoru tarafından bildirilen yönlendirme stratejileri.
  • Ses ilkesi motoru tarafından yönetilen ses eğrileri ve grupları.
  • Ortak kod ve yapılandırılabilir kod arasında gelecekteki bir ayrım için hazırlık yapan ve daha zengin ses cihazı yönetimi sunan dahili yeniden düzenleme. Örneğin, ilke kurallarında yalnızca türünün değil tüm aygıt özelliklerinin kullanımı.

Android 7.0, ses topolojinizi açıklamak için bir ses ilkesi yapılandırma dosyası biçimini (XML) tanıttı.

Önceki Android sürümleri kullanılarak gerekli device/<company>/<device>/audio/audio_policy.conf ses cihazları ürününüze sunmak beyan etmek (eğer Galaxy Nexus ses donanımı için bu dosyanın bir örneğini görebilirsiniz device/samsung/tuna/audio/audio_policy.conf ). Bununla birlikte, CONF, televizyonlar ve otomobiller gibi dikeyler için karmaşık topolojileri tanımlamak için çok sınırlı olan basit, özel bir formattır.

Android 7.0 kaldırılan audio_policy.conf ve daha insan tarafından okunabilir olduğunu düzenleyerek ve araçları ayrıştırma geniş bir yelpazesine sahiptir ve karmaşık ses topolojileri tanımlamak için yeterince esnek olan bir XML dosya biçimini kullanarak ses topoloji tanımlamak için ilave destek. Android 7.0 kullanan USE_XML_AUDIO_POLICY_CONF yapılandırma dosyalarının XML biçimini seçmek için inşa bayrağı.

XML formatının avantajları

CONF dosyasında olduğu gibi, XML dosyası, çıktı ve girdi akışı profillerinin sayısını ve türlerini, oynatma ve yakalama için kullanılabilen cihazları ve ses özelliklerini tanımlamayı sağlar. Ayrıca, XML biçimi aşağıdaki geliştirmeleri sunar:

  • Android 10'da aynı anda birden fazla aktif kayıt uygulamasına izin verilir.
    • Eşzamanlılık durumu nedeniyle kayıt başlatma hiçbir zaman reddedilmez.
    • registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) yakalama yolu değişikliklerinin geri arama bildirdiğinde istemciler.
  • Aşağıdaki durumlarda, istemci sessiz ses örnekleri alır:
    • (Örneğin, bir gizlilik duyarlı kullanım durumunda VOICE_COMMUNICATION ) etkindir.
    • İ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ü en üstteyse, gizliliğe duyarlı olarak 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 oranları/kanal maskeleri 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ük bir kural, aynı HAL modülüne bağlı tüm aygıtların bağlanmasını mümkün kılarak, ses ilkesinin ses düzeltme eki API'leri ile istenen bağlantıları denetlemesini önlüyordu. XML biçiminde, topoloji açıklaması bağlantı sınırlamalarını tanımlar.
  • Destek standart A2DP, USB veya yeniden yönlendirme tanımları teslim tekrarlayarak önüne geçilmesini içerir.
  • Hacim eğrileri özelleştirilebilir. Önceden, birim tabloları sabit kodlanmıştı. XML formatında, hacim tabloları tanımlanır ve özelleştirilebilir.

En şablon frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml gösterileri kullanımda bu özelliklerin birçoğu.

Dosya biçimi ve konumu

Yeni ses ilke yapılandırma dosyasıdır audio_policy_configuration.xml ve bulunan /system/etc . Aşağıdaki örnekler, Android 12 ve Android 12'nin altındaki sürümler için XML dosya biçiminde basit bir ses ilkesi yapılandırmasını göstermektedir.

En üst düzey yapı, her bir modülün karma bağlantı noktaları, aygıt bağlantı noktaları ve yolların bir listesini içerdiği, her bir ses HAL donanım modülüne karşılık gelen modüller içerir:

  • Mix portları oynatma ve yakalama ses HAL de açılabilir akışları için olası yapılandırma profillerini tanımlamaktadır.
  • Cihaz bağlantı noktası (eğer varsa ve isteğe bağlı olarak adres ve ses özellikleri), tür ile bağlı olabilir cihazlarını anlatmaktadır.
  • Yolları cihaza bir cihaz veya akışına cihazdan yollarının açıklamasını sağlayan karışım noktası tanımlayıcısı ayrılır.

Hacim tabloları, bir UI 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 kapanımları

XML Inclusions (XInclude) yöntemi, diğer XML dosyalarında bulunan ses ilkesi 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 uymalıdır:

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

Standart Android Açık Kaynak Projesi (AOSP) ses HAL modülü yapılandırma bilgilerinin (hatalara açık olan) tüm ses ilkesi yapılandırma dosyalarına kopyalanmasını önlemek için şunları 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
  • Yeniden yönlendirmek submix: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Ses politikası kodu organizasyonu

AudioPolicyManager.cpp kolay korumak ve yapılandırmak yapmak için birçok modül ayrılmıştır. Organizasyonu frameworks/av/services/audiopolicy aşağıdaki modülleri içerir.

Modül Açıklama
/managerdefault Tüm uygulamalar için ortak olan genel arayüzleri ve davranış uygulamasını içerir. Benzer AudioPolicyManager.cpp motor işlevsellik ve ortak kavramlarla abstracted.
/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 içinde tanımlanmıştır AudioPolicyManager.cpp .
/engine

Belirli bir kullanım durumu için hangi aygıtı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 bir çağrı durumu) ayarlamak gibi genel parça ile standart bir arabirim uygular. karar.

İki versiyonu mevcuttur: yapılandırılabilir ve varsayılan. Versiyonunu nasıl seçileceği ile ilgili bilgi için bkz Parametre Framework kullanarak konfigürasyonun .

/engineconfigurable Parametre Çerçevesine dayanan politika motoru uygulaması (aşağıya bakın). Yapılandırma, Parametre Çerçevesini temel alır ve ilkenin XML dosyaları tarafından tanımlandığı yerdir.
/enginedefault Önceki Android Audio Policy Manager uygulamalarına dayalı politika motoru uygulaması. Bu varsayılandır ve Nexus ve AOSP uygulamalarına karşılık gelen sabit kodlanmış kuralları içerir.
/service Çerçevenin geri kalanına arabirim ile bağlayıcı arabirimleri, iş parçacığı oluşturma ve kilitleme uygulamasını içerir.

Parametre Çerçevesini kullanarak yapılandırma

Ses politikası kodu, tamamen yapılandırma dosyaları tarafından tanımlanan bir ses politikasını desteklerken, anlaşılmasını ve bakımını kolaylaştıracak şekilde düzenlenmiştir. Organizasyon ve ses politikası tasarımı, parametreleri işlemek için eklenti tabanlı ve kural tabanlı bir çerçeve olan Intel'in Parametre Çerçevesini temel alır.

Yapılandırılabilir ses ilkesini kullanmak, satıcı OEM'lerinin şunları yapmasını sağlar:

  • Bir sistemin yapısını ve parametrelerini XML'de tanımlayın.
  • Tanımlanan parametrelere erişmek için bir arka uç (eklenti) yazın (C++'da) 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 de Parametre Framework kullanan bir ses ilke yapılandırma dosyasının bir örneğini içerir Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml . Ayrıntılar için, Intel belgelerine bakın Parametre Framework .

Android 10 veya daha düşük, yapılandırılabilir ses politika inşa seçeneği kullanılarak seçilir USE_CONFIGURABLE_AUDIO_POLICY . Android 11 veya daha yılında ses politika motorunun sürümü seçilir audio_policy_configuration.xml dosyası. Yapılandırılabilir ses politika motorunu seçmek için, değerini ayarlamak engine_library oznıtelığı globalConfiguration için eleman configurable aşağıdaki örnekte olduğu gibi:

<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 tanıttı.

Android 7.0'da, Numaralandırma ve Seçim API'si CTS testleri ile doğrulanır ve yerel C/C++ (OpenSL ES) ses akışları için yönlendirmeyi içerecek şekilde genişletilir. Yerli akışların yönlendirme bir eklenmesiyle, Java yapılmaya devam AudioRouting arayüzünde olduğu hükümsüz kılar, birleştirir ve özgüydü açık yönlendirme yöntemlerini karşı çıkan AudioTrack ve AudioRecord sınıfları.

Sayım ve Seçim API ile ilgili ayrıntılar için, bakınız Android yapılandırma arayüzleri ve OpenSLES_AndroidConfiguration.h . Ses yönlendirme ile ilgili ayrıntılar için, bakınız AudioRouting .

Ç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 verebilirsiniz (bu, AudioFlinger mikserini atlar, böylece iki kanala indirgenmez.) Ses HAL'ı, bir çıkış akışı profili olup olmadığını göstermelidir. çok kanallı ses özelliklerini destekler. HAL yeteneklerini ortaya çı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ı açıklayacak şekilde düzenleyin. Aşağıdaki örnek frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml gösterileri ses politika yöneticisi bağlantıdan sonra HDMI lavaboya tarafından desteklenen kanal maskelerini sorgular demekse dinamik bir kanal maskesi.

Ayrıca statik kanal gibi maske belirtebilirsiniz AUDIO_CHANNEL_OUT_5POINT1 . AudioFlinger'ın mikseri, çok kanallı sesi desteklemeyen bir ses cihazına gönderildiğinde içeriği otomatik olarak stereoya indirger.

Medya kodekleri

Donanımınızın ve sürücülerinizin desteklediği ses kodeklerinin ürününüz için doğru şekilde bildirildiğinden emin olun. Ayrıntılar için bkz Çerçevesine Codec'lerinin maruz .