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

Perutean Perangkat Audio Gabungan

Fitur perutean perangkat audio gabungan menambahkan dukungan untuk streaming audio ke beberapa perangkat audio secara bersamaan. Menggunakan fitur ini, aplikasi istimewa dapat memilih beberapa perangkat yang lebih disukai untuk tertentu strategi dengan cara sistem API. Aplikasi dapat menemukan kemampuan perangkat audio secara lebih tepat dengan menggunakan API publik yang disediakan oleh fitur ini. Untuk Android versi 11 dan yang lebih rendah, implementasi kerangka kerja audio memiliki dukungan terbatas untuk beberapa perangkat audio dengan jenis yang sama (misalnya, 2 headset Bluetooth A2DP) yang terhubung secara bersamaan. Aturan perutean audio default juga tidak mengizinkan pengguna memilih beberapa perangkat dengan jenis yang sama untuk kasus penggunaan tertentu.

Dimulai dengan Android 12, batasan ini dihapus untuk memungkinkan kasus penggunaan baru seperti penyiaran audio, multicasting ke grup headphone audio BLE, atau menggunakan beberapa kartu suara USB secara bersamaan.

Halaman ini mencakup cara menerapkan dukungan untuk streaming audio ke beberapa perangkat audio, dan cara memvalidasi penerapan fitur ini.

Mendukung streaming audio ke beberapa perangkat audio

Ada dua set API di Android 12 yang mendukung fitur ini:

  • API sistem menangani beberapa perangkat pilihan untuk suatu strategi.
  • Antarmuka HIDL, yang diimplementasikan oleh vendor sebagai bagian dari audio HAL, melaporkan kemampuan perangkat.

Bagian berikut membahas masing-masing API ini secara lebih rinci.

Menangani beberapa perangkat pilihan untuk sebuah strategi

Audio Policy Manager menawarkan API sistem untuk lebih mendukung streaming audio ke beberapa perangkat audio secara bersamaan. Sistem API ini memungkinkan pengaturan, mendapatkan dan menghapus beberapa perangkat yang lebih disukai untuk strategi tertentu. Hingga Android 12, fitur ini hanya didukung untuk satu perangkat.

Audio Manager Kebijakan memperkenalkan konsep perangkat media aktif untuk menggambarkan perangkat yang paling mungkin untuk diambil untuk media pemutaran. Saat perangkat yang dapat dilepas terhubung, aliran output audio HAL yang dapat dirutekan ke perangkat ini mungkin harus dibuka dan diperiksa untuk atribut yang didukung.

Perangkat audio harus ditentukan saat membuka aliran keluaran. Perangkat media aktif adalah perangkat yang digunakan saat aliran keluaran dibuka dalam konteks ini.

Pemilihan perangkat media aktif dapat berubah tergantung pada perangkat yang sebenarnya terhubung atau terputus. Audio Policy Manager menggunakan rangkaian aturan berikut untuk memilih perangkat media aktif:

  1. Jika semua perangkat pilihan untuk media tersedia, semuanya dipilih sebagai perangkat aktif.
  2. Jika tidak, perangkat lepasan yang terhubung terakhir akan dipilih.
  3. Jika tidak ada perangkat yang dapat dilepas terhubung, aturan kebijakan audio default untuk memilih perangkat keluaran diterapkan untuk memilih perangkat yang aktif.

Aliran keluaran harus memenuhi kriteria berikut untuk dibuka kembali dan dirutekan ke perangkat aktif sehingga konfigurasi terbaik dipilih untuk pemutaran:

  • Aliran keluaran harus mendukung perangkat aktif.
  • Aliran keluaran harus mendukung profil dinamis.
  • Aliran keluaran saat ini tidak boleh dirutekan ke perangkat aktif.

Untuk menerapkan pilihan perangkat baru, Pengelola Kebijakan Audio menutup dan membuka kembali aliran keluaran pada sambungan perangkat jika aliran keluaran tidak digunakan, atau menundanya saat aliran keluaran ditempatkan ke siaga.

