Android 10 sürümünde, otomotivle ilgili karmaşık kullanım alanlarını destekleme konusunda daha fazla esneklik sağlamak için ses politikası yöneticisinde önemli bir yeniden düzenleme yapılıyor:
OEM'ye özgü yönlendirme stratejileri.
Aynı hacim eğrilerinin kullanıldığı eski akış türü grupları için özelleştirilebilir hacim grupları.
Sabit kodlanmış olmak yerine ses politikası motoru tarafından tanımlanan 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 gelecekte yapılacak bir bölünmeye hazırlanmak ve daha zengin ses cihazı yönetimi sunmak için dahili yeniden düzenleme. Örneğin, politika kurallarında cihaz türünün yanı sıra tüm cihaz özelliklerinin kullanılması.
Android 7.0, ses topolojinizi tanımlamak için ses politikası yapılandırma dosya biçimini (XML) kullanıma sundu.
Önceki Android sürümlerinde, ürününüzdeki ses cihazlarını belirtmek için device/<company>/<device>/audio/audio_policy.conf dosyasının kullanılması gerekiyordu (Galaxy Nexus ses donanımı için bu dosyanın bir örneğini device/samsung/tuna/audio/audio_policy.conf'te görebilirsiniz). Ancak CONF, televizyonlar ve otomobiller gibi sektörler için karmaşık topolojileri tanımlamak için çok sınırlı olan basit, özel bir biçimdir.
Android 7.0, audio_policy.conf desteğini sonlandırdı ve 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 biçimi kullanarak ses topolojisi tanımlama desteği ekledi. Android 7.0, yapılandırma dosyalarının XML biçimini seçmek için USE_XML_AUDIO_POLICY_CONF derleme işaretini kullanır.
XML biçiminin avantajları
CONF dosyasında olduğu gibi XML dosyası da çıkış ve giriş akış profili 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 de sunar:
Android 10'da aynı anda birden fazla etkin kayıt uygulamasına izin verilir.
Kayıt başlatma işlemi, eşzamanlılık durumu nedeniyle hiçbir zaman reddedilmez.
registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) geri çağırması, istemcileri 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.
İstemcide ön plan hizmeti veya ön plan kullanıcı arayüzü yoktur.
Özel roller politika tarafından tanınır:
Erişilebilirlik hizmeti: Gizliliğe duyarlı bir kullanım alanı etkin olsa bile kayıt yapabilir.
Asistan: Kullanıcı arayüzü üstteyse gizlilik açısından hassas kabul edilir.
Ses profilleri, HDMI basit ses tanımlayıcılarına benzer bir yapıya sahiptir. Bu yapı, her ses biçimi için farklı bir örnekleme hızı/kanal maskesi grubu sağlar.
Cihazlar ve akışlar arasındaki tüm olası bağlantıların açık tanımları vardır.
Önceden, ses politikasının ses yaması API'leriyle istenen bağlantıları kontrol etmesini engelleyen bir varsayılan kural, aynı HAL modülüne bağlı tüm cihazların bağlanmasını sağlıyordu. XML biçiminde, topoloji açıklaması bağlantı sınırlamalarını tanımlar.
Dahildir desteği, standart A2DP, USB veya yeniden yönlendirme gönderme tanımlarının tekrarlanmasını önler.
Ses eğrileri özelleştirilebilir. Önceden, hacim tabloları sabit kodluydu. XML biçiminde, hacim tabloları açıklanır ve özelleştirilebilir.
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml adresindeki şablonda bu özelliklerin birçoğunun kullanımda olduğu gösterilmektedir.
Dosya biçimi ve konumu
Yeni ses politikası yapılandırma dosyası audio_policy_configuration.xml olup /system/etc konumundadır. 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 ses HAL donanım modülüne karşılık gelen modüller içerir. Her modülde, mix bağlantı noktalarının, cihaz bağlantı noktalarının ve rotaların listesi bulunur:
Karışık bağlantı noktaları, oynatma ve yakalama için ses HAL'de açılabilen akışlar için olası yapılandırma profillerini açıklar.
Cihaz bağlantı noktaları, bağlanabilecek cihazları türleriyle (ve isteğe bağlı olarak adres ve ses özellikleri varsa bunlarla birlikte) tanımlar.
Rotalar, karma bağlantı noktası tanımlayıcısından ayrılarak cihazdan cihaza veya cihazdan cihaza akışla ilgili rotaların açıklanmasına olanak tanır.
Ses seviyesi tabloları, kullanıcı arayüzü indeksinden dB cinsinden ses seviyesine çevirmek için kullanılan eğriyi tanımlayan basit nokta listeleridir. Varsayılan eğriler ayrı bir dahil etme dosyasında sağlanır ancak belirli bir kullanım alanı ve cihaz kategorisine ait her eğri üzerine yazılabilir.
XML dahil etme (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 birlikte yukarıda açıklanan yapıya uymalı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 politikası yapılandırma dosyalarına kopyalanmasını önlemek için de bu yöntemi kullanabilirsiniz (hatalara açık olabilir). Aşağıdaki ses HAL'leri için standart bir ses politikası yapılandırma XML dosyası sağlanır:
A2DP:a2dp_audio_policy_configuration.xml
Alt miksi yeniden yönlendirme:rsubmix_audio_policy_configuration.xml
USB:usb_audio_policy_configuration.xml
Ses politikası kodunun düzenlenmesi
AudioPolicyManager.cpp, bakım ve yapılandırmayı kolaylaştırmak için birkaç modüle ayrılmıştır. frameworks/av/services/audiopolicy kuruluşu aşağıdaki modülleri içerir.
Modül
Açıklama
/managerdefault
Tüm uygulamalarda yaygın olarak kullanılan genel arayüzleri ve davranış uygulamasını içerir. Motor işlevselliği ve ortak kavramların soyutlandığı AudioPolicyManager.cpp ile benzerdir.
/common
Temel sınıfları (ör. giriş çıkış ses akışı profilleri, ses cihazı tanımlayıcıları, ses yamaları ve ses bağlantı noktaları için veri yapıları) tanımlar. Bu ayar daha önce AudioPolicyManager.cpp içinde tanımlanıyordu.
/engine
Belirli bir kullanım alanı için hangi cihazın ve hangi birimlerin kullanılacağını tanımlayan kuralları uygular. Belirli bir oynatma veya yakalama kullanım alanı için uygun cihazı almak ya da yönlendirme kararını değiştirebilecek bağlı cihazları veya harici durumu (yani zorunlu kullanım çağrısı durumu) ayarlamak gibi genel kısımla standart bir arayüz uygular.
Parametre çerçevesine dayalı politika motoru uygulaması (aşağıya bakın).
Yapılandırma, Parametre Çerçevesi'ne dayanır ve politikanın XML dosyaları tarafından tanımlandığı yere bağlıdır.
/enginedefault
Önceki Android Audio Policy Manager uygulamalarını temel alan politika motoru uygulaması. Bu varsayılan ayardır ve Nexus ile AOSP uygulamalarına karşılık gelen sabit kodlu kuralları içerir.
/service
Bağlayıcı arayüzleri, mesaj dizileri ve çerçevenin geri kalanıyla arayüz üzerinden kilitleme uygulamasını içerir.
Parametre çerçevesini kullanarak yapılandırma
Ses politikası kodu, anlaşılmasını ve sürdürülmesini kolaylaştırmak için düzenlenirken tamamen yapılandırma dosyalarıyla 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 Parametre Çerçevesi'ni temel alır.
Yapılandırılabilir ses politikasının kullanılması, tedarikçi OEM'lerin şunları yapmasını sağlar:
Bir sistemin yapısını ve parametrelerini XML olarak tanımlayın.
Açıklanan parametrelere erişmek için arka uç (C++) yazın veya yeniden kullanın (eklenti).
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 adresinde Parametre Çerçevesi'ni kullanan bir ses politikası yapılandırma dosyası örneği içerir. Ayrıntılar için Parametre Çerçevesi ile ilgili Intel dokümanlarına bakın.
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ı motorunun sürümü audio_policy_configuration.xml dosyasında seçilir.
Yapılandırılabilir ses politikası motorunu seçmek için globalConfiguration öğesinin engine_libraryözelliğinin değerini aşağıdaki örnekte gösterildiği gibi configurable olarak ayarlayın:
Android 6.0, ses yaması/ses bağlantı noktası altyapısının üst kısmında bulunan ve uygulama geliştiricilerin bağlı ses kayıtları veya kanalları için belirli bir cihaz çıkışı veya girişi için tercih belirtmelerini sağlayan, herkese açık bir Numaralandırma ve Seçim API'sini kullanıma sunmuştur.
Android 7.0'da, Numaralama 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önlendirmesi Java'da yapılmaya devam eder. Buna ek olarak, AudioTrack ve AudioRecord sınıflarına özgü açık yönlendirme yöntemlerinin yerini alan, bunları birleştiren ve desteğini sonlandıran bir AudioRouting arayüzü eklenmiştir.
Numaralandırma ve Seçim API'si hakkında ayrıntılı bilgi için Android yapılandırma arayüzleri ve OpenSLES_AndroidConfiguration.h konularına bakın.
Ses yönlendirme hakkında ayrıntılı bilgi için AudioRouting bölümüne 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 işlem, AudioFlinger mikserini atlayarak iki kanala indirgenmesini engeller.) Ses HAL'i, bir çıkış akışı profilinin çok kanallı ses özelliklerini destekleyip desteklemediğini göstermelidir. HAL, özelliklerini gösterirse varsayılan politika yöneticisi HDMI üzerinden çok kanallı oynatmaya izin verir. Uygulama ayrıntıları için device/samsung/tuna/audio/audio_hw.c başlıklı makaleyi inceleyin.
Ürününüzün çok kanallı ses çıkışı içerdiğini belirtmek için ses politikası 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'deki aşağıdaki örnekte dinamik bir kanal maskesi gösterilmektedir. Bu, ses politikası yöneticisinin bağlantıdan sonra HDMI alıcı tarafından desteklenen kanal maskelerini sorguladığını gösterir.
Ayrıca AUDIO_CHANNEL_OUT_5POINT1 gibi statik bir kanal maskesi de belirtebilirsiniz. AudioFlinger'ın mikseri, çok kanallı sesi desteklemeyen bir ses cihazına gönderildiğinde içeriği otomatik olarak stereoya indirgetir.
Medya codec'leri
Donanımınızın ve sürücülerinizin desteklediği ses codec'lerinin ürününüz için doğru şekilde tanımlandığından emin olun. Ayrıntılar için Codec'leri Çerçeveye Açma başlıklı makaleyi inceleyin.
Bu sayfadaki içerik ve kod örnekleri, İçerik Lisansı sayfasında açıklanan lisanslara tabidir. Java ve OpenJDK, Oracle ve/veya satış ortaklarının tescilli ticari markasıdır.