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.
Antarmuka ke dan dari alokator adalah IMXF dan IAllocatorMXF. Antarmuka ini memungkinkan Anda menggunakan kembali struktur DMUS_KERNEL_EVENT tanpa mengalokasikan dan membatalkan alokasi memori. IMXF::PutMessage memberikan struktur kepada alokator dan IAllocatorMXF::GetMessage mengambil struktur DMUS_KERNEL_EVENT yang baru direset ke nol dari alokator untuk digunakan kembali. ** (Alokator dibuat dengan struktur DMUS_KERNEL_EVENT kosong di dalam kumpulan sehingga tidak pernah mulai kosong.) Seperti yang ditunjukkan pada gambar diagram berikut, IRP (dalam bentuk struktur DMUS_EVENTHEADER) masuk dari dmusic.dll ke pembongkar.
Unpacker memanggil IAllocatorMXF::GetMessage untuk mengambil struktur DMUS_KERNEL_EVENT kosong. Unpacker mengambil struktur DMUS_KERNEL_EVENT dari IRP, mengisi struktur ini (satu per peristiwa MIDI), dan meneruskannya ke sequencer (menggunakan antarmuka MXF-nya). Pengurut ulang menyusun ulang mereka berdasarkan stempel waktu mereka dan, ketika jatuh tempo, meneruskannya ke driver miniport dengan memanggil IMXF::PutMessage. Driver miniport menarik data MIDI dari struktur DMUS_KERNEL_EVENT sehingga dapat merendernya ke dalam data gelombang. Ini meneruskan struktur DMUS_KERNEL_EVENT yang sudah digunakan kembali ke alokator dengan panggilan IMXF::PutMessage lainnya.
Situasi yang berlawanan terjadi pada proses capture. Data MIDI masuk dari perangkat keras ke driver miniport dan driver miniport memanggil IAllocatorMXF::GetMessage untuk mendapatkan struktur DMUS_KERNEL_EVENT kosong. struktur DMUS_KERNEL_EVENT diisi dengan stempel waktu dan data dan diteruskan ke penyerap melalui IMXF::PutMessage. Driver miniport dapat meneruskan lebih dari satu pesan per struktur jika menetapkan flag DMUS_KEF_EVENT_INCOMPLETE dalam struktur DMUS_KERNEL_EVENT. Sink pengambilan di driver port DMus mengurai aliran data mentah ini dan memancarkan struktur DMUS_KERNEL_EVENT yang berisi pesan MIDI bertanda waktu (satu per struktur).
Dimungkinkan juga bagi driver miniport itu sendiri untuk memancarkan pesan bertanda waktu ke sink pengambilan. Dalam kasus ini, pengemudi tidak menetapkan bit DMUS_KEF_EVENT_INCOMPLETE dalam DMUS_KERNEL_EVENT. Sink penangkap menyampaikan struktur bertanda waktu langsung ke pengemas, yang mengemas pesan ke dalam IRP dan mengirimkannya ke dmusic.dll. Penangkapan melalui DirectMusic hanya digunakan untuk merekam MIDI. Untuk perekaman gelombang, gunakan DirectSound capture.
Ketika pengemas menarik data dari struktur DMUS_KERNEL_EVENT, itu membuang struktur DMUS_KERNEL_EVENT yang digunakan ke alokator dengan IMXF::PutMessage. Ketika buffer IRP penuh, buffer tersebut diteruskan ke dmusic.dll. Pengemas menerima IRP kosong dari dmusic.dll, mengisinya, dan menyelesaikannya. Lebih banyak IRP terus berdatangan sehingga selalu ada yang dapat diisi.