Konfigurasikan kebijakan audio

Rilis Android 10 menyertakan pemfaktoran ulang yang signifikan pada pengelola kebijakan audio untuk memberikan lebih banyak fleksibilitas guna mendukung kasus penggunaan otomotif yang kompleks:

  • Strategi perutean khusus OEM.
  • Grup volume yang dapat disesuaikan untuk grup jenis aliran lama menggunakan kurva volume yang sama.
  • Strategi perutean dinyatakan oleh mesin kebijakan audio dan bukannya diberi kode keras.
  • Kurva volume dan grup dikelola oleh mesin kebijakan audio.
  • Pemfaktoran ulang internal mempersiapkan pemisahan di masa depan antara kode umum dan kode yang dapat dikonfigurasi serta menawarkan manajemen perangkat audio yang lebih kaya. Misalnya, penggunaan semua properti perangkat bukan hanya tipenya dalam aturan kebijakan.

Android 7.0 memperkenalkan format file konfigurasi kebijakan audio (XML) untuk menjelaskan topologi audio Anda.

Rilis Android sebelumnya memerlukan penggunaan 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 kompleks untuk vertikal seperti televisi dan mobil.

Android 7.0 tidak lagi menggunakan audio_policy.conf dan menambahkan dukungan untuk mendefinisikan topologi audio menggunakan format file XML yang lebih mudah dibaca manusia, memiliki beragam alat pengeditan dan penguraian, dan cukup fleksibel untuk mendeskripsikan topologi audio yang kompleks. Android 7.0 menggunakan flag build USE_XML_AUDIO_POLICY_CONF untuk memilih format XML file konfigurasi.

Keuntungan dari format XML

Seperti pada file CONF, file XML memungkinkan penentuan jumlah dan jenis profil aliran keluaran dan masukan, perangkat yang dapat digunakan untuk pemutaran dan pengambilan, dan atribut audio. Selain itu, format XML menawarkan peningkatan berikut:

  • Di Android 10, lebih dari satu aplikasi perekaman aktif diperbolehkan secara bersamaan.
    • Awal perekaman tidak pernah ditolak karena situasi konkurensi.
    • Callback registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) memberi tahu klien tentang perubahan jalur pengambilan.
  • Dalam situasi berikut, klien mendapatkan sampel audio senyap:
    • Kasus penggunaan yang sensitif terhadap 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 terhadap privasi aktif.
      • Asisten: Dianggap sensitif terhadap privasi jika UI berada di atas.
  • Profil audio memiliki struktur yang mirip dengan deskriptor audio sederhana HDMI, memungkinkan serangkaian laju pengambilan sampel/masker saluran yang berbeda untuk setiap format audio.
  • Ada definisi eksplisit untuk semua kemungkinan koneksi antara perangkat dan aliran. Sebelumnya, aturan implisit memungkinkan untuk menyambungkan semua perangkat yang terpasang ke modul HAL yang sama, mencegah kebijakan audio mengontrol koneksi yang diminta dengan API patch audio. Dalam format XML, deskripsi topologi mendefinisikan batasan koneksi.
  • Dukungan untuk penyertaan menghindari pengulangan definisi pengiriman A2DP, USB, atau rute ulang standar.
  • Kurva volume dapat disesuaikan. Sebelumnya, tabel volume di-hardcode. Dalam format XML, tabel volume dijelaskan dan dapat disesuaikan.

Templat di frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml menunjukkan banyak fitur yang digunakan.

Format dan lokasi file

File konfigurasi kebijakan audio yang baru adalah audio_policy_configuration.xml dan terletak di /system/etc . Contoh berikut menunjukkan konfigurasi kebijakan audio sederhana dalam format file XML untuk Android 12 dan versi di bawah Android 12.

Struktur tingkat atas berisi modul yang sesuai dengan setiap modul perangkat keras audio HAL, di mana setiap modul memiliki daftar port campuran, port perangkat, dan rute:

  • Port campuran menjelaskan kemungkinan profil konfigurasi untuk streaming yang dapat dibuka di HAL audio untuk pemutaran dan pengambilan.
  • Port perangkat menjelaskan perangkat yang dapat dihubungkan dengan jenisnya (dan secara opsional alamat dan properti audio, jika relevan).
  • Rute 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 menyediakan kurva default, namun setiap kurva untuk kasus penggunaan dan kategori perangkat tertentu dapat ditimpa.

Penyertaan file

Metode XML Inclusions (XInclude) dapat digunakan untuk menyertakan informasi konfigurasi kebijakan audio yang terletak di file XML lainnya. Semua file yang disertakan harus mengikuti struktur yang dijelaskan di atas dengan batasan berikut:

  • File hanya dapat berisi elemen tingkat atas.
  • File tidak boleh berisi elemen XInclude.

Gunakan include untuk menghindari penyalinan informasi konfigurasi modul HAL audio Proyek Sumber Terbuka Android (AOSP) standar ke semua file konfigurasi kebijakan audio (yang rentan terhadap kesalahan). File XML konfigurasi kebijakan audio standar disediakan untuk HAL audio berikut:

  • A2DP: a2dp_audio_policy_configuration.xml
  • Rutekan ulang submix: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Organisasi kode kebijakan audio

AudioPolicyManager.cpp dibagi menjadi beberapa modul untuk memudahkan pemeliharaan dan konfigurasi. Organisasi frameworks/av/services/audiopolicy mencakup modul berikut.