Audio Kebijakan Manager menawarkan daftar berikut sistem API (sebagaimana didefinisikan dalam AudioManager.java ):

  • setPreferredDeviceForStrategy

    Menyetel perangkat pilihan untuk perutean audio untuk strategi tertentu. Perhatikan bahwa perangkat mungkin tidak tersedia pada saat perangkat pilihan diatur, tetapi digunakan setelah tersedia.

  • removePreferredDeviceForStrategy

    Menghapus perangkat audio disukai (s) yang sebelumnya diatur dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy .

  • getPreferredDeviceForStrategy

    Mengembalikan perangkat yang lebih disukai untuk strategi audio yang ditetapkan sebelumnya dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy .

  • setPreferredDevicesForStrategy

    Menetapkan perangkat pilihan untuk strategi tertentu.

  • getPreferredDevicesForStrategy

    Mengembalikan perangkat yang lebih disukai untuk strategi audio yang ditetapkan sebelumnya dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy .

  • OnPreferredDevicesForStrategyChangedListener

    Menentukan antarmuka untuk pemberitahuan perubahan pada perangkat audio pilihan yang disetel untuk strategi audio tertentu.

  • addOnPreferredDevicesForStrategyChangedListener

    Menambahkan pendengar untuk mendapatkan pemberitahuan tentang perubahan pada perangkat audio pilihan strategi.

  • removeOnPreferredDevicesForStrategyChangedListener

    Menghapus pendengar perubahan yang ditambahkan sebelumnya ke perangkat audio pilihan strategi.

Kemampuan perangkat pelaporan

Sebagai bagian dari implementasi Audio HAL, vendor mengimplementasikan API yang mendukung kemampuan perangkat pelaporan. Bagian ini menjelaskan tipe data dan metode yang digunakan untuk melaporkan kemampuan perangkat dan mencantumkan beberapa perubahan yang dibuat pada audio HIDL HAL V7 untuk mendukung beberapa perangkat.

Tipe data

Dalam HIDL audio yang HAL V7, kemampuan perangkat dilaporkan menggunakan AudioProfile dan AudioTransport struktur. The AudioTransport struktur menggambarkan kemampuan port audio dengan AudioProfile untuk format audio yang dikenal, atau dengan deskriptor hardware baku untuk format yang tidak diketahui oleh platform. The AudioProfile struktur berisi format audio, tingkat sampel didukung oleh profil, dan daftar masker saluran, seperti yang ditunjukkan di blok kode berikut dari types.hal :

/**
* Configurations supported for a certain audio format.
*/
struct AudioProfile {
   AudioFormat format;
   /** List of the sample rates (in Hz) supported by the profile. */
   vec<uint32_t> sampleRates;
   /** List of channel masks supported by the profile. */
   vec<AudioChannelMask> channelMasks;
};

Dalam audio HIDL HAL V7, yang AudioPort tipe data didefinisikan dengan AudioTransport dan AudioProfile struktur untuk menggambarkan kemampuan perangkat.

Metode Audio HAL

Audio Policy Manager menggunakan metode berikut untuk menanyakan kemampuan perangkat:

  • getParameters: Sebuah metode umum untuk mengambil vendor tertentu nilai parameter seperti format audio yang didukung dan tingkat sampling masing-masing.
  • getAudioPort: Mengembalikan daftar atribut yang didukung (seperti tingkat pengambilan sampel, format, masker saluran, gain kontroler) untuk port audio yang diberikan.

