Mengonfigurasi kebijakan audio

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.

Penyertaan file

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:

  • A2DP: a2dp_audio_policy_configuration.xml
  • Submix rutekan ulang: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Pengaturan kode kebijakan audio

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}.

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

/engineconfigurable 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:

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

API pemilihan rute kebijakan audio

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.