Blok Data Audio
[Fitur yang terkait dengan halaman ini, Waveform Audio, adalah fitur warisan. Ini telah digantikan oleh WASAPI dan Audio Graphs. WASAPI dan Audio Graphs telah dioptimalkan untuk Windows 10 dan Windows 11. Microsoft sangat menyarankan agar kode baru menggunakan WASAPI dan Audio Graphs alih-alih Waveform Audio, jika memungkinkan. Microsoft menyarankan agar kode yang ada yang menggunakan API warisan ditulis ulang untuk menggunakan API baru jika memungkinkan.]
waveInAddBuffer dan fungsi waveOutWrite mengharuskan aplikasi mengalokasikan blok data untuk diteruskan ke driver perangkat untuk tujuan perekaman atau pemutaran. Kedua fungsi ini menggunakan strukturWAVEHDR untuk menjelaskan blok datanya.
Sebelum menggunakan salah satu fungsi ini untuk meneruskan blok data ke driver perangkat, Anda harus mengalokasikan memori untuk blok data dan struktur header yang menjelaskan blok data. Header dapat disiapkan dan tidak siap dengan menggunakan fungsi berikut.
Sebelum Anda meneruskan blok data audio ke driver perangkat, Anda harus menyiapkan blok data dengan meneruskannya ke waveInPrepareHeader atau waveOutPrepareHeader. Ketika driver perangkat selesai dengan blok data dan mengembalikannya, Anda harus membersihkan persiapan ini dengan melewati blok data ke waveInUnprepareHeader atau waveOutUnprepareHeader sebelum memori yang dialokasikan dapat dibebaskan.
Kecuali data input dan output waveform-audio cukup kecil untuk dimuat dalam satu blok data, aplikasi harus terus menyediakan driver perangkat dengan blok data sampai pemutaran atau perekaman selesai.
Bahkan jika satu blok data digunakan, aplikasi harus dapat menentukan kapan driver perangkat selesai dengan blok data sehingga aplikasi dapat membebaskan memori yang terkait dengan blok data dan struktur header. Ada beberapa cara untuk menentukan kapan driver perangkat selesai dengan blok data:
- Dengan menentukan fungsi panggilan balik untuk menerima pesan yang dikirim oleh driver ketika selesai dengan blok data
- Dengan menggunakan panggilan balik peristiwa
- Dengan menentukan jendela atau utas untuk menerima pesan yang dikirim oleh driver ketika selesai dengan blok data
- Dengan melakukan polling bit WHDR_DONE di dwFlags anggota strukturWAVEHDRdikirim dengan setiap blok data
Jika aplikasi tidak mendapatkan blok data ke driver perangkat saat diperlukan, mungkin ada celah yang dapat didengar dalam pemutaran atau hilangnya informasi yang direkam masuk. Ini memerlukan setidaknya skema buffering ganda - tinggal setidaknya satu blok data di depan driver perangkat.
Topik berikut menjelaskan cara untuk menentukan kapan driver perangkat selesai dengan blok data:
Menggunakan Fungsi Panggilan Balik untuk Memproses Pesan Driver
- Menggunakan Fungsi Panggilan Balik untuk Memproses Pesan Driver
- Menggunakan Panggilan Balik Peristiwa untuk Memproses Pesan Driver
- Menggunakan Jendela atau Utas untuk Memproses Pesan Driver
- Mengelola Blok Data dengan Polling