Bagikan melalui


Deskriptor Wave-Format yang Dapat Diperluas

Gambar berikut menunjukkan deskriptor format data untuk aliran audio gelombang.

Diagram yang mengilustrasikan deskriptor format gelombang untuk aliran audio.

Seperti yang ditunjukkan dalam gambar, jumlah informasi format tambahan setelah struktur KSDATAFORMAT bervariasi tergantung pada format data.

Sistem audio menggunakan jenis deskriptor format ini dengan beberapa cara:

  • Deskriptor format seperti yang ditunjukkan pada gambar sebelumnya diteruskan sebagai parameter panggilan ke metode NewStream driver miniport (misalnya, lihat IMiniportWaveCyclic::NewStream).

  • Parameter ResultantFormat dari metode IMiniport::D ataRangeIntersection menunjuk ke buffer tempat metode menulis deskriptor format seperti yang ditunjukkan pada gambar sebelumnya.

  • Permintaan get-property KSPROPERTY_PIN_DATAINTERSECTION mengambil deskriptor format seperti yang ditunjukkan pada gambar sebelumnya.

  • Permintaan set-property KSPROPERTY_PIN_PROPOSEDATAFORMAT menerima deskriptor format seperti yang ditunjukkan pada gambar sebelumnya.

  • Format serupa digunakan untuk parameter panggilan Sambungkan fungsi KsCreatePin. Parameter ini menunjuk ke struktur KSPIN_CONNECT di awal buffer yang juga berisi deskriptor format. Deskriptor format, yang segera mengikuti struktur KSPIN_CONNECT, dimulai dengan struktur KSDATAFORMAT seperti yang ditunjukkan pada gambar sebelumnya.

Informasi format yang mengikuti struktur KSDATAFORMAT harus merupakan struktur WAVEFORMATEXTENSIBLE . WAVEFORMATEXTENSIBLE adalah versi panjang WAVEFORMATEX yang dapat menggambarkan berbagai format yang lebih luas daripada WAVEFORMATEX.

WAVEFORMAT sudah usang dan tidak didukung oleh subsistem audio WDM dalam versi Microsoft Windows apa pun. Struktur PCMWAVEFORMAT adalah versi panjang dari WAVEFORMAT yang juga usang.

Empat struktur format gelombang--WAVEFORMAT, PCMWAVEFORMAT, WAVEFORMATEX, dan WAVEFORMATEXTENSIBLE--semua dimulai dengan lima anggota yang sama, dimulai dengan wFormatTag. Gambar sebelumnya menunjukkan keempat struktur ini ditumpukan satu sama lain untuk menyoroti bagian struktur yang identik.

WAVEFORMATEXTENSIBLE memperluas WAVEFORMATEX dengan menambahkan tiga anggota, dimulai dengan Samples.wValidBitsPerSample. (Sampel adalah gabungan yang anggota lainnya, wValidSamplesPerBlock, digunakan alih-alih wValidBitsPerSample untuk beberapa format terkompresi.) Anggota wFormatTag , yang segera mengikuti akhir struktur KSDATAFORMAT dalam buffer, menentukan jenis informasi format apa yang mengikuti KSDATAFORMAT.

Tidak seperti WAVEFORMATEX, WAVEFORMATEXTENSIBLE dapat melakukan hal berikut:

  1. Tentukan jumlah bit per sampel secara terpisah dari ukuran kontainer sampel. Misalnya, sampel 20-bit dapat disimpan di sebelah kiri dibenarkan dalam kontainer tiga byte. WAVEFORMATEX, yang gagal membedakan jumlah bit data per sampel dari ukuran kontainer sampel, tidak dapat menggambarkan format seperti itu secara tidak ambigu.

  2. Tetapkan lokasi speaker tertentu ke saluran audio di aliran multisaluran. WAVEFORMATEX tidak memiliki kemampuan ini dan cukup mendukung aliran stereo mono dan (dua saluran).

Penggunaan WARISAN WAVEFORMATEX

Format apa pun yang dijelaskan oleh WAVEFORMATEX juga dapat dijelaskan oleh WAVEFORMATEXTENSIBLE. Untuk informasi tentang mengonversi struktur WAVEFORMATEX ke WAVEFORMATEXTENSIBLE, lihat Mengonversi Antara Tag Format dan GUID Subformat.

WAVEFORMATEX cukup untuk menjelaskan format dengan ukuran sampel 8 atau 16 bit, tetapi WAVEFORMATEXTENSIBLE diperlukan untuk menggambarkan format dengan presisi sampel yang lebih besar dari 16 bit. Berikut dua contohnya:

  • Aliran dengan presisi sampel 24 bit dapat menggunakan ukuran kontainer 32-bit untuk pemrosesan yang efisien, tetapi dapat dikonversi untuk menggunakan kontainer 24-bit untuk meningkatkan efisiensi penyimpanan tanpa kehilangan data.

  • Saat memproses aliran dengan data sampel 24-bit, perangkat penyajian yang menyediakan hanya 20 bit presisi yang dapat menggunakan dithering untuk meningkatkan keakuratan sinyal outputnya. Namun, dithering memerlukan waktu pemrosesan tambahan, dan jika aliran asli akurat hanya 20 bit, pemrosesan tambahan tidak perlu.

Dalam kedua contoh ini, mempertahankan kualitas sinyal sambil membuat tradeoff yang tepat antara pemrosesan dan efisiensi penyimpanan hanya dimungkinkan jika presisi sampel dan ukuran kontainer diketahui.

Jika format sederhana dapat dijelaskan secara tidak ambigu oleh WAVEFORMATEX atau struktur WAVEFORMATEXTENSIBLE, driver audio memiliki opsi untuk memilih salah satu struktur untuk menggambarkan format. Namun, driver audio biasanya telah menggunakan WAVEFORMATEX untuk menentukan format PCM stereo mono dan (dua saluran) dengan sampel 8-bit atau 16-bit, dan beberapa aplikasi lama mungkin mengharapkan semua driver audio menggunakan WAVEFORMATEX untuk menentukan format ini.

Jika driver mendukung format audio yang dapat secara tidak ambigu ditentukan sebagai struktur WAVEFORMATEX atau WAVEFORMATEXTENSIBLE, driver harus mengenali format terlepas dari dua struktur yang digunakan aplikasi atau komponen klien untuk menentukan struktur. Misalnya, jika perangkat audio mendukung format PCM 44,1-kHz, 16-bit, stereo, handler properti KSPROPERTY_PIN_PROPOSEDATAFORMAT driver miniport dan implementasi metode NewStream harus menerima format tersebut terlepas dari apakah format ditentukan sebagai WAVEFORMATEX atau struktur WAVEFORMATEXTENSIBLE.

Untuk menyederhanakan pemrosesan data format, driver biasanya menggunakan struktur WAVEFORMATEXTENSIBLE untuk mewakili format secara internal. Pendekatan ini mungkin memerlukan konversi struktur WAVEFORMATEX input ke representasi WAVEFORMATEXTENSIBLE internal, atau konversi representasi WAVEFORMATEXTENSIBLE internal ke struktur WAVEFORMATEX output.

Dalam WAVEFORMATEXTENSIBLE, dwBitsPerSample adalah ukuran kontainer, dan wValidBitsPerSample adalah jumlah bit data yang valid per sampel. Kontainer selalu selaras dengan byte dalam memori, dan ukuran kontainer harus ditentukan sebagai kelipatan delapan bit.