Rilis Android 10 menyertakan pemfaktoran ulang audio yang signifikan
pengelola kebijakan untuk memberikan fleksibilitas yang lebih besar guna mendukung kasus penggunaan otomotif yang kompleks:
Strategi pemilihan rute khusus OEM.
Grup volume yang dapat disesuaikan untuk grup jenis streaming lama menggunakan kurva volume yang sama.
Strategi pemilihan rute yang dideklarasikan oleh mesin kebijakan audio, bukan dijadikan hard code.
Kurva dan grup volume yang dikelola oleh mesin kebijakan audio.
Pemfaktoran ulang internal yang mempersiapkan pemisahan mendatang antara kode umum dan kode yang dapat dikonfigurasi
dan menawarkan pengelolaan perangkat audio yang lebih kaya. Misalnya, penggunaan semua
properti perangkat tidak hanya
jenisnya dalam aturan kebijakan.
Android 7.0 memperkenalkan format file konfigurasi kebijakan audio (XML) untuk
yang menjelaskan topologi audio Anda.
Rilis Android sebelumnya diperlukan menggunakan
device/<company>/<device>/audio/audio_policy.conf
untuk mendeklarasikan perangkat audio yang ada pada produk Anda (Anda dapat melihat contoh
file ini untuk perangkat keras audio Galaxy Nexus di
device/samsung/tuna/audio/audio_policy.conf). Namun, CONF adalah
format sederhana dan eksklusif yang terlalu terbatas
untuk menggambarkan topologi yang kompleks untuk
vertikal seperti televisi
dan mobil.
Android 7.0 menghentikan audio_policy.conf dan menambahkan dukungan
untuk mendefinisikan topologi audio menggunakan
format file XML yang lebih
dapat dibaca manusia, memiliki berbagai alat pengeditan dan penguraian, serta fleksibel
untuk menggambarkan topologi audio yang kompleks. Android 7.0 menggunakan
Flag build USE_XML_AUDIO_POLICY_CONF untuk memilih XML
format file konfigurasi.
Keuntungan format XML
Seperti dalam file CONF, file XML memungkinkan penentuan jumlah dan jenis
profil output dan stream input, perangkat yang dapat digunakan untuk pemutaran dan pengambilan, serta
atribut audio lainnya. Selain itu, format XML menawarkan penyempurnaan berikut:
Di Android 10, lebih dari satu aplikasi perekaman aktif
diizinkan secara bersamaan.
Awal perekaman tidak pernah ditolak karena situasi serentak.
registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb)
akan memberi tahu klien tentang perubahan jalur perekaman.
Dalam situasi berikut, klien mendapatkan sampel audio senyap:
Kasus penggunaan yang sensitif privasi (misalnya, VOICE_COMMUNICATION) aktif.
Klien tidak memiliki layanan latar depan atau UI latar depan.
Peran khusus diakui oleh kebijakan:
Layanan aksesibilitas: Dapat merekam meskipun kasus penggunaan yang sensitif privasi aktif.
Asisten: Dianggap sensitif terhadap privasi jika UI berada di atas.
Profil audio memiliki struktur yang mirip dengan deskriptor audio sederhana HDMI, memungkinkan
satu set frekuensi pengambilan sampel/masker saluran untuk setiap format audio.
Ada definisi eksplisit untuk semua kemungkinan koneksi antara perangkat dan streaming.
Sebelumnya, aturan implisit memungkinkan untuk
menghubungkan semua perangkat yang terpasang ke HAL yang sama
modul, mencegah kebijakan audio mengontrol koneksi yang diminta dengan patch audio
Google Cloud Platform. Dalam format XML, deskripsi topologi mendefinisikan batasan koneksi.
Dukungan untuk mencakup menghindari pengulangan A2DP standar, USB, atau pengiriman ulang rute
definisi.
Kurva volume dapat disesuaikan. Sebelumnya, tabel volume di-hardcode. Dalam XML
format, tabel volume dijelaskan dan dapat disesuaikan.
{i>Template<i} di
frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml
menunjukkan banyak dari
fitur yang digunakan.
Format file dan lokasi
File konfigurasi kebijakan audio baru adalah
audio_policy_configuration.xml dan berada di
/system/etc. Contoh berikut menunjukkan konfigurasi kebijakan audio sederhana di
Format file XML untuk Android 12 dan untuk versi di bawah
Android 12.
Struktur tingkat atas berisi modul yang sesuai dengan setiap HAL audio
modul hardware, dengan setiap modul memiliki daftar
porta campuran, porta perangkat, dan
rute:
Port campuran menjelaskan kemungkinan profil konfigurasi untuk aliran data
yang dapat dibuka di HAL audio
untuk diputar dan direkam.
Port perangkat menjelaskan perangkat yang dapat dihubungkan
jenisnya (dan secara opsional alamat dan properti audio, jika relevan).
Routes dipisahkan dari deskriptor port campuran,
memungkinkan deskripsi rute dari perangkat ke perangkat atau streaming ke perangkat.
Tabel volume adalah daftar titik sederhana yang menentukan kurva yang digunakan untuk menerjemahkan
dari indeks UI ke volume dalam dB. File penyertaan terpisah akan memberikan
yang sama, tetapi setiap kurva untuk kasus penggunaan dan kategori perangkat tertentu
akan ditimpa.
Metode Penyertaan XML (XInclude) dapat digunakan untuk menyertakan kebijakan audio
konfigurasi yang ada di file XML lainnya. Semua file yang disertakan harus
mengikuti struktur yang dijelaskan di atas dengan batasan berikut:
File hanya boleh berisi elemen tingkat atas.
File tidak boleh berisi elemen XInclude.
Penggunaan penyertaan untuk menghindari penyalinan Project Open Source Android (AOSP) standar
informasi konfigurasi modul HAL audio untuk semua konfigurasi kebijakan audio
(yang rentan terhadap error). File XML konfigurasi kebijakan audio standar
disediakan untuk HAL audio berikut:
AudioPolicyManager.cpp dibagi menjadi beberapa modul
untuk membuatnya mudah
dipelihara dan dikonfigurasi. Pengorganisasian
frameworks/av/services/audiopolicy mencakup
modul berikut ini.
Modul
Deskripsi
/managerdefault
Mencakup antarmuka generik dan implementasi perilaku yang umum untuk semua
aplikasi. Serupa dengan AudioPolicyManager.cpp dengan mesin
fungsi dan konsep umum
yang diabstraksikan.
/common
Menentukan class dasar (misalnya, struktur data untuk streaming audio output input
profil, deskriptor perangkat audio, patch audio, dan port audio). Hal ini sebelumnya
ditentukan di dalam AudioPolicyManager.cpp.
/engine
Mengimplementasikan aturan yang menentukan perangkat dan volume yang harus digunakan
kasus penggunaan tertentu. Ini mengimplementasikan antarmuka standar dengan bagian generik, seperti
untuk mendapatkan perangkat yang sesuai untuk kasus penggunaan pemutaran atau perekaman tertentu, atau untuk
menyetel perangkat terhubung atau status eksternal (yaitu, status panggilan penggunaan paksa) yang
dapat mengubah
keputusan {i>routing<i}.
Implementasi mesin kebijakan yang mengandalkan Framework Parameter (lihat di bawah).
Konfigurasi didasarkan pada Framework Parameter dan lokasi kebijakan
yang ditentukan oleh file XML.
/enginedefault
Penerapan mesin kebijakan berdasarkan Pengelola Kebijakan Audio Android sebelumnya
implementasi yang tepat. Ini adalah defaultnya dan mencakup aturan hard code yang
sesuai dengan implementasi Nexus dan AOSP.
/service
Termasuk antarmuka binder, threading, dan implementasi penguncian dengan
antarmuka ke seluruh kerangka kerja.
Konfigurasi menggunakan Framework Parameter
Kode kebijakan audio diatur
agar mudah dipahami dan
pertahankan sekaligus mendukung kebijakan audio yang didefinisikan sepenuhnya oleh konfigurasi
. Desain kebijakan organisasi dan audio didasarkan pada Parameter Intel
Framework, yaitu framework berbasis plugin dan aturan untuk menangani parameter.
Menggunakan kebijakan audio yang dapat dikonfigurasi memungkinkan OEM vendor untuk:
Menjelaskan struktur sistem dan parameternya dalam XML.
Tulis (di C++) atau gunakan kembali backend (plugin) untuk mengakses informasi yang dijelaskan
parameter.
Tentukan (dalam XML atau dalam bahasa khusus domain) kondisi/aturan yang menjadi
parameter yang diberikan harus mengambil nilai yang diberikan.
AOSP menyertakan contoh file konfigurasi kebijakan audio yang menggunakan Parameter
Framework di Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml. Sebagai
selengkapnya, lihat dokumentasi Intel tentang
Framework Parameter.
Di Android 10 atau yang lebih rendah, kebijakan audio yang dapat dikonfigurasi
dipilih menggunakan opsi build USE_CONFIGURABLE_AUDIO_POLICY.
Di Android 11 atau yang lebih tinggi, versi kebijakan audio
mesin dipilih dalam file audio_policy_configuration.xml.
Untuk memilih mesin kebijakan audio yang dapat dikonfigurasi, tetapkan nilai engine_library
elemen globalConfiguration menjadi configurable
seperti dalam contoh berikut:
Android 6.0 memperkenalkan Enumeration dan Selection API publik yang
di bagian atas infrastruktur patch/audio port audio dan mengizinkan aplikasi
pengembang untuk menunjukkan preferensi {i>output<i} atau
input perangkat tertentu untuk
rekaman audio atau trek yang terhubung.
Di Android 7.0, Enumeration and Selection API diverifikasi dengan uji CTS
dan diperluas hingga menyertakan perutean untuk streaming audio C/C++ (OpenSL ES) native.
Perutean stream native terus dilakukan di Java, dengan penambahan
antarmuka AudioRouting yang menggantikan, menggabungkan, dan tidak menggunakan lagi
metode perutean eksplisit yang spesifik untuk AudioTrack dan
Class AudioRecord.
Untuk mengetahui detail tentang Enumeration dan Selection API, lihat
Android
antarmuka konfigurasi dan OpenSLES_AndroidConfiguration.h.
Untuk mengetahui detail tentang pemilihan rute audio, baca
AudioRouting.
Dukungan multisaluran
Jika hardware dan driver Anda mendukung audio multichannel melalui HDMI, Anda dapat
menghasilkan output streaming audio langsung ke hardware audio (ini mengabaikan
Mixer AudioFlinger agar tidak di-downmix ke dua saluran.) HAL audio
harus memperlihatkan apakah profil streaming output mendukung audio multichannel
kemampuan IT. Jika HAL mengekspos kemampuannya, pengelola kebijakan default
memungkinkan pemutaran multisaluran melalui HDMI. Untuk detail penerapan, lihat
device/samsung/tuna/audio/audio_hw.c.
Untuk menentukan bahwa produk Anda berisi output audio multisaluran, edit
file konfigurasi kebijakan audio untuk mendeskripsikan output multichannel untuk
Google. Contoh berikut dari
frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml
menampilkan mask saluran dinamis, yang berarti pengelola kebijakan audio mengkueri saluran
mask yang didukung oleh sink HDMI setelah koneksi.
Anda juga dapat menentukan {i>
mask channel<i} statis seperti
AUDIO_CHANNEL_OUT_5POINT1. Mixer AudioFlinger melakukan downmix pada
konten ke stereo secara otomatis saat
dikirim ke perangkat audio yang tidak
mendukung audio multichannel.
Codec media
Pastikan codec audio yang didukung hardware dan driver Anda benar
dinyatakan untuk produk Anda. Untuk mengetahui detailnya, lihat
Mengekspos Codec ke
Framework.
Konten dan contoh kode di halaman ini tunduk kepada lisensi yang dijelaskan dalam Lisensi Konten. Java dan OpenJDK adalah merek dagang atau merek dagang terdaftar dari Oracle dan/atau afiliasinya.
Terakhir diperbarui pada 2024-08-23 UTC.
[null,null,["Terakhir diperbarui pada 2024-08-23 UTC."],[],[]]