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.
Seperti yang dijelaskan dalam Synthesizer dan Wave Sinks, driver port DMus mengimplementasikan sink gelombang untuk synthesizer perangkat lunak yang beroperasi dalam mode kernel. Driver miniport untuk synthesizer mengekspos antarmuka ISynthSinkDMus ke driver port. Sink gelombang driver port menggunakan antarmuka ini untuk membaca data gelombang yang diproduksi oleh synthesizer.
Untuk menggunakan pengumpul gelombang dari driver port DMus, driver miniport DMus harus menentukan filter DirectMusic dengan dua jenis pin:
Pin input DirectMusic atau pin input MIDI. Pin ini adalah sink untuk aliran render yang berisi pesan MIDI.
Pin output gelombang. Pin ini adalah sumber untuk aliran render yang berisi sampel PCM.
Gambar berikut menunjukkan filter DirectMusic yang berisi simpul synthesizer (KSNODETYPE_SYNTHESIZER). Filter ini memenuhi persyaratan sebelumnya untuk synthesizer perangkat lunak mode kernel dengan menyediakan pin masukan DirectMusic dan pin keluaran gelombang. (Selain itu, driver miniport DMus yang mendukung sintesis MIDI warisan dapat memberikan pin input MIDI.)
Di sisi kiri gambar, aliran MIDI memasukkan filter melalui pin input DirectMusic. Pin ini memiliki antarmuka IMXF yang diekspos ke driver port. Driver port memperoleh antarmuka ini dengan memanggil metode IMiniportDMus::NewStream . Driver port mengalirkan pesan MIDI ke pin melalui pemanggilan metode IMXF::PutMessage.
Di sisi kanan gambar, aliran gelombang keluar dari filter melalui pin gelombang keluaran dan mengalir ke penyerap gelombang driver port. Driver port berkomunikasi dengan pin melalui antarmuka ISynthSinkDMus miliknya. Driver port memperoleh antarmuka ini dengan terlebih dahulu memanggil IMiniportDMus::NewStream untuk mendapatkan objek stream dengan antarmuka IMXF , lalu mengkueri objek untuk antarmuka ISynthSinkDMus-nya . Sink gelombang menarik data gelombang dari pin dengan memanggil metode ISynthSinkDMus::Render .
Meskipun synthesizer perangkat keras pada prinsipnya dapat mengandalkan sink gelombang driver port untuk penyajian, panggilan ke ISynthSinkDMus::Render menambahkan latensi yang cukup ke aliran MIDI untuk membuatnya tidak menarik bagi banyak aplikasi interaktif. Untuk mengurangi latensi aliran, synthesizer perangkat keras kemungkinan memiliki koneksi internal untuk mencampur dan merender gelombang perangkat keras alih-alih menggunakan sink gelombang driver port. Jenis synthesizer ini menggantikan pin output gelombang di sisi kanan gambar sebelumnya dengan sambungan tetap (direpresentasikan sebagai pin jembatan) ke mixer perangkat keras.
Antarmuka ISynthSinkDMus menyediakan metode untuk merender data gelombang melalui sink gelombang, mengonversi dari waktu referensi ke waktu sampel dan kembali, dan menyinkronkan ke jam master:
ISynthSinkDMus::RefTimeToSample
ISynthSinkDMus::SampleToRefTime
ISynthSinkDMus mewarisi dari antarmuka IMXF . Untuk informasi selengkapnya, lihat ISynthSinkDMus.
Driver miniport DMus pada gambar sebelumnya mengidentifikasi pin input DirectMusic dan pin output gelombangnya sebagai berikut:
Untuk mengidentifikasi pin input DirectMusic-nya, driver miniport menentukan rentang data pin untuk memiliki format utama jenis KSDATAFORMAT_TYPE_MUSIC dan subformat jenis KSDATAFORMAT_SUBTYPE_DIRECTMUSIC. Kombinasi ini menunjukkan bahwa pin menerima aliran MIDI bertanda waktu. Deskriptor rentang data adalah struktur jenis KSDATARANGE_MUSIC. (Misalnya, lihat DirectMusic Stream Data Range.) Driver miniport mendefinisikan arah aliran data pin sebagai KSPIN_DATAFLOW_IN. (KsPinDescriptor struktur PCPIN_DESCRIPTOR. Anggota DataFlow menunjukkan arah aliran data.) Saat memanggil IMiniportDMus::NewStream untuk membuat objek stream untuk pin ini, driver port mengatur parameter StreamType ke DMUS_STREAM_MIDI_RENDER.
Untuk mengidentifikasi pin output gelombangnya, driver miniport menentukan rentang data pin untuk memiliki format utama jenis KSDATAFORMAT_TYPE_AUDIO dan subformat jenis KSDATAFORMAT_SUBTYPE_PCM. Kombinasi ini menunjukkan bahwa pin memancarkan aliran audio gelombang yang berisi sampel PCM. Deskriptor rentang data adalah struktur jenis KSDATARANGE_AUDIO. (Lihat contoh di PCM Stream Data Range.) Driver miniport menetapkan bahwa arah aliran data pin adalah KSPIN_DATAFLOW_OUT. Saat memanggil IMiniportDMus::NewStream untuk membuat objek stream untuk pin ini, driver port mengatur parameter StreamType ke DMUS_STREAM_WAVE_SINK.
Selain itu, jika driver mendukung pin input MIDI untuk synthesizer, definisinya akan mirip dengan pin input DirectMusic, tetapi definisi pin akan menentukan subformat jenis KSDATAFORMAT_SUBTYPE_MIDI, dan pin akan menerima aliran MIDI mentah daripada aliran MIDI bertanda waktu.