Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Filter gelombang mewakili perangkat yang merender dan/atau mengambil data audio digital berformat gelombang. Aplikasi biasanya mengakses kemampuan perangkat ini baik melalui API DirectSound atau melalui fungsi Microsoft Windows multimedia waveOutXxx dan waveInXxx . Untuk informasi tentang format gelombang yang dapat didukung driver audio WDM, lihat WAVEFORMATEX dan WAVEFORMATEXTENSIBLE.
Filter penyajian gelombang diterima sebagai input aliran audio digital gelombang dan output sinyal audio analog (ke satu set speaker atau mixer eksternal) atau aliran audio digital (ke konektor S/PDIF, misalnya).
Filter tangkapan gelombang menerima sebagai input sinyal audio analog (dari mikrofon atau jack input) atau aliran digital (dari konektor S/PDIF, misalnya). Filter yang sama menghasilkan aliran gelombang yang berisi data audio digital.
Filter gelombang tunggal dapat melakukan penyajian dan penangkapan secara bersamaan. Jenis filter ini mungkin, misalnya, mewakili perangkat audio yang dapat memutar audio melalui sekumpulan speaker dan merekam audio melalui mikrofon secara bersamaan. Secara bergantian, perangkat keras penyajian gelombang dan penangkapan gelombang mungkin diwakili sebagai filter gelombang terpisah, seperti yang dijelaskan dalam Dynamic Audio Subdevices.
Driver adaptor audio membentuk sebuah filter gelombang dengan menggabungkan driver miniport gelombang, yang diimplementasikan oleh vendor perangkat keras sebagai bagian dari driver adaptor, dengan driver port gelombang, yang diimplementasikan oleh sistem. Driver miniport menangani semua operasi khusus perangkat keras untuk filter gelombang, dan driver port mengelola semua fungsi filter gelombang generik.
Driver sistem PortCls (Portcls.sys) mengimplementasikan tiga driver port gelombang: WaveRT, WavePci, dan WaveCyclic.
Tiga jenis filter gelombang beroperasi sebagai berikut:
Filter WaveRT mengalokasikan buffer untuk data gelombang dan membuat buffer tersebut dapat diakses langsung oleh klien mode pengguna. Buffer dapat terdiri dari blok memori yang berdekatan atau tidak bersebelahan, tergantung pada kemampuan perangkat keras perangkat gelombang. Klien mengakses buffer sebagai blok memori virtual yang berdampingan. Buffer bersifat siklik, yang berarti bahwa ketika pointer baca perangkat (untuk penyajian) atau tulis (untuk pengambilan) mencapai akhir buffer, ia secara otomatis membungkus ke awal buffer.
Filter WavePci langsung mengakses buffer klien. Meskipun klien mengakses buffer sebagai blok memori virtual tunggal yang berdampingan, filter WavePci harus mengakses buffer sebagai serangkaian blok memori yang mungkin tidak bersebelahan. Blok yang berisi bagian berturut-turut dari aliran penyajian atau pengambilan diantrekan di perangkat. Saat penunjuk baca atau tulis perangkat mencapai akhir satu blok, perangkat berpindah ke awal blok berikutnya dalam antrean.
Filter WaveCyclic mengalokasikan buffer yang terdiri dari satu blok memori yang berdampingan untuk digunakan sebagai outputnya (untuk penyajian) atau buffer input (untuk pengambilan). Buffer ini bersifat siklik. Karena buffer tidak dapat diakses langsung oleh klien, driver harus menyalin data antara buffer siklik driver dan buffer mode pengguna klien.
WaveRT lebih disukai daripada WavePci dan WaveCyclic. WavePci dan WaveCyclic digunakan dengan versi Windows yang lebih lama.
Filter WaveRT dapat mewakili perangkat audio yang berada di bus sistem, seperti PCI atau PCI Express. Keuntungan utama filter WaveRT melalui filter WaveCyclic atau WavePci adalah filter WaveRT memungkinkan klien mode pengguna untuk bertukar data audio langsung dengan perangkat keras audio. Sebaliknya, filter WaveCyclic dan WavePci keduanya memerlukan intervensi perangkat lunak berkala oleh driver, yang meningkatkan latensi aliran audio. Selain itu, perangkat audio baik dengan dan tanpa kemampuan DMA sebar/kumpulkan dapat direpresentasikan sebagai filter WaveRT. Untuk informasi selengkapnya, lihat laporan resmi A Wave Port Driver for Real-Time Audio Streaming .
Filter WaveRT
Filter WaveRT diimplementasikan sebagai pasangan driver port/miniport. Di Windows Vista dan yang lebih baru, pabrik filter WaveRT membuat filter WaveRT sebagai berikut:
Ini menginstansiasi sebuah objek driver miniport WaveRT.
Ini membuat instans objek driver port WaveRT dengan memanggil PcNewPort dengan nilai GUID CLSID_PortWaveRT.
Ini memanggil metode IPort::Init driver port untuk mengikat driver miniport ke driver port.
Contoh kode dalam Subdevice Creation mengilustrasikan proses ini. Driver port dan miniport berkomunikasi satu sama lain melalui antarmuka IPortWaveRT dan IMiniportWaveRT mereka.
Untuk informasi selengkapnya, lihat laporan resmi A Wave Port Driver for Real-Time Audio Streaming .
Informasi untuk versi Windows sebelumnya
Informasi WaveCyclic untuk versi Windows sebelumnya
Filter WaveCyclic dapat mewakili perangkat audio yang terhubung ke bus sistem, seperti ISA, PCI, PCI Express, atau PCMCIA. Seperti namanya "WavePci" menyiratkan, filter WavePci biasanya mewakili perangkat yang terhubung ke bus PCI, meskipun, pada prinsipnya, perangkat WavePci mungkin terhubung ke bus ISA, misalnya. Tidak seperti perangkat yang lebih sederhana yang didukung oleh WaveCyclic, perangkat yang didukung oleh WavePci harus memiliki kemampuan DMA sebar/kumpulkan. Perangkat audio yang berada di bus PCI tetapi tidak memiliki DMA sebar/kumpulkan dapat diwakili sebagai filter WaveCyclic tetapi bukan sebagai filter WavePci.
Informasi WavePci untuk versi Windows sebelumnya
Perangkat WavePci dapat melakukan transfer DMA scatter/gather ke atau dari buffer yang dapat terletak di alamat memori bebas dan yang mulai dan berakhir dengan perataan byte sembarang. Sebaliknya, perangkat keras DMA untuk perangkat WaveCyclic hanya memerlukan kemampuan untuk memindahkan data ke atau dari satu buffer yang dialokasikan driver miniport perangkat. Driver miniport WaveCyclic memiliki kebebasan untuk mengalokasikan buffer siklik yang dapat memenuhi keterbatasan kemampuan saluran DMA-nya. Misalnya, saluran DMA untuk perangkat WaveCyclic khas mungkin memerlukan buffer yang memenuhi batasan berikut:
Buffer terletak di wilayah tertentu dari ruang alamat fisik.
Buffer bersifat kontigu baik dalam ruang alamat fisik maupun virtual.
Buffer dimulai dan berakhir bahkan pada batas empat atau delapan byte.
Namun, sebagai imbalan atas kesederhanaan ini, perangkat WaveCyclic harus mengandalkan penyalinan data perangkat lunak ke atau dari buffer siklik, sedangkan perangkat WavePci bergantung pada kemampuan menyebarkan/mengumpulkan perangkat keras DMA-nya untuk menghindari penyalinan tersebut. IRPs yang mengirimkan data audio gelombang ke perangkat pemutaran atau mengambil data dari perangkat penangkapan disertai oleh buffer data, dan masing-masing buffer ini berisi sebagian dari aliran audio yang sedang dirender atau ditangkap. Perangkat WavePci dapat mengakses buffer ini secara langsung melalui mesin DMA yang tersebar/mengumpulkan, sedangkan perangkat WaveCyclic mengharuskan data disalin ke buffer sikliknya dari IRP, atau sebaliknya.
WavePci Filter
Catatan: Informasi WavePci untuk versi Windows sebelumnya
Filter WavePci diimplementasikan sebagai pasangan driver port/miniport. Pabrik filter WavePci membuat filter WavePci sebagai berikut:
Ini menginstansiasi sebuah objek driver miniport WavePci.
Ini membuat instans objek driver port WavePci dengan memanggil PcNewPort dengan nilai GUID CLSID_PortWavePci.
Ini memanggil metode IPort::Init driver port untuk mengikat driver miniport ke driver port.
Contoh kode dalam Subdevice Creation mengilustrasikan proses ini. Driver port dan miniport berkomunikasi satu sama lain melalui antarmuka IPortWavePci dan IMiniportWavePci mereka.
Untuk informasi selengkapnya, lihat Masalah Implementasi untuk Perangkat WavePci.
Filter Gelombang Siklik
Nota
Microsoft mendukung lingkungan yang beragam dan inklusif. Artikel ini berisi referensi ke terminologi yang panduan gaya Microsoft untuk komunikasi bebas bias yang dikenali sebagai pengecualian. Kata atau frasa digunakan dalam artikel ini untuk konsistensi karena saat ini muncul di perangkat lunak. Ketika perangkat lunak diperbarui untuk menghapus bahasa, artikel ini akan diperbarui agar selaras.
Catatan: Informasi WaveCyclic untuk versi Windows sebelumnya
Filter WaveCyclic diimplementasikan sebagai pasangan driver port/miniport. Pabrik filter WaveCyclic membuat filter WaveCyclic sebagai berikut:
Menginstansiasi objek driver miniport WaveCyclic.
Ini membuat instans objek driver port WaveCyclic dengan memanggil PcNewPort dengan nilai GUID CLSID_PortWaveCyclic.
Ini memanggil metode IPort::Init driver port untuk mengikat driver miniport ke driver port.
Contoh kode dalam Subdevice Creation mengilustrasikan proses ini. Driver port dan miniport berkomunikasi satu sama lain melalui antarmuka IPortWaveCyclic dan IMiniportWaveCyclic mereka.
Buffer siklik filter WaveCyclic selalu terdiri dari blok memori virtual yang berdampingan. Implementasi driver port dari metode IDmaChannel::AllocateBuffer selalu mengalokasikan buffer yang berdekatan di ruang alamat memori fisik dan virtual. Jika, seperti disebutkan sebelumnya, mesin DMA perangkat WaveCyclic memberlakukan batasan tambahan pada memori buffer, driver miniport bebas untuk menerapkan metode alokasi buffer sendiri untuk memenuhi batasan ini.
Driver miniport WaveCyclic yang meminta buffer besar (misalnya, delapan halaman memori yang terus menerus secara fisik) harus siap untuk menerima ukuran buffer yang lebih kecil jika sistem operasi menolak permintaan asli. Perangkat audio kadang-kadang mungkin dibongkar dan dimuat ulang untuk menyeimbangkan kembali sumber daya sistem (lihat Menghentikan Perangkat untuk Menyeimbangkan Kembali Sumber Daya).
Perangkat WaveCyclic dengan perangkat keras DMA bawaan yang menguasai bus disebut perangkat master. Atau, perangkat WaveCyclic dapat menjadi perangkat subordinat tanpa kemampuan perangkat keras DMA bawaan. Perangkat subordinat harus mengandalkan pengontrol DMA sistem untuk melakukan transfer data apa pun yang diperlukan. Untuk informasi selengkapnya tentang perangkat master dan subordinat, lihat IDmaChannel dan IDmaChannelSlave.
Driver miniport WaveCyclic dapat mengimplementasikan objek saluran DMA sendiri sebagai ganti menggunakan objek saluran DMA default, yang dibuat oleh salah satu metode NewXxxDmaChannel driver port:
IPortWaveCyclic::NewMasterDmaChannel
IPortWaveCyclic::NewSlaveDmaChannel
Implementasi IDmaChannel kustom driver adapter dapat melakukan penanganan data kustom untuk memenuhi batasan perangkat keras khusus. Misalnya, fungsi Multimedia Windows menggunakan format gelombang di mana sampel 16-bit selalu ditandatangani nilai, tetapi perangkat keras penyajian audio mungkin dirancang untuk menggunakan nilai 16-bit yang tidak ditandatangani sebagai gantinya. Dalam hal ini, metode IDmaChannel::CopyTo kustom driver dapat ditulis untuk mengonversi nilai sumber yang ditandatangani ke nilai tujuan yang tidak ditandatangani yang diperlukan perangkat keras. Meskipun teknik ini dapat berguna untuk mengatasi kelemahan desain perangkat keras, teknik ini juga dapat dikenakan biaya yang signifikan dalam overhead perangkat lunak.
Untuk contoh driver yang mengimplementasikan objek saluran DMA sendiri, lihat adaptor audio sampel Sb16 di versi WDK yang lebih lama. Jika konstanta OVERRIDE_DMA_CHANNEL didefinisikan menjadi TRUE, pernyataan kompilasi bersyarat dalam kode sumber memungkinkan implementasi objek IDmaChannel milik, yang digunakan driver sebagai pengganti objek IDmaChannel default dari panggilan IPortWaveCyclic::NewXxxDmaChannel.