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.
Program aplikasi mengandalkan kombinasi komponen mode pengguna dan mode kernel untuk menangkap (input) dan merender (output) aliran gelombang. Aliran gelombang adalah aliran audio digital yang format datanya dijelaskan oleh struktur WAVEFORMATEX atau WAVEFORMATEXTENSIBLE .
Aplikasi dapat menggunakan salah satu antarmuka perangkat lunak berikut untuk penyajian dan pengambilan gelombang:
Fungsi Microsoft Windows Multimedia waveOutXxx dan waveInXxx
API DirectSound dan DirectSoundCapture
Perilaku fungsi waveOutXxx dan waveInXxx didasarkan pada kemampuan driver dan perangkat gelombang warisan. Dimulai dengan Windows 98, driver sistem WDMAud menerjemahkan panggilan ke fungsi-fungsi ini ke dalam perintah ke driver audio WDM. Namun, dengan meniru perilaku perangkat lunak dan perangkat keras yang lebih lama, fungsi waveOutXxx mengorbankan efek suara 3-D dan akselerasi perangkat keras yang sekarang tersedia melalui API DirectSound. Untuk informasi selengkapnya tentang DirectSound dan fungsi gelombang Multimedia Windows, lihat dokumentasi Microsoft Windows SDK.
DirectSound dan fungsi gelombang Multimedia Windows adalah klien driver sistem SysAudio, yang membangun grafik filter audio yang memproses aliran gelombang dan DirectSound. Pembuatan grafik transparan untuk aplikasi yang menggunakan antarmuka perangkat lunak ini.
Komponen Gelombang
Gambar berikut menunjukkan komponen mode pengguna dan mode kernel yang digunakan aplikasi gelombang untuk merender atau menangkap aliran audio digital yang terdiri dari data PCM gelombang.
Komponen penyajian muncul di sisi kiri gambar sebelumnya, dan komponen pengambilan muncul di sebelah kanan. Kotak yang mewakili driver miniport gelombang digelapkan untuk menunjukkan bahwa ini adalah komponen yang disediakan vendor. Komponen lain dalam gambar disediakan sistem.
Di kiri atas gambar, antarmuka aplikasi wave-rendering (atau "wave-out") ke driver audio WDM melalui fungsi waveOutXxx , yang diimplementasikan dalam komponen sistem WinMM mode pengguna, Winmm.dll. Aplikasi membaca blok sampel audio gelombang dari file dan memanggil fungsi waveOutWrite untuk merendernya.
WDMAud, yang terdiri dari komponen mode pengguna dan mode kernel (Wdmaud.drv dan Wdmaud.sys), menyangga data gelombang dari panggilan waveOutWrite dan menghasilkan aliran gelombang ke driver sistem KMixer, yang muncul di bawah WDMAud dalam gambar.
KMixer adalah komponen sistem yang menerima aliran PCM gelombang dari satu atau beberapa sumber dan mencampurnya bersama-sama untuk membentuk aliran output tunggal, yang juga dalam format PCM gelombang.
KMixer menghasilkan aliran gelombang ke perangkat WaveCyclic atau WavePci, yang driver port dan miniportnya muncul di bawah KMixer di sisi kiri gambar sebelumnya. Driver miniport mengikat dirinya ke driver port untuk membentuk filter gelombang yang mewakili perangkat penyajian audio yang mendasar. Perangkat penyajian umum menghasilkan sinyal analog yang mendorong sekumpulan speaker atau unit audio eksternal. Perangkat penyajian mungkin juga menghasilkan audio digital melalui konektor S/PDIF. Untuk informasi selengkapnya tentang WaveCyclic dan WavePci, lihat Filter Gelombang.
Atau, KMixer dapat meneruskan aliran outputnya ke perangkat audio USB, yang dikendalikan oleh driver sistem kelas USBAudio (tidak ditampilkan dalam gambar), bukan perangkat WaveCyclic atau WavePci.
Driver adaptor membuat instans driver port WaveCyclic atau WavePci dengan memanggil PcNewPort dengan nilai GUID masing-masing CLSID_PortWaveCyclic atau CLSID_PortWavePci.
Sisi kanan gambar sebelumnya menunjukkan komponen yang diperlukan untuk mendukung aplikasi yang menangkap data gelombang ke file. Aplikasi wave-capture (atau "wave-in") berkomunikasi dengan driver audio WDM melalui fungsi waveInXxx , yang diimplementasikan dalam komponen sistem WinMM.
Di sudut kanan bawah gambar, perangkat tangkap gelombang dikendalikan oleh miniport gelombang dan driver port. Port dan driver miniport, yang dapat berjenis WaveCyclic atau WavePci, mengikat bersama untuk membentuk filter gelombang yang mewakili perangkat tangkapan. Perangkat ini biasanya menangkap sinyal analog dari mikrofon atau sumber audio lainnya dan mengonversinya menjadi aliran PCM gelombang. Perangkat mungkin juga memasukkan aliran audio digital melalui konektor S/PDIF.
Driver port gelombang mengeluarkan aliran gelombangnya baik ke KMixer atau ke WDMAud secara langsung. Aliran harus melewati KMixer jika perlu dikonversi laju sampel sebelum WDMAud menerimanya. Sistem yang melakukan penyajian dan pengambilan aliran audio secara bersamaan mungkin memerlukan dua instans KMixer, seperti yang ditunjukkan pada gambar. Perhatikan bahwa SysAudio secara otomatis membuat instans ini sesuai kebutuhan.
Atau, sumber aliran gelombang yang diambil dapat menjadi perangkat audio USB alih-alih perangkat WaveCyclic atau WavePci. Dalam hal ini, driver USBAudio (tidak ditampilkan dalam gambar) meneruskan aliran ke KMixer.
Terlepas dari apakah aliran gelombang ditangkap oleh perangkat USB atau oleh perangkat WaveCyclic atau WavePci, KMixer melakukan konversi laju sampel pada aliran, jika diperlukan, tetapi tidak mencampur dengan aliran lain. KMixer menghasilkan aliran yang dihasilkan ke Wdmaud.sys, setengah mode kernel dari driver sistem WDMAud. Setengah mode pengguna, Wdmaud.drv, menghasilkan aliran gelombang ke program aplikasi melalui fungsi waveInXxx , yang diimplementasikan dalam Winmm.dll. Akhirnya, di bagian atas gambar, aplikasi penangkapan gelombang menulis data gelombang ke file.
Pada saat aplikasi penangkapan gelombang memanggil fungsi waveInOpen untuk membuka aliran pengambilan, aplikasi meneruskan penunjuk ke rutinitas panggilan baliknya. Ketika peristiwa penangkapan gelombang terjadi, sistem operasi memanggil rutinitas panggilan balik dengan buffer yang berisi blok sampel gelombang berikutnya dari perangkat tangkapan. Menanggapi panggilan balik, aplikasi menulis blok data gelombang berikutnya ke file.
Komponen DirectSound
Gambar berikut menunjukkan komponen mode pengguna dan mode kernel yang digunakan oleh program aplikasi DirectSound untuk merender atau menangkap data gelombang.
Komponen penyajian ditampilkan di bagian kiri gambar sebelumnya, dan komponen tangkapan muncul di sebelah kanan. Driver miniport gelombang ditampilkan sebagai kotak gelap untuk menunjukkan bahwa mereka adalah komponen yang disediakan vendor. Komponen lain dalam gambar disediakan sistem.
Di kiri atas gambar, aplikasi DirectSound memuat data gelombang dari file ke buffer suara yang dikelola komponen sistem DirectSound mode pengguna (Dsound.dll). Komponen ini mengirimkan aliran gelombang ke perangkat WaveCyclic atau WavePci, yang driver port dan miniportnya muncul di kiri bawah dalam gambar. Jika pin mixer perangkat keras tersedia di perangkat, aliran akan langsung diteruskan ke driver port gelombang, melewati KMixer. Jika tidak, streaming pertama kali melewati KMixer, yang mencampurnya dengan aliran lain yang diputar secara bersamaan. KMixer menghasilkan aliran campuran ke driver port.
Seperti sebelumnya, driver miniport mengikat dirinya ke driver port untuk membentuk filter gelombang yang mewakili perangkat penyajian audio yang mendasar. Perangkat ini mungkin memutar streaming melalui sekumpulan speaker, misalnya.
Atau, aliran gelombang dapat dirender oleh perangkat audio USB alih-alih perangkat WaveCyclic atau WavePci. Dalam hal ini, aliran tidak dapat melewati KMixer; driver sistem kelas USBAudio (tidak ditampilkan dalam gambar) selalu meneruskan aliran ke KMixer.
Sisi kanan gambar sebelumnya menunjukkan komponen yang mendukung aplikasi DirectSoundCapture. Aplikasi merekam data gelombang yang diterima dari perangkat penangkapan WaveCyclic atau WavePci. Perangkat ini mengonversi sinyal analog dari mikrofon, misalnya, menjadi aliran gelombang. Port gelombang perangkat dan driver miniport muncul di sudut kanan bawah gambar. Seperti yang ditunjukkan pada gambar, driver port menerima sebagai input aliran dari driver miniport dan mengeluarkannya langsung ke komponen DirectSound mode pengguna, Dsound.dll, atau secara tidak langsung melalui KMixer. Ini tergantung pada apakah pin penangkapan perangkat keras tersedia dari perangkat tangkapan.
Atau, sumber aliran gelombang yang diambil dapat menjadi perangkat audio USB. Dalam hal ini, aliran tidak dapat melewati KMixer; driver USBAudio (tidak ditampilkan dalam gambar) selalu meneruskan aliran ke KMixer.
Jika KMixer dimasukkan ke jalur aliran pengambilan, KMixer melakukan konversi laju sampel pada aliran, jika diperlukan, tetapi tidak mencampur dengan aliran lain.
Di sudut kanan atas gambar sebelumnya, aplikasi membaca data gelombang dari buffer DirectSoundCapture dan menulisnya ke file.