Bagikan melalui


RenderExclusiveEventDriven

Aplikasi sampel ini menggunakan API Audio Inti untuk merender data audio ke perangkat output yang ditentukan oleh pengguna. Sampel ini menunjukkan buffering berbasis peristiwa untuk klien rendering dalam mode eksklusif. Untuk aliran mode eksklusif, klien berbagi buffer titik akhir dengan perangkat audio.

Topik ini berisi bagian berikut.

Deskripsi

Sampel ini menunjukkan fitur berikut.

  • MMDevice API untuk enumerasi dan pemilihan perangkat multimedia.
  • WASAPI untuk operasi manajemen aliran.

Persyaratan

Hasil Versi
Windows SDK Windows 7
Visual Studio 2008

 

Mengunduh Sampel

Sampel ini tersedia di lokasi berikut.

Tempat Jalur/URL
Windows SDK \Program Files\Microsoft SDKs\Windows\v7.0\Samples\Multimedia\Audio\RenderExclusiveEventDriven\...

 

Membangun Sampel

Untuk membuat sampel RenderExclusiveEventDriven, gunakan langkah-langkah berikut:

  1. Buka shell CMD untuk Windows SDK dan ubah ke direktori sampel RenderExclusiveEventDriven.
  2. Jalankan perintah start WASAPIRenderExclusiveEventDriven.sln di direktori RenderExclusiveEventDriven untuk membuka proyek WASAPIRenderExclusiveEventDriven di jendela Visual Studio.
  3. Dari dalam jendela, pilih konfigurasi solusi Debug atau Rilis, pilih menu Build dari bilah menu, dan pilih opsi Build. Jika Anda tidak membuka Visual Studio dari shell CMD untuk SDK, Visual Studio tidak akan memiliki akses ke lingkungan build SDK. Dalam hal ini, sampel tidak akan dibuat kecuali Anda secara eksplisit mengatur variabel lingkungan MSSdk, yang digunakan dalam file proyek, WASAPIRenderExclusiveEventDriven.vcproj.

Menjalankan Sampel

Jika Anda berhasil membangun aplikasi demo, file yang dapat dieksekusi, WASAPIRenderExclusiveEventDriven.exe, dihasilkan. Untuk menjalankannya, ketik WASAPIRenderExclusiveEventDriven di jendela perintah diikuti oleh argumen yang diperlukan atau opsional. Contoh berikut menunjukkan cara menjalankan sampel dengan menentukan durasi pemutaran pada perangkat multimedia default.

WASAPIRenderExclusiveEventDriven.exe -d 20 -multimedia

Tabel berikut ini memperlihatkan argumen.

Argumen Deskripsi
-? Menampilkan bantuan.
-h Menampilkan bantuan.
-f Frekuensi gelombang sinus di Hz.
-L Latensi render audio dalam milidetik.
-d Durasi gelombang sinus dalam hitungan detik.
-m Menonaktifkan penggunaan MMCSS.
-Konsol Gunakan perangkat konsol default.
-Komunikasi Gunakan perangkat komunikasi default.
-Multimedia Gunakan perangkat multimedia default.
-Endpoint Gunakan pengidentifikasi titik akhir yang ditentukan dalam nilai pengalihan.

 

Jika aplikasi dijalankan tanpa argumen, aplikasi menghitung perangkat yang tersedia dan meminta pengguna untuk memilih perangkat untuk sesi penyajian. Setelah pengguna menentukan perangkat, aplikasi merender gelombang sinus pada 440 Hz selama 10 detik. Nilai-nilai ini dapat dimodifikasi dengan menentukan nilai sakelar -f dan -d.

Sampel RenderExclusiveEventDriven menunjukkan buffering berbasis peristiwa. Sampel menunjukkan cara:

  • Buat instans klien audio, konfigurasikan untuk berjalan dalam mode eksklusif, dan aktifkan buffering berbasis peristiwa dengan mengatur bendera AUDCLNT_STREAMFLAGS_EVENTCALLBACK dalam panggilan ke IAudioClient::Inisialisasi.
  • Kaitkan klien dengan sampel yang siap dirender dengan menyediakan handel peristiwa ke sistem dengan memanggil metode IAudioClient::SetEventHandle.
  • Buat utas render untuk memproses sampel dari mesin audio.
  • Sejajarkan buffer dengan benar pada batas 128 byte sebelum mengirimkannya ke perangkat. Hal ini dilakukan dengan menyesuaikan periodisitas mesin.
  • Periksa format campuran titik akhir perangkat untuk menentukan apakah sampel dapat dirender. Jika perangkat tidak mendukung format campuran, data dikonversi ke PCM.
  • Menangani pengalihan aliran.

Setelah sesi penyajian dimulai dan aliran dimulai, mesin audio memberi sinyal handel peristiwa yang disediakan untuk memberi tahu klien setiap kali buffer menjadi siap untuk diproses klien. Data audio juga dapat diproses dalam perulangan berbasis timer. Mode ini ditunjukkan dalam sampel RenderExclusiveTimerDriven.

Untuk informasi selengkapnya tentang penyajian stream, lihat Merender Stream.

Sampel SDK yang Menggunakan API Audio Inti