エクスクルーシブ・メッセージの送信
MCIなどを使えば簡単にMIDIプレイヤーを作ることができます。しかし、演奏前にプレイヤー側から音源を初期化するにはどうすればいいのでしょう。もっとも簡単な方法は初期化用のファイルを用意しておいて、それを演奏すればいいのです。しかしこの方法では別途ファイルを用意する必要があります。そこで、Win32API関数を用いて音源に初期化のエクスクルーシブメッセージを送信したいとおもいます。
ここでは例としてGMシステム・オンを送信することにします。
Private Const MAXPNAMELEN = 32 Private Const MIDIMAPPER = -1 Type MIDIHDR lpData As Long dwBufferLength As Long dwBytesRecorded As Long dwUser As Long dwFlags As Long lpNext As Long Reserved As Long dwOffset As Long Rev(3) As Long End Type 'MIDI出力ポートをオープンするAPI Private Declare Function midiOutOpen Lib "winmm.dll" (lphMidiOut As Long, ByVal uDeviceID As Long, ByVal dwCallback As Long, ByVal dwInstance As Long, ByVal dwFlags As Long) As Long 'MIDI出力ポートをクローズするAPI Private Declare Function midiOutClose Lib "winmm.dll" (ByVal hMidiOut As Long) As Long Private Declare Function midiOutLongMsg Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long 'MIDI出力をリセットするAPI Private Declare Function midiOutReset Lib "winmm.dll" (ByVal hMidiOut As Long) As Long Private Declare Function midiOutPrepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long Private Declare Function midiOutUnprepareHeader Lib "winmm.dll" (ByVal hMidiOut As Long, lpMidiOutHdr As MIDIHDR, ByVal uSize As Long) As Long
|
他のエクスクルーシブ・メッセージを送信したい場合はバイト配列Execlusiveを変更すればいいです。