Google berkomitmen untuk mendorong terwujudnya keadilan ras bagi komunitas Kulit Hitam. Lihat caranya.

Mengonfigurasi Kebijakan Audio

Rilis Android 10 menyertakan pemfaktoran ulang yang signifikan dari 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 dideklarasikan oleh mesin kebijakan audio alih-alih dikodekan secara keras.
  • Kurva volume dan grup yang dikelola oleh mesin kebijakan audio.
  • Pemfaktoran ulang internal mempersiapkan pemisahan di masa mendatang antara kode umum dan kode yang dapat dikonfigurasi dan menawarkan manajemen perangkat audio yang lebih kaya. Misalnya, penggunaan semua properti perangkat bukan hanya jenisnya dalam aturan kebijakan.

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

Sebelumnya rilis Android diperlukan menggunakan device/<company>/<device>/audio/audio_policy.conf untuk menyatakan perangkat audio hadir pada produk Anda (Anda dapat melihat contoh file ini untuk audio hardware Galaxy Nexus di device/samsung/tuna/audio/audio_policy.conf ). Namun, CONF adalah format berpemilik sederhana yang terlalu terbatas untuk menggambarkan topologi kompleks untuk vertikal seperti televisi dan mobil.

Android 7.0 usang audio_policy.conf dan menambahkan dukungan untuk mendefinisikan topologi audio menggunakan format file XML yang lebih terbaca-manusia, memiliki berbagai macam editing dan parsing alat, dan cukup fleksibel untuk menggambarkan topologi audio yang kompleks. Android 7.0 menggunakan USE_XML_AUDIO_POLICY_CONF membangun bendera untuk memilih format XML file config.

Keuntungan dari format XML

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

  • Di Android 10, lebih dari satu aplikasi perekaman aktif diizinkan secara bersamaan.
    • Perekaman mulai tidak pernah ditolak karena situasi konkurensi.
    • The registerAudioRecordingCallback(AudioManager.AudioRecordingCallback cb) melakukan notifikasi panggilan balik klien perubahan capture jalan.
  • Dalam situasi berikut, klien mendapatkan sampel audio senyap:
    • Sebuah use case privasi-sensitif (misalnya, VOICE_COMMUNICATION ) aktif.
    • Klien tidak memiliki layanan latar depan atau UI latar depan.
    • Peran khusus diakui oleh kebijakan:
      • Layanan aksesibilitas: Dapat merekam bahkan jika kasus penggunaan sensitif privasi aktif.
      • Asisten: Dianggap sensitif 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 menghubungkan 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 mencakup Menghindari mengulangi A2DP standar, USB, atau mengubah rute mengirimkan definisi.
  • Kurva volume dapat disesuaikan. Sebelumnya, tabel volume di-hardcode. Dalam format XML, tabel volume dijelaskan dan dapat dikustomisasi.

Template di frameworks/av/services/audiopolicy/config/audio_policy_configuration.xml menunjukkan banyak fitur ini digunakan.

Format dan lokasi file

File konfigurasi kebijakan audio 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 untuk 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 menggambarkan profil konfigurasi mungkin bagi aliran yang dapat dibuka di HAL audio untuk pemutaran dan menangkap.
  • Port perangkat menggambarkan perangkat yang dapat dilampirkan dengan jenis mereka (dan alamat opsional dan sifat audio, jika relevan).
  • -Rute dipisahkan dari pelabuhan campuran descriptor, memungkinkan deskripsi rute dari perangkat ke perangkat atau aliran ke perangkat.

Tabel volume adalah daftar titik sederhana yang mendefinisikan kurva yang digunakan untuk menerjemahkan dari indeks UI ke volume dalam dB. File sertakan terpisah menyediakan kurva default, tetapi setiap kurva untuk kasus penggunaan dan kategori perangkat tertentu dapat ditimpa.

Inklusi file

Metode Penyertaan XML (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 termasuk untuk menghindari penyalinan informasi konfigurasi modul HAL audio Android Open Source Project (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
  • Reroute submix: rsubmix_audio_policy_configuration.xml
  • USB: usb_audio_policy_configuration.xml

Organisasi kode kebijakan audio

AudioPolicyManager.cpp dibagi menjadi beberapa modul untuk membuatnya mudah untuk mempertahankan dan configure. Organisasi frameworks/av/services/audiopolicy mencakup modul berikut.

Modul Keterangan
/managerdefault Mencakup antarmuka umum dan implementasi perilaku yang umum untuk semua aplikasi. Mirip dengan AudioPolicyManager.cpp dengan fungsi mesin dan konsep umum disarikan.
/common Mendefinisikan kelas dasar (misalnya, struktur data untuk profil aliran audio output input, 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 generik, seperti untuk mendapatkan perangkat yang sesuai untuk kasus penggunaan pemutaran atau pengambilan yang diberikan, atau untuk mengatur perangkat yang terhubung atau status eksternal (yaitu, status panggilan penggunaan paksa) yang dapat mengubah perutean keputusan.

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

/engineconfigurable Implementasi mesin kebijakan yang mengandalkan Kerangka Parameter (lihat di bawah). Konfigurasi didasarkan pada Kerangka Parameter dan di mana kebijakan ditentukan oleh file XML.
/enginedefault Implementasi mesin kebijakan berdasarkan implementasi Pengelola Kebijakan Audio Android 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 Kerangka Parameter

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

Menggunakan kebijakan audio yang dapat dikonfigurasi memungkinkan OEM vendor untuk:

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

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

Dalam Android 10 atau lebih rendah, kebijakan audio yang dikonfigurasi dipilih menggunakan build pilihan USE_CONFIGURABLE_AUDIO_POLICY . Dalam Android 11 atau lebih tinggi, versi mesin kebijakan audio yang dipilih dalam audio_policy_configuration.xml berkas. Untuk memilih mesin kebijakan audio yang dapat dikonfigurasi, menetapkan nilai dari engine_library atribut dari globalConfiguration elemen configurable seperti dalam contoh berikut:

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

API perutean kebijakan audio

Android 6.0 memperkenalkan Enumeration and Selection API publik yang berada di atas patch audio/infrastruktur port audio dan memungkinkan pengembang aplikasi untuk 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 aliran audio C/C++ (OpenSL ES) asli. Routing aliran asli terus dilakukan di Jawa, dengan penambahan AudioRouting antarmuka yang menggantikan, menggabungkan, dan deprecates metode eksplisit routing yang khusus untuk AudioTrack dan AudioRecord kelas.

Untuk rincian tentang Pencacahan dan Seleksi API, lihat konfigurasi Android interface dan OpenSLES_AndroidConfiguration.h . Untuk detail pada routing 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 di-downmix ke dua saluran.) HAL audio harus memperlihatkan apakah profil aliran keluaran mendukung kemampuan audio multisaluran. Jika HAL memperlihatkan kemampuannya, manajer kebijakan default memungkinkan pemutaran multisaluran melalui HDMI. Untuk rincian pelaksanaan, 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. Berikut contoh dari frameworks/av/services/audiopolicy/config/primary_audio_policy_configuration_tv.xml menunjukkan saluran masker dinamis, yang berarti bahwa manajer kebijakan audio yang query masker saluran didukung oleh wastafel HDMI setelah sambungan.

Anda juga dapat menentukan saluran statis topeng 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 oleh perangkat keras dan driver Anda dinyatakan dengan benar untuk produk Anda. Untuk rincian, lihat Mengekspos Codec untuk Framework .