Manajemen Aliran

Setelah menghitung perangkat titik akhir audio dalam sistem dan mengidentifikasi perangkat penyajian atau pengambilan yang sesuai, tugas berikutnya untuk aplikasi klien audio adalah membuka koneksi dengan perangkat titik akhir dan mengelola aliran data audio melalui koneksi tersebut. WASAPI memungkinkan klien untuk membuat dan mengelola aliran audio.

WASAPI mengimplementasikan beberapa antarmuka untuk menyediakan layanan manajemen aliran kepada klien audio. Antarmuka utamanya adalah IAudioClient. Klien mendapatkan antarmuka IAudioClient untuk perangkat titik akhir audio dengan memanggil metode IMMDevice::Activate (dengan parameter iid diatur ke REFIID IID_IAudioClient) pada objek titik akhir.

Klien memanggil metode di antarmuka IAudioClient untuk melakukan hal berikut:

  • Temukan format audio mana yang didukung perangkat titik akhir.
  • Dapatkan ukuran buffer titik akhir.
  • Dapatkan format aliran dan latensi.
  • Mulai, hentikan, dan reset aliran yang mengalir melalui perangkat titik akhir.
  • Mengakses layanan audio tambahan.

Untuk membuat aliran, klien memanggil metode IAudioClient::Initialize . Melalui metode ini, klien menentukan format data untuk aliran, ukuran buffer titik akhir, dan apakah aliran beroperasi dalam mode bersama atau eksklusif.

Metode yang tersisa dalam antarmuka IAudioClient termasuk dalam dua grup:

Metode berikut dapat dipanggil hanya setelah panggilan ke IAudioClient::Initialize:

Metode berikut dapat dipanggil sebelum atau sesudah panggilan IAudioClient::Initialize :

Untuk mengakses layanan klien audio tambahan, klien memanggil metode IAudioClient::GetService. Melalui metode ini, klien dapat memperoleh referensi ke antarmuka berikut:

  • IAudioRenderClient

    Menulis data penyajian ke buffer titik akhir penyajian audio.

  • IAudioCaptureClient

    Membaca data yang diambil dari buffer titik akhir pengambilan audio.

  • IAudioSessionControl

    Berkomunikasi dengan manajer sesi audio untuk mengonfigurasi dan mengelola sesi audio yang terkait dengan aliran.

  • ISimpleAudioVolume

    Mengontrol tingkat volume sesi audio yang terkait dengan aliran.

  • IChannelAudioVolume

    Mengontrol tingkat volume saluran individual dalam sesi audio yang terkait dengan aliran.

  • IAudioClock

    Memantau laju data aliran dan posisi streaming.

Selain itu, klien WASAPI yang memerlukan pemberitahuan peristiwa terkait sesi harus menerapkan antarmuka berikut:

Terakhir, klien mungkin menggunakan API tingkat yang lebih tinggi untuk membuat aliran audio, tetapi juga memerlukan akses ke kontrol sesi dan kontrol volume untuk sesi yang berisi aliran. API tingkat yang lebih tinggi biasanya tidak menyediakan akses ini. Klien dapat memperoleh kontrol untuk sesi tertentu melalui antarmuka IAudioSessionManager. Antarmuka ini memungkinkan klien untuk mendapatkan antarmuka IAudioSessionControl dan ISimpleAudioVolume untuk sesi tanpa mengharuskan klien menggunakan antarmuka IAudioClient untuk membuat aliran dan menetapkan aliran ke sesi. Klien mendapatkan antarmuka IAudioSessionManager untuk perangkat titik akhir audio dengan memanggil metode IMMDevice::Activate (dengan parameter iid diatur ke REFIID IID_IAudioSessionManager) pada objek titik akhir.

Antarmuka IAudioSessionControl, IAudioSessionEvents, dan IAudioSessionManager didefinisikan dalam file header Audiopolicy.h. Semua antarmuka WASAPI lainnya didefinisikan dalam file header Audioclient.h.

Bagian berikut menjelaskan cara menggunakan WASAPI untuk mengelola aliran audio:

Panduan Pemrograman