Bagikan melalui


Struktur WAVEFORMATEXTENSIBLE (ksmedia.h)

Struktur WAVEFORMATEXTENSIBLE menentukan format aliran gelombang audio.

Sintaks

typedef struct {
  WAVEFORMATEX Format;
  union {
    WORD wValidBitsPerSample;
    WORD wSamplesPerBlock;
    WORD wReserved;
  } Samples;
  DWORD        dwChannelMask;
  GUID         SubFormat;
} WAVEFORMATEXTENSIBLE, *PWAVEFORMATEXTENSIBLE;

Anggota

Format

Menentukan format data gelombang aliran. Anggota ini adalah struktur jenis WAVEFORMATEX. Anggota wFormat WAVEFORMATEX harus diatur ke WAVE_FORMAT_EXTENSIBLE. Anggota wBitsPerSample dari WAVEFORMATEX didefinisikan secara tidak ambigu sebagai ukuran kontainer untuk setiap sampel. Kontainer sampel selalu selaras dengan byte, dan wBitsPerSample harus kelipatan delapan.

Samples

Samples.wValidBitsPerSample

Menentukan presisi sampel dalam bit. Nilai anggota ini harus kurang dari atau sama dengan ukuran kontainer yang ditentukan dalam Format. Anggota wBitsPerSample . Untuk informasi selengkapnya, lihat bagian Keterangan berikut ini.

Samples.wSamplesPerBlock

Menentukan jumlah sampel yang terkandung dalam satu blok terkompresi. Nilai ini berguna untuk memperkirakan persyaratan buffer untuk format terkompresi yang memiliki jumlah sampel tetap dalam setiap blok. Atur anggota ini ke nol jika setiap blok data audio terkompresi berisi jumlah variabel sampel. Dalam hal ini, informasi buffer-estimation dan buffer-position harus diperoleh dengan cara lain.

Samples.wReserved

Dicadangkan untuk penggunaan internal oleh sistem operasi. Inisialisasi ke nol.

dwChannelMask

Menentukan penugasan saluran dalam aliran multisaluran ke posisi pembicara. Pengodean sama dengan yang digunakan untuk anggota ActiveSpeakerPositions dari struktur KSAUDIO_CHANNEL_CONFIG . Untuk informasi selengkapnya, lihat bagian Keterangan.

SubFormat

Menentukan subformat. Untuk informasi selengkapnya, lihat bagian Keterangan.

Keterangan

WAVEFORMATEXTENSIBLE adalah bentuk yang diperluas dari struktur WAVEFORMATEX . WAVEFORMATEX dapat secara tidak ambigu hanya menggambarkan subset format yang dapat dijelaskan oleh WAVEFORMATEXTENSIBLE. WAVEFORMATEXTENSIBLE tidak tunduk pada batasan WAVEFORMATEX, yang tidak dapat secara tidak ambigu menentukan format dengan lebih dari dua saluran atau yang jumlah bit yang valid per sampel tidak sama dengan ukuran kontainer sampel. Untuk informasi selengkapnya, lihat Format Data Audio dan Rentang Data.

Sering kali, anggota wValidBitsPerSample , yang menentukan presisi sampel, berisi nilai yang sama dengan Format. Anggota wBitsPerSample , yang menentukan ukuran kontainer sampel. Namun, nilai-nilai ini bisa berbeda. Misalnya, jika data gelombang berasal dari pengonversi A/D 20-bit, maka wValidBitsPerSample harus 20 tetapi Format. wBitsPerSample mungkin 24 atau 32. Jika wValidBitsPerSample kurang dari Format. wBitsPerSample, bit yang valid (data PCM aktual) diratakan kiri dalam kontainer. Bit yang tidak digunakan dalam bagian kontainer yang paling tidak signifikan harus diatur ke nol.

Kontainer sampel dimulai dan berakhir pada batas byte, dan nilai Format. wBitsPerSample harus selalu menjadi kelipatan dari delapan. Selain itu, nilai wValidBitsPerSample tidak boleh melebihi Format. wBitsPerSample. Driver harus menolak format gelombang yang melanggar aturan ini.

Anggota dwChannelMask struktur WAVEFORMATEXTENSIBLE berisi masker yang menunjukkan saluran mana yang ada di aliran multisaluran. Bit yang paling tidak signifikan mewakili speaker kiri depan, bit berikutnya sesuai dengan speaker kanan depan, dan sebagainya. Bit bendera berikut didefinisikan dalam file header Ksmedia.h.

