Perangkat dan Jenis Data
[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.]
Bagian ini menjelaskan bekerja dengan perangkat waveform-audio, dan menyertakan informasi tentang cara membuka, menutup, dan mengkuerinya untuk kemampuannya. Ini juga menjelaskan cara melacak perangkat dalam sistem dengan menggunakan handel perangkat dan pengidentifikasi perangkat.
Membuka Perangkat Output Waveform-Audio
Gunakan fungsi waveOutOpen untuk membuka perangkat output waveform-audio untuk pemutaran. Fungsi ini membuka perangkat yang terkait dengan pengidentifikasi perangkat yang ditentukan dan mengembalikan handel perangkat terbuka dengan menulis handel lokasi memori yang ditentukan.
Beberapa komputer multimedia memiliki beberapa perangkat output waveform-audio. Kecuali Anda ingin membuka perangkat output waveform-audio tertentu dalam sistem, Anda harus menggunakan bendera WAVE_MAPPER untuk pengidentifikasi perangkat saat membuka perangkat. Fungsi waveOutOpen memilih perangkat dalam sistem yang paling dapat memutar format data yang ditentukan.
Mengkueri Perangkat Audio
Windows menyediakan fungsi berikut untuk menentukan berapa banyak perangkat dari jenis tertentu yang tersedia dalam sistem.
Perangkat audio diidentifikasi oleh pengidentifikasi perangkat. Pengidentifikasi perangkat ditentukan secara implisit dari jumlah perangkat yang ada dalam sistem. Pengidentifikasi perangkat berkisar dari nol hingga satu kurang dari jumlah perangkat yang ada. Misalnya, jika ada dua perangkat output waveform-audio dalam sistem, pengidentifikasi perangkat yang valid adalah 0 dan 1.
Setelah Anda menentukan berapa banyak perangkat dari jenis tertentu yang ada dalam sistem, Anda dapat menggunakan salah satu fungsi berikut untuk mengkueri kemampuan setiap perangkat.
Masing-masing fungsi ini mengisi struktur dengan informasi tentang kemampuan perangkat tertentu. Tabel berikut mencantumkan struktur yang sesuai dengan masing-masing fungsi ini.
Fungsi | Struktur |
---|---|
auxGetDevCaps | AUXCAPS |
waveInGetDevCaps | WAVEINCAPS |
waveOutGetDevCaps | WAVEOUTCAPS |
Format standar tercantum dalam dwFormats anggota struktur WAVEOUTCAPS. Perangkat waveform-audio dapat mendukung format yang tidak biasa. Untuk menentukan apakah format tertentu (standar atau nonstandar) didukung oleh perangkat, Anda dapat memanggil fungsi waveOutOpen dengan bendera WAVE_FORMAT_QUERY. Bendera ini tidak membuka perangkat. Anda menentukan format yang dimaksud dalam strukturWAVEFORMATEX yang ditunjukkan oleh parameter pwfx yang diteruskan ke waveOutOpen.
Perangkat output waveform-audio bervariasi dalam kemampuan yang didukungnya. dwSupport anggota strukturWAVEOUTCAPS menunjukkan apakah perangkat mendukung kemampuan tersebut saat volume dan pitch berubah.
Handel Perangkat dan Pengidentifikasi Perangkat
Setiap fungsi yang membuka perangkat audio menentukan pengidentifikasi perangkat, penunjuk ke lokasi memori, dan beberapa parameter yang unik untuk setiap jenis perangkat. Lokasi memori diisi dengan handel perangkat. Gunakan handel perangkat ini untuk mengidentifikasi perangkat audio yang terbuka saat memanggil fungsi audio lainnya.
Perbedaan antara pengidentifikasi dan handel untuk perangkat audio halus tetapi penting:
- Pengidentifikasi perangkat ditentukan secara implisit dari jumlah perangkat yang ada dalam sistem. Jumlah ini diperoleh dengan menggunakanauxGetNumDevs, waveInGetNumDevs, atau fungsi waveOutGetNumDevs.
- Handel perangkat dikembalikan saat driver perangkat dibuka dengan menggunakan waveInOpen atau waveOutOpen fungsi.
Tidak ada fungsi yang membuka atau menutup perangkat audio tambahan. Perangkat audio tambahan tidak perlu dibuka dan ditutup seperti perangkat waveform-audio karena tidak ada transfer data berkelanjutan yang terkait dengannya. Semua fungsi audio tambahan menggunakan pengidentifikasi perangkat untuk mengidentifikasi perangkat.
Waveform-Audio Tipe Data Output
Jenis data berikut didefinisikan untuk fungsi output waveform-audio.
Menentukan Format Data Waveform-Audio
Saat Anda memanggil fungsi waveOutOpen untuk membuka driver perangkat untuk pemutaran atau untuk mengkueri apakah driver mendukung format data tertentu, gunakan parameter pwfx untuk menentukan penunjuk ke strukturWAVEFORMATEX yang berisi format data waveform-audio yang diminta. WAVEFORMATEX menggantikan strukturWAVEFORMAT danPCMWAVEFORMAT.
Untuk data audio yang dipisahkan menjadi lebih dari dua saluran atau memiliki ukuran sampel yang bukan kelipatan 8, Anda harus menggunakan WAVEFORMATEXTENSIBLE. Struktur ini hanya mengonfigurasi byte tambahan yang diarahkan oleh cbSize anggota WAVEFORMATEX untuk memberikan informasi tambahan tentang format. WAVEFORMATEXTENSIBLE dapat dilemparkan sebagai WAVEFORMATEX.
Ada juga dua format clipboard yang dapat Anda gunakan untuk mewakili data audio: CF_WAVE dan CF_RIFF. Gunakan format CF_WAVE untuk mewakili data dalam salah satu format standar, seperti PCM 11 kHz atau 22 kHz. Gunakan format CF_RIFF untuk mewakili format data yang lebih kompleks yang tidak dapat direpresentasikan sebagai file waveform-audio standar.
Menulis Data Waveform-Audio
Setelah berhasil membuka driver perangkat output waveform-audio, Anda dapat mulai memutar suara. Windows menyediakan fungsiwaveOutWriteuntuk mengirim blok data ke perangkat output waveform-audio.
Gunakan strukturWAVEHDRuntuk menentukan blok data waveform-audio yang Anda kirim menggunakan waveOutWrite. Struktur ini berisi penunjuk ke blok data terkunci, panjang blok data, dan beberapa bendera. Blok data ini harus disiapkan sebelum Anda menggunakannya; untuk informasi tentang menyiapkan blok data, lihat Blok Data Audio.
Setelah Anda mengirim blok data ke perangkat output dengan menggunakan waveOutWrite, Anda harus menunggu hingga driver perangkat selesai dengan blok data sebelum membebaskannya. Jika Anda mengirim beberapa blok data, Anda harus memantau penyelesaian blok data untuk mengetahui kapan harus mengirim blok tambahan. Untuk informasi selengkapnya tentang blok data, lihat Blok Data Audio.
PCM Waveform-Audio Data Format
lpData anggota WAVEHDR struktur pointetts ke sampel data waveform-audio. Untuk data PCM 8-bit, setiap sampel diwakili oleh satu byte data yang tidak ditandatangani. Untuk data PCM 16-bit, setiap sampel diwakili oleh nilai bertanda tangan 16-bit. Tabel berikut ini meringkas nilai maksimum, minimum, dan titik tengah untuk data waveform-audio PCM.
Format data | Nilai maksimum | Nilai minimum | Nilai titik tengah |
---|---|---|---|
PCM 8-bit | 255 (0xFF) | 0 | 128 (0x80) |
PCM 16-bit | 32.767 (0x7FFF) | –32.768 (0x8000) | 0 |
Pengemasan Data PCM
Urutan byte data bervariasi antara format 8-bit dan 16-bit dan antara format mono dan stereo. Daftar berikut menjelaskan pengemasan data untuk berbagai format data waveform-audio PCM.
Format waveform-audio PCM | Deskripsi |
---|---|
Mono 8-bit | Setiap sampel adalah 1 byte yang sesuai dengan satu saluran audio. Sampel 1 diikuti oleh sampel 2, 3, 4, dan sebagainya. |
Stereo 8-bit | Setiap sampel adalah 2 byte. Sampel 1 diikuti oleh sampel 2, 3, 4, dan sebagainya. Untuk setiap sampel, byte pertama adalah saluran 0 (saluran kiri) dan byte kedua adalah saluran 1 (saluran kanan). |
Mono 16-bit | Setiap sampel adalah 2 byte. Sampel 1 diikuti oleh sampel 2, 3, 4, dan sebagainya. Untuk setiap sampel, byte pertama adalah byte saluran 0 urutan rendah dan byte kedua adalah byte saluran 0 berurutan tinggi. |
Stereo 16-bit | Setiap sampel adalah 4 byte. Sampel 1 diikuti oleh sampel 2, 3, 4, dan sebagainya. Untuk setiap sampel, byte pertama adalah byte urutan rendah saluran 0 (saluran kiri); byte kedua adalah byte saluran 0 dengan urutan tinggi; byte ketiga adalah byte urutan rendah saluran 1 (saluran kanan); dan byte keempat adalah byte urutan tinggi dari saluran 1. |
Lain | Setiap sampel terkandung dalam blok yang merupakan kelipatan 4 byte, tetapi sampelnya mungkin tidak selaras dengan byte. Pengaturan saluran ditentukan oleh masker. Untuk informasi selengkapnya, lihat WAVEFORMATEXTENSIBLE. |
Menutup Perangkat Output Waveform-Audio
Setelah pemutaran waveform-audio selesai, panggil waveOutClose untuk menutup perangkat output. Jika waveOutClose dipanggil saat file waveform-audio sedang diputar, operasi tutup gagal dan fungsi mengembalikan kode kesalahan yang menunjukkan bahwa perangkat tidak ditutup. Jika Anda tidak ingin menunggu pemutaran berakhir sebelum menutup perangkat, panggil fungsiwaveOutResetsebelum menutup. Ini mengakhiri pemutaran dan memungkinkan perangkat ditutup. Pastikan untuk menggunakan fungsiwaveOutUnprepareHeaderuntuk membersihkan persiapan pada semua blok data sebelum menutup perangkat.