Bagikan melalui


Synthesizer dan Wave Sinks

Mesin rendering memiliki dua bagian:

  • Synthesizer, yang mengambil pesan MIDI dan mengonversinya menjadi sampel audio gelombang.

  • Wastafel gelombang, yang menyediakan tujuan untuk sampel gelombang dan membantu menyinkronkan output.

Secara default, aplikasi DirectMusic menggunakan Microsoft Software Synthesizer (dmsynth.dll) sebagai synthesizer dan DirectSound sebagai perangkat output gelombang.

Di DirectX 6.1 dan DirectX 7, aplikasi DirectMusic dapat mengambil alih default ini. Misalnya, aplikasi mungkin menggunakan Microsoft Software Synthesizer tetapi mengarahkan output ke file .wav, atau mungkin mengimplementasikan synthesizer kustom yang berfungsi dengan sink gelombang default. Skenario terakhir lebih mungkin karena sink gelombang default harus bekerja dengan baik untuk sebagian besar synthesizer.

Di DirectX 8 dan yang lebih baru, DirectMusic selalu menggunakan sink gelombang bawaannya untuk menghasilkan data dari synth mode pengguna, tetapi aplikasi dapat mengambil alih synth perangkat lunak default. Ini berarti bahwa aplikasi DirectMusic dapat mengimplementasikan synthesizer mode pengguna kustom, tetapi synthesizer harus menggunakan sink gelombang bawaan DirectMusic.

Gambar di bawah ini menunjukkan bagaimana arsitektur DirectMusic menggabungkan sintesis mode pengguna dan sink gelombang. Perhatikan bahwa blok berlabel "DirectMusic Port" pada gambar berikut tidak boleh dikacaukan dengan driver port DMus mode kernel dalam modul driver sistem PortCls, portcls.sys. Port DirectMusic adalah objek mode pengguna dengan antarmuka IDirectMusicPort (bagian dari DIRECTMusic API) dan diimplementasikan dalam dmusic.dll. Untuk informasi selengkapnya tentang port DirectMusic, lihat dokumentasi Microsoft Windows SDK.

Diagram yang mengilustrasikan arsitektur DirectMusic untuk sintesis mode pengguna dan sink gelombang.

Pada gambar sebelumnya, aplikasi mengirim data ke port DirectMusic mode pengguna, yang meneruskan data (MIDI atau DLS) ke synth perangkat lunak (dmsynth.dll secara default) sehingga dapat merender catatan menjadi data gelombang. Sink gelombang mengelola waktu dan tangan synth buffer untuk mengisi ketika siap untuk menerima ledakan data. Synth mengisi buffer (objek IDirectSoundBuffer secara default) dengan data sehingga dapat diteruskan ke DirectSound. DirectSound memutar data melalui driver sistem KMixer atau memutarnya melalui pin penyajian yang dipercepat perangkat keras DirectSound pada perangkat audio, jika tersedia (lihat Gambaran Umum Akselerasi Perangkat Keras DirectSound).

Arsitektur dasar yang sama ini juga berlaku untuk implementasi mode kernel, dengan pengecualian bahwa gelombang sink menyerahkan buffer data langsung ke perangkat keras atau ke driver sistem KMixer. Driver port DMus mengimplementasikan sink gelombang untuk synthesizer perangkat lunak mode kernel. Untuk informasi selengkapnya, lihat Wave Sink untuk Kernel-Mode Software Synthesizer.

Ketika langkah-langkah ini selesai, port DirectMusic mode pengguna harus terbuka dan diaktifkan untuk digunakan. Segera setelah sebagian besar kode driver ini berfungsi, Anda dapat mulai menerapkan fitur. Gunakan kode sumber untuk mode pengguna Microsoft Software Synthesizer sebagai templat dan mulai menambahkan fungsionalitas baru.

Synthesizer perangkat lunak mode pengguna dapat diimplementasikan sebagai objek dengan antarmuka IDirectMusicSynth. Sink gelombang mode pengguna dapat diimplementasikan sebagai objek dengan antarmuka IDirectMusicSynthSink. Untuk informasi selengkapnya, lihat IDirectMusicSynth dan IDirectMusicSynthSink.