Struktur WAVEFORMATEX (mmreg.h)

Struktur WAVEFORMATEX menentukan format data aliran audio gelombang.

Sintaks

typedef struct tWAVEFORMATEX {
  WORD  wFormatTag;
  WORD  nChannels;
  DWORD nSamplesPerSec;
  DWORD nAvgBytesPerSec;
  WORD  nBlockAlign;
  WORD  wBitsPerSample;
  WORD  cbSize;
} WAVEFORMATEX, *PWAVEFORMATEX, *NPWAVEFORMATEX, *LPWAVEFORMATEX;

Anggota

wFormatTag

Menentukan jenis format audio bentuk gelombang. Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

nChannels

Menentukan jumlah saluran data audio. Untuk audio monofonik, atur anggota ini ke 1. Untuk stereo, atur anggota ini ke 2.

nSamplesPerSec

Menentukan frekuensi sampel di mana setiap saluran harus diputar atau direkam. Jika wFormatTag = WAVE_FORMAT_PCM, maka nilai umum untuk nSamplesPerSec adalah 8,0 kHz, 11,025 kHz, 22,05 kHz, dan 44,1 kHz. Misalnya, untuk menentukan frekuensi sampel 11,025 kHz, atur nSamplesPerSec ke 11025. Untuk format non-PCM, anggota ini harus dihitung sesuai dengan spesifikasi produsen dari tag format.

nAvgBytesPerSec

Menentukan tingkat transfer data rata-rata yang diperlukan dalam byte per detik. Nilai ini berguna untuk memperkirakan ukuran buffer.

nBlockAlign

Menentukan perataan blok dalam byte. Perataan blok adalah ukuran unit atom minimum data untuk jenis format wFormatTag . Jika wFormatTag = WAVE_FORMAT_PCM atau wFormatTag = WAVE_FORMAT_IEEE_FLOAT, atur nBlockAlign ke (nChannels*wBitsPerSample)/8, yang merupakan ukuran bingkai audio tunggal. Untuk format non-PCM, anggota ini harus dihitung sesuai dengan spesifikasi produsen untuk tag format.

Pemutaran dan perekaman perangkat lunak harus memproses kelipatan nBlockAlign byte data sekaligus. Data yang ditulis ke dan dibaca dari perangkat harus selalu dimulai di awal blok.

wBitsPerSample

Menentukan jumlah bit per sampel untuk jenis format yang ditentukan oleh wFormatTag. Jika wFormatTag = WAVE_FORMAT_PCM, maka wBitsPerSample harus diatur ke 8 atau 16. Jika wFormatTag = WAVE_FORMAT_IEEE_FLOAT, wBitsPerSample harus diatur ke 32. Untuk format non-PCM, tetapkan nilai anggota ini sesuai dengan spesifikasi produsen untuk tag format. Beberapa skema kompresi tidak dapat menentukan nilai untuk wBitsPerSample. Dalam hal ini, atur wBitsPerSample ke nol.

cbSize

Menentukan ukuran, dalam byte, informasi format tambahan yang ditambahkan ke akhir struktur WAVEFORMATEX. Informasi ini dapat digunakan oleh format non-PCM untuk menyimpan atribut tambahan untuk wFormatTag. Jika tidak ada informasi tambahan yang diperlukan oleh wFormatTag, atur anggota ini ke nol. Untuk format WAVE_FORMAT_PCM, klien harus mengabaikan anggota ini (nilainya secara implisit nol). Karena semua klien mungkin tidak mengikuti aturan ini, kami sarankan Anda menginisialisasi cbSize ke nol untuk format WAVE_FORMAT_PCM.

Keterangan

Struktur WAVEFORMATEX hanya dapat menjelaskan subset format yang dapat dijelaskan oleh struktur WAVEFORMATEXTENSIBLE . Misalnya, WAVEFORMATEX dapat menggambarkan aliran modulated kode pulsa stereo mono atau (dua saluran) (PCM) dengan nilai sampel bilangan bulat 8-bit atau 16-bit, atau dengan nilai sampel floating-point 32-bit. Selain itu, WAVEFORMATEX dapat menjelaskan format non-PCM populer seperti AC-3 dan WMA Pro.