Berikut kode dari IDevice.hal menunjukkan antarmuka untuk getAudioPort metode:

   /**
    * Returns the list of supported attributes for a given audio port.
    *
    * As input, 'port' contains the information (type, role, address etc...)
    * needed by the HAL to identify the port.
    *
    * As output, 'resultPort' contains possible attributes (sampling rates,
    * formats, channel masks, gain controllers...) for this port.
    *
    * @param port port identifier.
    * @return retval operation completion status.
    * @return resultPort port descriptor with all parameters filled up.
    */
   getAudioPort(AudioPort port)
           generates (Result retval, AudioPort resultPort);

Perubahan pada API lama

Untuk mendukung beberapa profil audio, versi 3.2 dari warisan API menambahkan struktur baru yang disebut audio_port_v7 . Lihat kode sumber untuk lebih jelasnya.

Karena penambahan audio_port_v7 , versi 3.2 dari warisan API menambahkan API baru yang disebut get_audio_port_v7 untuk kemampuan query perangkat menggunakan audio_port_v7 struktur.

Berikut kode dari audio.h menunjukkan definisi get_audio_port_v7 API:

/**
 * Fills the list of supported attributes for a given audio port.
 * As input, "port" contains the information (type, role, address etc...)
 * needed by the HAL to identify the port.
 * As output, "port" contains possible attributes (sampling rates,
 * formats, channel masks, gain controllers...) for this port. The
 * possible attributes are saved as audio profiles, which contains audio
 * format and the supported sampling rates and channel masks.
 */
 int (*get_audio_port_v7)(struct audio_hw_device *dev,
                          struct audio_port_v7 *port);

Data dari warisan get_audio_port API harus diisikan ke baru AudioPort Format ketika versi warisan API di bawah 3,2 dan versi HIDL HAL adalah 7 atau di atas. Dalam hal ini, semua melaporkan tingkat sampel dan masker saluran dari get_audio_port diasumsikan didukung untuk semua format kembali, memungkinkan pemetaan langsung dari get_audio_port nilai ke baru AudioPort struktur.

Contoh implementasi API

Bagian ini menjelaskan beberapa rangkaian pengujian yang berisi metode yang menggunakan API yang tercakup dalam bagian sebelumnya. Lihat metode ini untuk beberapa contoh bagaimana API ini diterapkan dan digunakan.

Sebuah contoh dari penggunaan dari setPreferredDevicesForStrategy , getPreferredDevicesForStrategy , removePreferredDeviceForStrategy dan OnPreferredDevicesForStrategyChangedListener API sistem berada di PreferredDeviceRoutingTest metode, yang terletak di GTS.

Untuk melihat contoh struktur baru di AudioDeviceInfo digunakan, lihat AudioManagerTest#testGetDevices metode yang terletak di CTS.

Contoh implementasi untuk get_audio_port_v7 terletak di audio_hal.c dan itu menunjukkan bagaimana kemampuan tanya untuk beberapa perangkat.

Validasi

Bagian ini memberikan informasi tentang CTS dan GTS (Google Mobile Layanan Test Suite) validasi dari Audio Manager.

tes CTS

Tes CTS terletak di android.media.cts.AudioManagerTest .

Berikut ini adalah daftar tes Audio Manager yang tersedia:

  • AudioManagerTest#testGetDevices

    Memverifikasi kemampuan yang tepat dari perangkat audio. Hal ini juga memverifikasi bahwa profil audio kembali di AudioDeviceInfo struktur menjaga isi dari yang lebih tua, format yang array yang rata, tetapi dalam baru AudioProfile Format.

  • AudioManagerTest#testPreferredDevicesForStrategy dan AudioManagerTest#testPreferredDeviceForCapturePreset

    Verifikasi bahwa perangkat pilihan untuk strategi dan menangkap tes API terkait preset berhasil diselesaikan.

Tes GTS

Tes GTS terletak di com.google.android.gts.audioservice.AudioServiceHostTest .

Untuk memvalidasi jika API untuk perangkat disukai untuk strategi dan menangkap ditetapkan bekerja dengan benar, jalankan AudioServiceHostTest#testPreferredDeviceRouting dan AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset tes.