Posisi pembicara Bit bendera
SPEAKER_FRONT_LEFT 0x1
SPEAKER_FRONT_RIGHT 0x2
SPEAKER_FRONT_CENTER 0x4
SPEAKER_LOW_FREQUENCY 0x8
SPEAKER_BACK_LEFT 0x10
SPEAKER_BACK_RIGHT 0x20
SPEAKER_FRONT_LEFT_OF_CENTER 0x40
SPEAKER_FRONT_RIGHT_OF_CENTER 0x80
SPEAKER_BACK_CENTER 0x100
SPEAKER_SIDE_LEFT 0x200
SPEAKER_SIDE_RIGHT 0x400
SPEAKER_TOP_CENTER 0x800
SPEAKER_TOP_FRONT_LEFT 0x1000
SPEAKER_TOP_FRONT_CENTER 0x2000
SPEAKER_TOP_FRONT_RIGHT 0x4000
SPEAKER_TOP_BACK_LEFT 0x8000
SPEAKER_TOP_BACK_CENTER 0x10000
SPEAKER_TOP_BACK_RIGHT 0x20000

Saluran yang ditentukan dalam dwChannelMask harus ada dalam urutan yang ditampilkan dalam tabel sebelumnya, dimulai di bagian atas.

Misalnya, jika hanya kiri depan dan tengah depan yang ditentukan, maka kiri depan dan tengah depan harus berada di saluran 0 dan 1, masing-masing, dari aliran yang disisipkan.

Sebagai contoh kedua, jika nChannels (dalam anggota Format ; lihat WAVEFORMATEX) diatur ke 4 dan dwChannelMask diatur ke 0x00000033, saluran audio ditujukan untuk pemutaran ke speaker kiri depan, kanan depan, kiri belakang, dan kanan belakang. Data saluran harus diselingi dalam urutan tersebut dalam setiap blok.

Lokasi saluran di luar yang telah ditentukan sebelumnya dianggap dicadangkan.

Atau, masker saluran dapat ditentukan sebagai salah satu konstanta berikut, yang didefinisikan dalam Ksmedia.h dan merupakan kombinasi ORed bitwise dari bendera sebelumnya yang mewakili konfigurasi speaker standar:

KSAUDIO_SPEAKER_MONO

KSAUDIO_SPEAKER_STEREO

KSAUDIO_SPEAKER_QUAD

KSAUDIO_SPEAKER_SURROUND

KSAUDIO_SPEAKER_5POINT1

KSAUDIO_SPEAKER_7POINT1

KSAUDIO_SPEAKER_DIRECTOUT

Perangkat keras dapat diatur ke salah satu konfigurasi speaker ini dengan permintaan set-property KSPROPERTY_AUDIO_CHANNEL_CONFIG . Untuk informasi selengkapnya tentang pengaturan konfigurasi pembicara, lihat KSAUDIO_CHANNEL_CONFIG.

Biasanya, jumlah dalam nChannels sama dengan jumlah bit yang ditetapkan dalam dwChannelMask, tetapi ini belum tentu demikian. Jika nChannels kurang dari jumlah bit yang ditetapkan dalam dwChannelMask, bit tambahan (paling signifikan) di dwChannelMask diabaikan. Jika nChannels melebihi jumlah bit yang diatur dalam dwChannelMask, saluran yang tidak memiliki bit masker yang sesuai tidak ditetapkan ke posisi speaker fisik apa pun. Dalam konfigurasi speaker apa pun selain KSAUDIO_SPEAKER_DIRECTOUT, sink audio seperti KMixer (lihat KMixer System Driver) hanya mengabaikan saluran berlebih ini dan hanya mencampur saluran yang memiliki bit masker yang sesuai.