WAVEFORMATEX dapat secara tidak ambigu menggambarkan format PCM mono atau stereo di mana jumlah bit yang valid per sampel sama dengan ukuran kontainer sampel. Untuk menjelaskan format PCM dengan lebih dari dua saluran memerlukan WAVEFORMATEXTENSIBLE, yang memiliki masker saluran untuk menentukan konfigurasi speaker (yaitu, pemetaan saluran ke posisi speaker fisik). Untuk menjelaskan format PCM di mana jumlah bit yang valid per sampel kurang dari ukuran kontainer sampel (misalnya, sampel 20-bit yang disimpan dalam kontainer tiga byte) memerlukan WAVEFORMATEXTENSIBLE, yang menentukan jumlah bit sampel yang valid dan ukuran kontainer sampel.

WAVEFORMATEX dapat menjelaskan format non-PCM di mana tag format 16-bit didefinisikan dalam file header Mmreg.h (misalnya, WAVE_FORMAT_MPEG). Anggota wFormatTag dari WAVEFORMATEX berisi tag format. Tentukan format non-PCM yang tag formatnya tidak didefinisikan dalam Mmreg.h oleh struktur WAVEFORMATEXTENSIBLE, yang berisi GUID yang mengidentifikasi format. Jika perlu, vendor perangkat keras dapat secara independen menghasilkan nilai GUID untuk mengidentifikasi format baru. Mendaftarkan GUID dengan Microsoft tidak perlu.

Untuk informasi selengkapnya tentang perbedaan antara WAVEFORMATEX dan WAVEFORMATEXTENSIBLE, lihat Deskriptor Wave-Format yang Dapat Diperluas.

Anggota wFormatTag diatur ke salah satu tag format gelombang yang ditentukan dalam Mmreg.h. Tag untuk beberapa format nonproprietary yang lebih umum tercantum dalam tabel berikut.

Nilai wFormatTag Makna
WAVE_FORMAT_PCM Data PCM (pulse-code modulated) dalam format bilangan bulat.
WAVE_FORMAT_IEEE_FLOAT Data PCM dalam format titik pecahan IEEE.
WAVE_FORMAT_DRM Format yang dikodekan DRM (untuk konten audio digital yang dilindungi oleh Microsoft Digital Rights Management).
WAVE_FORMAT_EXTENSIBLE Struktur WAVEFORMATEX yang dapat diperluas (lihat WAVEFORMATEXTENSIBLE).
WAVE_FORMAT_ALAW Format yang dikodekan A-law.
WAVE_FORMAT_MULAW Format yang dikodekan mu-law.
WAVE_FORMAT_ADPCM Data ADPCM (modulated pulse-code diferensial adaptif).
WAVE_FORMAT_MPEG Format data MPEG-1 (aliran sesuai dengan spesifikasi ISO 11172-3 Audio).
WAVE_FORMAT_DOLBY_AC3_SPDIF AC-3 (alias Dolby Digital) melalui S/PDIF.
WAVE_FORMAT_WMASPDIF Windows Media Audio (WMA) Pro melalui S/PDIF.
 

Lihat Mmreg.h untuk daftar lengkap format WAVE_FORMAT_Xxx .

WAVEFORMATEX hampir identik dengan struktur PCMWAVEFORMAT, yang merupakan struktur usang yang digunakan untuk menentukan format PCM. Satu-satunya perbedaan adalah bahwa WAVEFORMATEX berisi anggota cbSize dan PCMWAVEFORMAT tidak. Menurut konvensi, cbSize harus diabaikan ketika wFormatTag = WAVE_FORMAT_PCM (karena cbSize secara implisit nol). Konvensi ini memungkinkan perangkat lunak driver untuk memperlakukan struktur WAVEFORMATEX dan PCMWAVEFORMAT secara identik dalam kasus format PCM. Untuk informasi selengkapnya tentang PCMWAVEFORMAT, lihat dokumentasi Microsoft Windows SDK.

Jika wFormatTag = WAVE_FORMAT_PCM atau wFormatTag = WAVE_FORMAT_IEEE_FLOAT, atur cbSize ke nol. Untuk semua nilai wFormatTag lainnya, cbSize menentukan berapa banyak byte data format tambahan ditambahkan ke struktur WAVEFORMATEX.

Jika wFormatTag = WAVE_FORMAT_EXTENSIBLE, atur cbSize ke sizeof(WAVEFORMATEXTENSIBLE)-sizeof(WAVEFORMATEX) ditambah ukuran data khusus format apa pun yang ditambahkan ke struktur WAVEFORMATEXTENSIBLE.

Persyaratan

   
Header mmreg.h (termasuk Mmsystem.h, Mmreg.h, Mmsystem.h)

Lihat juga

WAVEFORMATEXTENSIBLE