Modul Keterangan
/managerdefault Mencakup antarmuka umum dan penerapan perilaku yang umum untuk semua aplikasi. Mirip dengan AudioPolicyManager.cpp dengan fungsionalitas mesin dan konsep umum yang diabstraksi.
/common Mendefinisikan kelas dasar (misalnya, struktur data untuk profil aliran audio input-output, deskriptor perangkat audio, patch audio, dan port audio). Ini sebelumnya didefinisikan di dalam AudioPolicyManager.cpp .
/engine

Menerapkan aturan yang menentukan perangkat dan volume mana yang harus digunakan untuk kasus penggunaan tertentu. Ini mengimplementasikan antarmuka standar dengan bagian umum, seperti untuk mendapatkan perangkat yang sesuai untuk kasus penggunaan pemutaran atau pengambilan tertentu, atau untuk mengatur perangkat yang terhubung atau keadaan eksternal (yaitu, keadaan panggilan penggunaan paksa) yang dapat mengubah perutean keputusan.

Tersedia dalam dua versi: dapat dikonfigurasi dan default . Untuk informasi tentang cara memilih versi, lihat Konfigurasi menggunakan Parameter Framework .

/engineconfigurable Implementasi mesin kebijakan yang mengandalkan Parameter Framework (lihat di bawah). Konfigurasi didasarkan pada Parameter Framework dan kebijakan ditentukan oleh file XML.
/enginedefault Implementasi mesin kebijakan berdasarkan implementasi Android Audio Policy Manager sebelumnya. Ini adalah default dan mencakup aturan hard-code yang sesuai dengan implementasi Nexus dan AOSP.
/service Termasuk antarmuka pengikat, threading, dan implementasi penguncian dengan antarmuka ke seluruh kerangka kerja.

Konfigurasi menggunakan Parameter Framework

Kode kebijakan audio disusun agar mudah dipahami dan dipelihara sekaligus mendukung kebijakan audio yang ditentukan sepenuhnya oleh file konfigurasi. Desain organisasi dan kebijakan audio didasarkan pada Kerangka Parameter Intel, kerangka kerja berbasis plugin dan berbasis aturan untuk menangani parameter.

Menggunakan kebijakan audio yang dapat dikonfigurasi memungkinkan vendor OEM untuk:

  • Jelaskan struktur sistem dan parameternya dalam XML.
  • Tulis (dalam C++) atau gunakan kembali backend (plugin) untuk mengakses parameter yang dijelaskan.
  • Tetapkan (dalam XML atau dalam bahasa khusus domain) kondisi/aturan yang menjadi dasar parameter tertentu harus mengambil nilai tertentu.

AOSP menyertakan contoh file konfigurasi kebijakan audio yang menggunakan Parameter Framework di Frameworks/av/services/audiopolicy/engineconfigurable/parameter-framework/example/Settings/PolicyConfigurableDomains.xml . Untuk detailnya, lihat dokumentasi Intel pada Parameter Framework .

Di Android 10 atau lebih rendah, kebijakan audio yang dapat dikonfigurasi dipilih menggunakan opsi build USE_CONFIGURABLE_AUDIO_POLICY . Di Android 11 atau lebih tinggi, versi mesin kebijakan audio dipilih di file audio_policy_configuration.xml . Untuk memilih mesin kebijakan audio yang dapat dikonfigurasi, tetapkan nilai atribut engine_library dari elemen globalConfiguration menjadi configurable seperti pada contoh berikut:

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

API perutean kebijakan audio

Android 6.0 memperkenalkan API Enumerasi dan Seleksi publik yang berada di atas infrastruktur patch audio/port audio dan memungkinkan pengembang aplikasi menunjukkan preferensi untuk output atau input perangkat tertentu untuk rekaman atau trek audio yang terhubung.

Di Android 7.0, Enumeration and Selection API diverifikasi oleh pengujian CTS dan diperluas untuk menyertakan perutean untuk stream audio C/C++ (OpenSL ES) asli. Perutean aliran asli terus dilakukan di Java, dengan penambahan antarmuka AudioRouting yang menggantikan, menggabungkan, dan tidak lagi menggunakan metode perutean eksplisit yang khusus untuk kelas AudioTrack dan AudioRecord .

Untuk detail tentang Enumeration and Selection API, lihat antarmuka konfigurasi Android dan OpenSLES_AndroidConfiguration.h . Untuk detail tentang perutean audio, lihat AudioRouting .

Dukungan multi-saluran

Jika perangkat keras dan driver Anda mendukung audio multisaluran melalui HDMI, Anda dapat mengeluarkan aliran audio langsung ke perangkat keras audio (ini melewati mixer AudioFlinger sehingga tidak tercampur menjadi dua saluran.) Audio HAL harus memperlihatkan apakah profil aliran keluaran mendukung kemampuan audio multisaluran. Jika HAL memperlihatkan kemampuannya, pengelola kebijakan default mengizinkan pemutaran multisaluran melalui HDMI. Untuk detail implementasi, lihat device/samsung/tuna/audio/audio_hw.c .

Untuk menentukan bahwa produk Anda berisi keluaran audio multisaluran, edit file konfigurasi kebijakan audio untuk menjelaskan keluaran multisaluran untuk produk Anda. Contoh berikut dari frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml menunjukkan masker saluran dinamis , yang berarti bahwa manajer kebijakan audio menanyakan masker saluran yang didukung oleh sink HDMI setelah koneksi.

Anda juga dapat menentukan masker saluran statis seperti AUDIO_CHANNEL_OUT_5POINT1 . Mixer AudioFlinger menurunkan konten ke stereo secara otomatis saat dikirim ke perangkat audio yang tidak mendukung audio multisaluran.

Codec media

Pastikan codec audio yang didukung perangkat keras dan driver Anda dinyatakan dengan benar untuk produk Anda. Untuk detailnya, lihat Mengekspos Codec ke Framework .