27 Mart 2025'ten itibaren AOSP'yi derlemek ve AOSP'ye katkıda bulunmak için aosp-main yerine android-latest-release kullanmanızı öneririz. Daha fazla bilgi için AOSP'de yapılan değişiklikler başlıklı makaleyi inceleyin.
Koleksiyonlar ile düzeninizi koruyun
İçeriği tercihlerinize göre kaydedin ve kategorilere ayırın.
Android 10 sürümünde, karmaşık otomotiv kullanım alanlarını desteklemek için daha fazla esneklik sağlamak üzere ses politikası yöneticisinde önemli bir yeniden düzenleme yapıldı:
OEM'e özgü yönlendirme stratejileri.
Aynı hacim eğrilerini kullanan eski akış türü grupları için özelleştirilebilir hacim grupları.
Ses politikası motoru tarafından bildirilen yönlendirme stratejileri, sabit kodlanmaz.
Ses politikası motoru tarafından yönetilen ses seviyesi eğrileri ve grupları.
Ortak kod ile yapılandırılabilir kod arasında gelecekte yapılacak bir ayrılmaya hazırlık için dahili yeniden düzenleme yapıldı ve daha kapsamlı ses cihazı yönetimi sunuldu. Örneğin, politika kurallarında yalnızca cihaz türü değil, tüm cihaz özelliklerinin kullanılması.
Android 7.0, ses topolojinizi tanımlamak için ses politikası yapılandırma dosyası biçimini (XML) kullanıma sundu.
Önceki Android sürümlerinde, ürününüzde bulunan ses cihazlarını bildirmek için
device/<company>/<device>/audio/audio_policy.conf
kullanılması gerekiyordu (Galaxy Nexus ses donanımı için bu dosyanın bir örneğini
device/samsung/tuna/audio/audio_policy.conf bölümünde görebilirsiniz). Ancak CONF, televizyon ve otomobil gibi sektörlerdeki karmaşık topolojileri tanımlamak için çok sınırlı olan basit ve tescilli bir biçimdir.
Android 7.0, audio_policy.conf desteğini sonlandırdı ve daha okunabilir, çok çeşitli düzenleme ve ayrıştırma araçlarına sahip olan ve karmaşık ses topolojilerini tanımlayabilecek 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ı
XML dosyası, CONF dosyasında olduğu gibi çıkış ve giriş akışı profillerinin sayısını ve türlerini, oynatma ve yakalama için kullanılabilir 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 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 arama, istemcileri yakalama yolu değişiklikleri konusunda bilgilendirir.
Aşağıdaki durumlarda istemciye sessiz ses örnekleri gönderilir:
Gizliliğe duyarlı bir kullanım alanı (ör. VOICE_COMMUNICATION) etkinse
İstemcinin ön plan hizmeti veya ön plan kullanıcı arayüzü yok.
Politika tarafından tanınan özel roller:
Erişilebilirlik hizmeti: Gizliliğe duyarlı bir kullanım alanı etkin olsa bile kayıt yapabilir.
Asistan: Kullanıcı arayüzü ü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 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 için net tanımlar vardır.
Daha önce, aynı HAL modülüne bağlı tüm cihazların bağlanmasına olanak tanıyan örtülü bir kural vardı. Bu kural, ses yaması API'leri ile istenen bağlantıların ses politikası tarafından kontrol edilmesini engelliyordu. XML biçiminde, topoloji açıklaması bağlantı sınırlamalarını tanımlar.
İçerir için destek, standart A2DP, USB veya yeniden yönlendirme gönderim tanımlarının tekrar edilmesini önler.
Ses eğrileri özelleştirilebilir. Daha önce, hacim tabloları sabit kodluydu. Hacim tabloları XML biçiminde açıklanır ve özelleştirilebilir.
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml adresindeki şablonda bu özelliklerin birçoğunun kullanıldığı gösterilmektedir.
Dosya biçimi ve konumu
Yeni ses politikası yapılandırma dosyası audio_policy_configuration.xml olup /system/etc konumunda bulunur. Aşağıdaki örneklerde, Android 12 ve Android 12'den önceki 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'i donanım modülüne karşılık gelen modüller içerir. Her modülde miks bağlantı noktaları, cihaz bağlantı noktaları ve rotaların listesi bulunur:
Karıştırma bağlantı noktaları, oynatma ve yakalama için ses HAL'de açılabilecek akışların olası yapılandırma profillerini açıklar.
Cihaz bağlantı noktaları, türleriyle (ve isteğe bağlı olarak adres ve ses özellikleri, uygunsa) birlikte bağlanabilen cihazları tanımlar.
Routes, karışım bağlantı noktası tanımlayıcısından ayrılır.
Bu sayede, cihazdan cihaza veya akıştan cihaza yönlendirmeler tanımlanabilir.
Hacim tabloları, bir kullanıcı arayüzü indeksinden dB cinsinden hacme çevirmek için kullanılan eğriyi tanımlayan basit nokta listeleridir. Ayrı bir dahil etme dosyası varsayılan eğriler sağlar ancak belirli bir kullanım alanı ve cihaz kategorisi için her eğri geçersiz kılınabilir.
Diğer XML dosyalarında bulunan ses politikası yapılandırma bilgilerini eklemek için XML Inclusions (XInclude) yöntemi kullanılabilir. Dahil edilen tüm dosyalar, aşağıdaki kısıtlamalarla birlikte yukarıda açıklanan yapıya uygun olmalıdır:
Dosyalar yalnızca üst düzey öğeler içerebilir.
Dosyalar XInclude öğeleri içeremez.
Tüm ses politikası yapılandırma dosyalarına standart Android Açık Kaynak Projesi (AOSP) ses HAL modülü yapılandırma bilgilerinin kopyalanmasını önlemek için (hataya açık bir durumdur) dahil etme özelliğini kullanın. Aşağıdaki ses HAL'leri için standart bir ses politikası yapılandırması 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ı kodu kuruluşu
AudioPolicyManager.cpp, kolayca sürdürülebilmesi ve yapılandırılabilmesi için çeşitli modüllere ayrılmıştır. frameworks/av/services/audiopolicy'nın yapısında aşağıdaki modüller yer alır.
Modül
Açıklama
/managerdefault
Tüm uygulamalarda ortak olan genel arayüzleri ve davranış uygulamalarını içerir. AudioPolicyManager.cpp ile benzerdir. Motor işlevselliği ve ortak kavramlar soyutlanmıştır.
/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 daha önce AudioPolicyManager.cpp içinde tanımlanıyordu.
/engine
Belirli bir kullanım alanında hangi cihazın ve birimlerin kullanılacağını tanımlayan kuralları uygular. Bu arayüz, belirli bir oynatma veya yakalama kullanım alanına uygun cihazı almak ya da yönlendirme kararını değiştirebilecek bağlı cihazları veya harici durumu (ör. zorunlu kullanımın çağrı durumu) ayarlamak gibi genel bölümle standart bir arayüz uygular.
Parametre çerçevesine dayalı politika motoru uygulaması (aşağıya bakın).
Yapılandırma, parametre çerçevesine dayanır ve politika XML dosyalarıyla tanımlanır.
/enginedefault
Önceki Android Audio Policy Manager uygulamalarına dayalı politika motoru uygulaması. Bu, varsayılan seçenektir ve Nexus ile AOSP uygulamalarına karşılık gelen sabit kodlu kurallar içerir.
/service
Binder arayüzleri, iş parçacığı oluşturma ve çerçeve geri kalanıyla arayüz oluşturma için kilitleme uygulaması içerir.
Parametre çerçevesini kullanarak yapılandırma
Ses politikası kodu, tamamen yapılandırma dosyalarıyla tanımlanan bir ses politikasını desteklerken anlaşılmasını ve bakımının yapılmasını kolaylaştıracak şekilde düzenlenmiştir. Düzen ve ses politikası tasarımı, parametreleri işlemek için kullanılan eklenti tabanlı ve kural tabanlı bir çerçeve olan Intel'in Parameter Framework'üne dayanmaktadır.
Yapılandırılabilir ses politikasını kullanmak, satıcıların OEM'lerin aşağıdakileri yapmasını sağlar:
Bir sistemin yapısını ve parametrelerini XML olarak açıklayın.
Belirtilen parametrelere erişmek için bir arka uç (eklenti) yazın (C++ ile) veya yeniden kullanın.
Belirli bir parametrenin belirli bir değeri alması gereken koşulları/kuralları (XML veya alana özgü bir dilde) tanımlayın.
AOSP, Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml adresinde Parameter Framework'ü kullanan bir ses politikası yapılandırma dosyası örneği içerir. Ayrıntılar için Parameter Framework 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 belirlenir.
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 engine_library
öğesinin globalConfiguration özelliğinin değerini aşağıdaki örnekte olduğu gibi configurable
olarak ayarlayın:
Android 6.0, ses yaması/ses bağlantı noktası altyapısının üzerinde yer alan ve uygulama geliştiricilerin bağlı ses kayıtları veya parçaları için belirli bir cihaz çıkışı ya da girişiyle ilgili tercihlerini belirtmelerine olanak tanıyan herkese açık bir Numaralandırma ve Seçim API'si sunmuştur.
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ı için yönlendirme içerecek şekilde genişletilir.
Yerel akışların yönlendirilmesi, AudioRouting ve AudioRecord sınıflarına özgü olan açık yönlendirme yöntemlerinin yerine geçen, bunları birleştiren ve kullanımdan kaldıran bir AudioRouting arayüzünün eklenmesiyle Java'da yapılmaya devam ediyor.AudioTrack
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 başlıklı makaleleri inceleyin.
Ses yönlendirme hakkında ayrıntılı bilgi için AudioRouting başlıklı makaleyi inceleyin.
Çok kanallı destek
Donanımınız ve sürücünüz HDMI üzerinden çok kanallı sesi destekliyorsa ses akışını doğrudan ses donanımına aktarabilirsiniz (Bu işlem, AudioFlinger mikserini atlayarak iki kanala mikslenmesini önler). Ses HAL'si, bir çıkış akışı profilinin çok kanallı ses özelliklerini destekleyip desteklemediğini göstermelidir. HAL, özelliklerini kullanıma sunarsa 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ı düzenleyerek ürününüzün çok kanallı çıkışını açıklayın. frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xmladresindeki aşağıdaki örnekte, dinamik bir kanal maskesi gösterilmektedir. Bu, ses politikası yöneticisinin bağlantı kurulduktan sonra HDMI alıcısı tarafından desteklenen kanal maskelerini sorguladığı anlamına gelir.
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 stereo sese dönüştürür.
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 beyan edildiğinden emin olun. Ayrıntılar için Exposing Codecs to the
Framework 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.
Son güncelleme tarihi: 2025-10-10 UTC.
[[["Anlaması kolay","easyToUnderstand","thumb-up"],["Sorunumu çözdü","solvedMyProblem","thumb-up"],["Diğer","otherUp","thumb-up"]],[["İhtiyacım olan bilgiler yok","missingTheInformationINeed","thumb-down"],["Çok karmaşık / çok fazla adım var","tooComplicatedTooManySteps","thumb-down"],["Güncel değil","outOfDate","thumb-down"],["Çeviri sorunu","translationIssue","thumb-down"],["Örnek veya kod sorunu","samplesCodeIssue","thumb-down"],["Diğer","otherDown","thumb-down"]],["Son güncelleme tarihi: 2025-10-10 UTC."],[],[]]