Perutean perangkat audio gabungan

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

Mulai Android 12, batasan ini dihapus untuk memungkinkan kasus penggunaan baru seperti penyiaran audio, {i>multicasting<i} ke grup headphone audio BLE atau memilih beberapa kartu suara USB secara bersamaan. Memilih rute ke beberapa perangkat USB secara bersamaan tidak didukung.

Mulai Android 14, framework USB mendukung mengarahkan rute ke beberapa perangkat USB asalkan perangkat USB memiliki audio yang berbeda jenis perangkat dan, ada dukungan {i>kernel<i} dan vendor untuk menghubungkan beberapa USB perangkat secara bersamaan.

Halaman ini membahas cara menerapkan dukungan untuk streaming audio ke beberapa perangkat audio, dan cara memvalidasi penerapan mengenai 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 strategi.
  • Antarmuka HIDL, yang diimplementasikan oleh vendor sebagai bagian dari HAL audio, melaporkan kemampuan perangkat.

Bagian berikut membahas setiap API ini secara lebih mendetail.

Menangani beberapa perangkat pilihan untuk strategi

Pengelola Kebijakan Audio menawarkan API sistem untuk mendukung streaming audio yang lebih baik ke beberapa perangkat audio secara bersamaan. API sistem ini mengaktifkan pengaturan, mendapatkan dan menghapus beberapa perangkat pilihan untuk strategi tertentu. Hingga Android 12, fitur ini hanya didukung untuk satu perangkat.

Pengelola Kebijakan Audio memperkenalkan konsep perangkat media aktif untuk menjelaskan perangkat yang paling mungkin dipilih untuk pemutaran media. Kapan perangkat yang dapat dilepas terhubung, aliran output HAL audio yang dapat yang dirutekan ke perangkat ini mungkin harus dibuka dan diperiksa atribut yang didukung.

Perangkat audio harus ditentukan saat membuka streaming output. Aktif perangkat media adalah perangkat yang digunakan saat aliran {i>output<i} dibuka dalam konteks ini.

Pilihan perangkat media yang aktif dapat berubah bergantung pada perangkat yang sebenarnya terhubung atau terputus. Pengelola Kebijakan Audio menggunakan rangkaian berikut aturan untuk memilih perangkat media yang aktif:

  1. Jika semua perangkat pilihan untuk media tersedia, semuanya akan dipilih sebagai perangkat aktif.
  2. Jika tidak, perangkat portabel yang terakhir terhubung akan dipilih.
  3. Jika tidak ada perangkat portabel yang terhubung, aturan kebijakan audio default untuk memilih perangkat {i>output<i} diterapkan untuk memilih perangkat yang aktif.

Streaming output harus memenuhi kriteria berikut agar dapat dibuka kembali dan dirutekan ke perangkat aktif sehingga konfigurasi terbaik dipilih untuk pemutaran:

  • Streaming output harus mendukung perangkat aktif.
  • Streaming output harus mendukung profil dinamis.
  • Saat ini, streaming output tidak boleh dirutekan ke perangkat aktif.

Untuk menerapkan pilihan perangkat baru, Pengelola Kebijakan Audio menutup dan membuka kembali streaming output setelah koneksi perangkat jika streaming output tidak ada aktivitas, atau menundanya saat streaming output ditempatkan ke mode standby.

Audio Policy Manager menawarkan daftar API sistem berikut(sebagaimana ditentukan dalam AudioManager.java):

  • setPreferredDeviceForStrategy

    Menetapkan perangkat pilihan untuk pemilihan rute audio bagi strategi tertentu. Catatan bahwa perangkat mungkin tidak tersedia pada saat perangkat yang dipilih ditetapkan, namun digunakan setelah tersedia.

  • removePreferredDeviceForStrategy

    Menghapus perangkat audio pilihan yang sebelumnya disetel dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy.

  • getPreferredDeviceForStrategy

    Menampilkan perangkat pilihan untuk strategi audio yang sebelumnya ditetapkan dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy.

  • setPreferredDevicesForStrategy

    Menetapkan perangkat pilihan untuk strategi tertentu.

  • getPreferredDevicesForStrategy

    Menampilkan perangkat pilihan untuk strategi audio yang sebelumnya ditetapkan dengan setPreferredDeviceForStrategy atau setPreferredDevicesForStrategy.

  • OnPreferredDevicesForStrategyChangedListener

    Menentukan antarmuka untuk notifikasi perubahan audio pilihan yang disetel untuk strategi audio tertentu.

  • addOnPreferredDevicesForStrategyChangedListener

    Menambahkan pemroses untuk mendapatkan notifikasi tentang perubahan pada audio pilihan strategi perangkat seluler.

  • removeOnPreferredDevicesForStrategyChangedListener

    Menghapus pemroses perubahan yang ditambahkan sebelumnya pada strategi pilihan perangkat audio.

