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 kernel untuk menangkap dan memutar kembali aliran MIDI dan DirectMusic.
Aplikasi dapat menggunakan salah satu antarmuka perangkat lunak berikut untuk pemutaran dan pengambilan MIDI:
Fungsi Microsoft Windows Multimedia midiOutXxx dan midiInXxx
DirectMusic API
Perilaku fungsi midiOutXxx dan midiInXxx didasarkan pada kemampuan driver dan perangkat MIDI 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 midiOutXxx dan midiInXxx mengorbankan waktu presisi dan fungsionalitas yang ditingkatkan yang sekarang tersedia melalui API DirectMusic. Untuk informasi selengkapnya tentang fungsi DirectMusic dan Windows Multimedia MIDI, lihat dokumentasi Microsoft Windows SDK.
Fungsi DirectMusic dan Windows Multimedia MIDI adalah klien driver sistem SysAudio, yang membangun grafik filter audio yang memproses aliran MIDI dan DirectMusic. Pembuatan grafik transparan untuk aplikasi yang menggunakan antarmuka perangkat lunak ini.
Komponen MIDI
Gambar berikut menunjukkan komponen mode pengguna dan mode kernel yang digunakan aplikasi MIDI untuk memutar kembali data MIDI. Aplikasi ini berinteraksi ke driver audio WDM melalui fungsi midiOutXxx , yang diimplementasikan dalam komponen sistem WinMM, Winmm.dll.
Aplikasi MIDI pada gambar sebelumnya membaca peristiwa MIDI bertanda waktu dari file MIDI dan memutarnya. Driver miniport MIDI dan DMus ditampilkan sebagai kotak gelap untuk menunjukkan bahwa mereka dapat menjadi komponen yang disediakan vendor. Jika sesuai, vendor mungkin memilih untuk menggunakan salah satu driver miniport yang disediakan sistem--FMSynth, UART, atau DMusUART--alih menulis driver miniport kustom. Semua komponen lain dalam gambar disediakan sistem.
Perulangan utama aplikasi pemutaran MIDI yang khas memanggil timeSetEvent untuk menjadwalkan peristiwa note-on atau note-off berikutnya. Panggilan ini mengambil sebagai salah satu parameternya penunjuk fungsi ke rutinitas panggilan balik aplikasi. Ketika peristiwa terjadi dan sistem operasi memanggil rutinitas panggilan balik, rutinitas ini memanggil midiOutShortMsg untuk mengaktifkan atau menonaktifkan satu atau beberapa catatan terjadwal. Fungsi midiOutShortMsg menyimpan pesan MIDI di buffer data yang dikunci halaman untuk menghilangkan kebutuhan untuk memasukkan halaman dalam memori ini selama panggilan. Untuk informasi selengkapnya tentang panggilan timeSetEvent dan midiOutShortMsg , lihat dokumentasi Microsoft Windows SDK.
WDMAud, yang terdiri dari komponen pengguna dan mode kernel (Wdmaud.drv dan Wdmaud.sys), mencatat waktu saat pesan MIDI mentah dari panggilan midiOutShortMsg tiba. WDMAud menggabungkan stempel waktu ini dengan pesan MIDI untuk menghasilkan aliran MIDI yang dikirimnya ke salah satu komponen mode kernel yang muncul di bawah WDMAud dalam gambar.
Saat membangun grafik filter audio untuk aplikasi MIDI, SysAudio hanya memilih salah satu dari tiga koneksi yang mungkin -- ke SWMidi, port MIDI, atau driver port DMus -- yang muncul pada gambar sebelumnya. Jika aplikasi memilih perangkat MIDI default, SysAudio terlebih dahulu mencari perangkat synthesizer yang driver miniport MIDI atau DMus-nya memiliki pin MIDI. Jika tidak menemukan perangkat tersebut di registri, SysAudio akan menggunakan driver sistem SWMidi (Swmidi.sys). SWMidi adalah filter KS yang mengimplementasikan synth wavetable dalam perangkat lunak, dan hanya memerlukan perangkat yang dapat merender aliran audio gelombang.
SWMidi menggabungkan semua suaranya bersama-sama untuk menghasilkan aliran PCM gelombang tunggal, yang dihasilkannya ke driver sistem KMixer. KMixer, pada gilirannya, meneruskan aliran gelombang berformat PCM ke perangkat WaveCyclic atau WavePci, yang port dan driver miniportnya muncul di sudut kiri bawah gambar. Atau, KMixer dapat meneruskan aliran outputnya ke perangkat audio USB yang dikendalikan oleh driver sistem kelas USBAudio (tidak ditampilkan dalam gambar).
Pada gambar sebelumnya, driver port MIDI mengambil aliran MIDI bertanda waktu dari WDMAud dan mengonversinya menjadi pesan MIDI mentah, yang dimainkan driver miniport MIDI melalui perangkat synthesizer. Driver port MIDI berisi sequencer, yang diimplementasikan dalam perangkat lunak dan dapat menjadwalkan pesan MIDI mentah dengan resolusi timer satu milidetik.
Driver port DMus mampu mencapai akurasi waktu yang jauh lebih tinggi daripada driver port MIDI jika perangkat synthesizer berisi pengurut perangkat keras. Dalam hal ini, driver miniport DMus harus menentukan buffer perangkat keras yang cukup besar untuk menyerap jitter yang dihasilkan dari persaingan untuk waktu CPU dengan ISR (rutinitas layanan interupsi) dan operasi prioritas tinggi lainnya. Stempel waktu dalam aliran MIDI yang dihasilkan driver port DMus ke driver miniport adalah nilai 64-bit dengan resolusi 100 nanodetik.
Jika Synth DMusic tidak memiliki pengurut perangkat keras, itu harus mengandalkan pengurut perangkat lunak driver port DMus, yang, seperti driver port MIDI, memiliki resolusi timer satu milidetik.
Driver adaptor membuat driver port MIDI atau DMus dengan memanggil PcNewPort dengan nilai GUID masing-masing CLSID_PortMidi atau CLSID_PortDMus. Di Windows XP dan yang lebih baru, driver port MIDI dan DMus berbagi implementasi perangkat lunak yang sama.
Muncul di bagian bawah gambar sebelumnya adalah nama driver miniport yang disediakan sistem FMSynth, UART, dan DMusUART, yang disertakan dalam Portcls.sys. Driver adaptor membuat salah satu driver miniport ini dengan memanggil PcNewMiniport. FMSynth dan UART menyediakan antarmuka IMiniportMidi , dan DMusUART menyediakan antarmuka IMiniportDMus . Perhatikan bahwa UART sekarang usang (setelah Windows 98 Gold) dan hanya didukung untuk driver yang ada. Driver adaptor baru seharusnya menggunakan DMusUART (di Windows 98 SE dan yang lebih baru, dan di Windows 2000 dan yang lebih baru), yang mengimplementasikan superset fungsionalitas UART. DMusUART adalah contoh driver miniport DMus yang tidak mendukung unduhan DLS maupun pengurutan perangkat keras. Kode sumber untuk driver miniport FMSynth dan DMusUART tersedia dalam driver audio sampel di Windows Driver Kit (WDK).
Gambar berikut menunjukkan komponen mode pengguna dan mode kernel yang digunakan program aplikasi MIDI untuk mengambil data MIDI. Aplikasi ini berinteraksi ke driver audio WDM melalui fungsi midiInXxx .
Pada gambar sebelumnya, driver miniport MIDI dan DMus ditampilkan sebagai kotak gelap untuk menunjukkan bahwa mereka dapat menjadi komponen yang disediakan vendor. Jika sesuai, vendor mungkin memilih untuk menggunakan salah satu driver miniport yang disediakan sistem, UART atau DMusUARTCapture. Semua komponen lain dalam gambar disediakan sistem.
Sumber data MIDI biasanya adalah perangkat MPU-401. Dengan memanggil PcNewMiniport, driver adaptor dapat membuat salah satu driver miniport yang disediakan sistem, UART atau DMusUARTCapture, untuk mengambil data MIDI dari perangkat MPU-401. Sekali lagi, UART sudah usang, dan driver baru seharusnya menggunakan DMusUARTCapture (di Windows 98 SE dan yang lebih baru, dan di Windows 2000 dan yang lebih baru).
Setiap kali peristiwa note-on atau note-off MIDI terjadi, driver miniport pengambilan MIDI atau DMusic (di bagian bawah gambar sebelumnya) menambahkan stempel waktu ke pesan MIDI sebelum menambahkannya ke aliran MIDI yang mengalir ke driver port MIDI atau DMus.
Driver port pengambilan MIDI atau DMusic menghasilkan aliran MIDI bertanda waktu ke Wdmaud.sys, setengah mode kernel dari driver sistem WDMAud. Setengah mode pengguna, Wdmaud.drv, menghasilkan aliran MIDI bertanda waktu ke program aplikasi melalui fungsi midiInXxx , yang diimplementasikan dalam Winmm.dll.
Aplikasi MIDI di bagian atas gambar menulis peristiwa MIDI bertanda waktu ke file MIDI. Pada saat aplikasi memanggil midiInOpen untuk membuka aliran input MIDI, aplikasi meneruskan penunjuk fungsi ke rutinitas panggilan baliknya. Ketika peristiwa note-on atau note-off terjadi, sistem operasi memanggil rutinitas panggilan balik dengan blok data yang menyertakan satu atau beberapa pesan MIDI bertanda waktu. Stempel waktu pada pesan-pesan ini pada dasarnya sama dengan yang awalnya dihasilkan oleh driver miniport MIDI atau DMus.
Komponen DirectMusic
Gambar berikut menunjukkan komponen mode pengguna dan kernel yang digunakan oleh program aplikasi DirectMusic untuk memutar kembali atau mengambil data MIDI.
Komponen pemutaran ditampilkan di bagian kiri gambar sebelumnya, dan komponen pengambilan muncul di sebelah kanan. Driver miniport DMus ditampilkan sebagai kotak gelap untuk menunjukkan bahwa mereka dapat menjadi komponen yang disediakan vendor. Jika sesuai, vendor dapat menggunakan salah satu driver miniport yang disediakan sistem, DMusUART atau DMusUARTCapture. Komponen lain dalam gambar disediakan sistem.
Di sudut kiri atas gambar, aplikasi DirectMusic mengarahkan aliran MIDI bertanda waktu dari file ke komponen sistem DirectMusic mode pengguna (DMusic.dll), yang pada gilirannya mengarahkan aliran ke driver port DMus. Driver ini dapat terikat ke driver miniport untuk perangkat DirectMusic synth atau MPU-401, jika tersedia. Atau, driver port dapat terikat ke driver sistem DMusic (Dmusic.sys), yang merupakan driver miniport DMus yang disediakan sistem yang mengimplementasikan synth berkemampuan DLS yang dapat berubah gelombang dalam perangkat lunak, dan yang hanya memerlukan perangkat yang dapat merender aliran audio gelombang.
Seperti SWMidi, driver DMusic, Dmusic.sys, menggabungkan semua suaranya bersama-sama untuk menghasilkan satu aliran gelombang berformat PCM, yang dihasilkannya ke KMixer. KMixer, pada gilirannya, dapat meneruskan aliran gelombang ke perangkat gelombang, yang port dan driver miniportnya muncul di sudut kiri bawah gambar, atau ke perangkat audio USB yang dikendalikan oleh driver sistem USBAudio, yang tidak muncul dalam gambar.
Komponen penangkapan DirectMusic muncul di bagian kanan dari gambar sebelumnya. Driver miniport tangkapan DMusic di sudut kanan bawah gambar mengontrol perangkat keras tangkapan dan stempel waktu setiap pesan MIDI yang direkamnya. Driver port DMus mengarahkan aliran MIDI bertanda waktu ke komponen DirectMusic mode pengguna, DMusic.dll. Aplikasi mengakses aliran ini melalui API DirectMusic dan menulis data MIDI bertanda waktu ke file.
Driver adaptor dapat menggunakan driver miniport DMusUARTCapture yang disediakan sistem untuk mengontrol perangkat pengambilan MPU-401. Driver adaptor membuat driver miniport ini dengan memanggil PcNewMiniport dengan nilai GUID CLSID_DMusUARTCapture. Objek driver miniport yang dihasilkan mendukung antarmuka IMiniportDMus . Kode sumber untuk driver miniport DMusUARTCapture tersedia dalam driver audio sampel di Windows Driver Kit (WDK).
Aplikasi DirectMusic juga dapat berjalan melalui perangkat midiOutXxx seperti SWMidi (Swmidi.sys) jika dipilih. Untuk kesederhanaan, jalur ini dihilangkan dari gambar sebelumnya. Driver DMusic (Dmusic.sys) memerlukan unduhan DLS awal untuk beroperasi dengan benar; menggunakan SWMidi menghindari persyaratan ini.