Bagikan melalui


Panggilan Balik XAudio2

XAudio2 dapat memanggil fungsi yang disediakan oleh klien untuk memberi tahunya secara asinkron tentang peristiwa tertentu yang terjadi di utas pemrosesan audio. Panggilan balik ini dapat berskala global atau khusus untuk suara sumber tertentu. Untuk menerima panggilan balik mesin global, klien harus menyediakan instans kelas yang mengimplementasikan antarmuka IXAudio2EngineCallback saat menginisialisasi XAudio2. Untuk menerima panggilan balik suara sumber, klien harus menyediakan instans kelas yang mengimplementasikan antarmuka IXAudio2VoiceCallback saat membuat suara sumber. Untuk detail selengkapnya, lihat IXAudio2EngineCallback dan IXAudio2VoiceCallback.

Anda harus menerapkan panggilan balik dengan hati-hati agar tidak menyebabkan jeda dalam audio. Setiap kali panggilan balik berjalan, XAudio2 tidak dapat menghasilkan audio apa pun. Penundaan lebih dari beberapa milidetik dapat menyebabkan masalah audio. Penundaan sifat ini juga menghasilkan output debugger. Ini menunjukkan potensi masalah performa. Minimal, fungsi panggilan balik tidak boleh melakukan hal berikut:

  • Mengakses hard disk atau penyimpanan permanen lainnya
  • Melakukan panggilan API yang mahal atau memblokir
  • Menyinkronkan dengan bagian lain dari kode klien
  • Memerlukan penggunaan CPU yang signifikan

Jika desain klien memerlukan panggilan balik untuk memicu tindakan seperti yang tercantum sebelumnya, panggilan balik harus memberi sinyal utas klien yang berbeda untuk melakukan pekerjaan. Anda dapat melakukan ini dengan mekanisme SetEvent sederhana atau mekanisme yang lebih canggih seperti antrean perintah nonblocking yang dikonsumsi oleh utas lain.

IXAudio2EngineCallback

Kelas IXAudio2EngineCallback berisi metode yang memberi tahu klien ketika peristiwa tertentu terjadi di mesin XAudio2. Metode ini harus diimplementasikan oleh klien XAudio2. XAudio2 memanggil metode ini melalui penunjuk antarmuka yang disediakan oleh klien menggunakan metode IXAudio2::RegisterForCallbacks . Semua metode ini mengembalikan kekosongan, bukan HRESULT.

IXAudio2VoiceCallback

Kelas IXAudio2VoiceCallback berisi metode yang memberi tahu klien ketika peristiwa tertentu terjadi dalam suara sumber XAudio2 tertentu. XAudio2 memanggil metode ini melalui penunjuk antarmuka yang disediakan oleh klien di IXAudio2::CreateSourceVoice. Seperti halnya IXAudio2EngineCallback, metode ini harus diimplementasikan oleh klien XAudio2, dan mengembalikan kekosongan daripada HRESULT.

Seperti disebutkan sebelumnya, sangat penting bahwa implementasi yang disediakan klien dari panggilan balik ini kembali secepat mungkin, sebaiknya dalam milidetik. Panggilan balik dijalankan dalam utas pemrosesan audio, dan semua pemrosesan terganggu hingga panggilan balik kembali. Penundaan panggilan balik dapat dengan mudah menyebabkan masalah audio.

Panggilan balik

Panduan Pemrograman XAudio2

Cara: Menggunakan Panggilan Balik Suara Sumber

Cara: Menggunakan Panggilan Balik Mesin

Cara: Mengalirkan Suara dari Disk