KSAUDIO_SPEAKER_DIRECTOUT mewakili konfigurasi tanpa speaker dan didefinisikan dalam Ksmedia.h sebagai nol. Dalam konfigurasi ini, perangkat audio merender saluran pertama ke port pertama pada perangkat, saluran kedua ke port kedua pada perangkat, dan sebagainya. Ini memungkinkan aplikasi penulisan audio untuk menghasilkan data multisaluran secara langsung dan tanpa modifikasi pada perangkat seperti mixer digital atau perangkat penyimpanan audio digital (hard disk atau ADAT). Misalnya, saluran 0 hingga 30 mungkin berisi, masing-masing, drum, gitar, bass, suara, dan sebagainya. Untuk data audio mentah semacam ini, posisi pembicara tidak berarti, dan menetapkan posisi pembicara ke aliran input atau output dapat menyebabkan komponen seperti KMixer campur tangan secara tidak pantas dengan melakukan konversi format yang tidak diinginkan. Jika perangkat tidak dapat memproses aliran audio mentah, perangkat harus menolak permintaan untuk mengubah konfigurasi speakernya menjadi KSAUDIO_SPEAKER_DIRECTOUT. Untuk informasi selengkapnya, lihat konfigurasi speaker DSSPEAKER_DIRECTOUT.

Untuk informasi selengkapnya tentang konfigurasi multisaluran, lihat laporan resmi berjudul Multiple Channel Audio Data dan WAVE Files di situs web teknologi audio .

Anggota SubFormat berisi GUID yang menentukan format data umum untuk aliran gelombang. Misalnya, GUID ini mungkin menentukan bahwa aliran berisi data PCM bilangan bulat. Anggota lain memberikan informasi tambahan seperti ukuran sampel dan jumlah saluran. Arti GUID SubFormat mirip dengan tag format 16-bit di anggota wFormatTag struktur WAVEFORMATEX.

Sebelum WAVEFORMATEXTENSIBLE diperkenalkan di Windows 98 Second Edition, WAVEFORMATEX adalah struktur pilihan untuk menentukan format gelombang. Pada saat itu, vendor perlu mendaftarkan setiap format gelombang baru dengan Microsoft sehingga tag format resmi dapat ditetapkan ke format. Daftar tag format terdaftar muncul di file header publik Mmreg.h.

Dengan WAVEFORMATEXTENSIBLE, mendaftarkan format tidak lagi diperlukan. Vendor dapat secara independen menetapkan GUID SubFormat ke format baru mereka sesuai kebutuhan. Namun, Microsoft mencantumkan beberapa GUID SubFormat yang lebih populer dalam file header publik Ksmedia.h. Sebelum menentukan GUID SubFormat baru, vendor harus memeriksa daftar konstanta KSDATAFORMAT_SUBTYPE_Xxx di Ksmedia.h untuk melihat apakah GUID yang sesuai telah ditentukan untuk format tertentu.

Untuk kompatibilitas mundur, format gelombang apa pun yang dapat ditentukan oleh struktur WAVEFORMATEX yang berdiri sendiri juga dapat didefinisikan oleh struktur WAVEFORMATEXTENSIBLE. Dengan demikian, setiap tag format di Mmreg.h memiliki GUID SubFormat yang sesuai. Tabel berikut ini memperlihatkan beberapa tag format umum dan GUID SubFormat terkait.

Format tag SubFormat GUID
WAVE_FORMAT_PCM KSDATAFORMAT_SUBTYPE_PCM
WAVE_FORMAT_IEEE_FLOAT KSDATAFORMAT_SUBTYPE_IEEE_FLOAT
WAVE_FORMAT_DRM KSDATAFORMAT_SUBTYPE_DRM
WAVE_FORMAT_ALAW KSDATAFORMAT_SUBTYPE_ALAW
WAVE_FORMAT_MULAW KSDATAFORMAT_SUBTYPE_MULAW
WAVE_FORMAT_ADPCM KSDATAFORMAT_SUBTYPE_ADPCM

Untuk informasi selengkapnya, lihat Mengonversi Antara Tag Format dan GUID Subformat.

Karena WAVEFORMATEXTENSIBLE adalah versi WAVEFORMATEX yang diperluas, WAVEFORMATEX dapat menjelaskan format tambahan yang tidak dapat dijelaskan oleh WAVEFORMATEX saja. Vendor bebas untuk menentukan GUID SubFormat mereka sendiri untuk mengidentifikasi format kepemilikan yang tidak ada tag format gelombang.

Persyaratan

Persyaratan Nilai
Header ksmedia.h (termasuk Mmreg.h, Ksmedia.h, Mmreg.h)

Lihat juga

KSAUDIO_CHANNEL_CONFIG

WAVEFORMATEX