Melaporkan kemampuan perangkat

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

Jenis data

Dalam audio HIDL HAL V7, kemampuan perangkat dilaporkan menggunakan AudioProfile dan AudioTransport. Struktur AudioTransport menjelaskan porta audio dengan AudioProfile untuk format audio yang dikenal, atau dengan deskripsi perangkat keras mentah untuk format yang tidak diketahui oleh platform. Tujuan Struktur AudioProfile berisi format audio, frekuensi sampel yang didukung menurut profil, dan daftar mask saluran, seperti yang ditunjukkan pada kode berikut blokir 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, jenis data AudioPort ditentukan dengan Struktur AudioTransport dan AudioProfile untuk mendeskripsikan karakteristik perangkat kemampuan IT.

Metode HAL Audio

Pengelola Kebijakan Audio menggunakan metode berikut untuk mengkueri kemampuan:

  • getParameters:Metode umum untuk mengambil parameter khusus vendor seperti format audio yang didukung dan frekuensi samplingnya masing-masing.
  • getAudioPort:Menampilkan daftar atribut yang didukung (seperti pengambilan sampel tarif, format, mask saluran, pengontrol keuntungan) untuk porta audio tertentu.

Kode berikut dari IDevice.hal menampilkan antarmuka untuk metode getAudioPort:

   /**
    * 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, API lama versi 3.2 menambahkan struktur yang disebut audio_port_v7. Lihat kode sumber untuk mengetahui detail selengkapnya.

Karena penambahan audio_port_v7, API lama versi 3.2 menambahkan API baru yang disebut get_audio_port_v7 untuk mengkueri kemampuan perangkat menggunakan audio_port_v7 struktur.

Kode berikut 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 get_audio_port API lama harus diisi ke API baru Format AudioPort jika versi API lama di bawah 3.2 dan HIDL HAL adalah versi 7 atau yang lebih baru. Dalam hal ini, semua frekuensi sampel dan saluran yang dilaporkan mask dari get_audio_port dianggap didukung untuk semua format, yang memungkinkan pemetaan secara langsung dari nilai get_audio_port ke struktur AudioPort baru.

Contoh implementasi API

Bagian ini menjelaskan beberapa rangkaian pengujian yang berisi metode yang menggunakan API dibahas di bagian sebelumnya. Lihat metode ini untuk beberapa contoh bagaimana API ini diimplementasikan dan digunakan.

Contoh penggunaan setPreferredDevicesForStrategy, getPreferredDevicesForStrategy, removePreferredDeviceForStrategy, dan API sistem OnPreferredDevicesForStrategyChangedListener berada dalam PreferredDeviceRoutingTest, yang terletak di GTS.

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

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

Validasi

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

Uji CTS

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

Berikut adalah daftar pengujian Pengelola Audio yang tersedia:

  • AudioManagerTest#testGetDevices

    Memverifikasi kemampuan presisi perangkat audio. Hal ini juga memverifikasi bahwa profil audio yang ditampilkan dalam struktur AudioDeviceInfo mempertahankan dari format array yang lebih lama yang diratakan, tetapi dalam versi baru format AudioProfile.

  • AudioManagerTest#testPreferredDevicesForStrategy dan AudioManagerTest#testPreferredDeviceForCapturePreset

    Pastikan perangkat pilihan untuk strategi dan preset rekaman terkait Pengujian API berhasil diselesaikan.

Pengujian GTS

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

Untuk memvalidasi apakah API untuk perangkat pilihan untuk strategi dan preset pengambilan berfungsi dengan benar, jalankan pengujian AudioServiceHostTest#testPreferredDeviceRouting dan AudioServiceHostTest#testPreferredDeviceRoutingForCapturePreset.