MIDI音源の制御ツールはBuilerに無いので、Windows APIを利用します。Windows APIのヘルプは
C++Builder5のCDのInfo\Extras\JPHELPフォルダにあります。
WindowsAPI(AppricationProgramingInterface)はWindowsのアプリケーション開発用に用意 された関数でありWindowsのもっとも基本的な関数です。この関数によりWindowsの機能の ほとんどを自由に操ることが出来るようになると言っても過言ではありません。(引用)MIDIの利用に際して、http://www.ne.jp/asahi/nagoya/ahomaro/の「C++builder」の中の 「MIDIの入出力(C Magazine9月号掲載)」 のソースをほぼそのまま利用しました。
MIDIを利用するための手順
作成手順
void TForm1::MidiOpen() { MidiDev=midiOutGetNumDevs(); //MidiOutデバイスの数 if(MidiDev==0) return; int id=1; UINT rc = midiOutOpen(&MidiOut,id,(DWORD)Form1->Handle,0,CALLBACK_WINDOW); if(rc!=MMSYSERR_NOERROR){ char msg[255]; midiOutGetErrorText(rc,msg,sizeof(msg)); throw Exception(AnsiString(msg)); } tone = 0; ShortMsg(0xc0,tone,0); }を追加します。midiOutOpenの説明はWinAPIのヘルプ [関数と概要|マルチメディア|低レベルオーディオ]にあります。
void __fastcall TForm1::ShortMsg(DWORD msg,DWORD val1,DWORD val2) { if(MidiDev==0) return; midiOutShortMsg(MidiOut,msg | (val1<<8) | (val2<<16)); }を追加します。 midiOutShortMsg の説明
下の表はShortMsg関数に送るデータ形式の一覧です。
送信するデータ | 内容 | ||
---|---|---|---|
msg | val1 | val2 | ShortMsg関数の引数 |
8nH | Key | Vel | nチャンネルの音階Keyを鍵盤から指を離す(音を消す) |
9nH | Key | 0 | nチャンネルの音階KeyをVelという強さで鍵盤を押す(音を出す) |
AnH | Key | vel | nチャンネルの音階KeyをVelという強さで更に押す(アフタータッチ) |
BnH | cc | val | nチャンネルのccのコントロールチェンジにvalという値を送る |
CnH | tone | nチャンネルの音色をtoneにする | |
DnH | Val | nチャンネル全体にVelという更に強さで押す(チャンネルアフタータッチ) | |
EnH | ll | mm | nチャンネルのピッチを変更する(ピッチベンド) |
F0...F7 | システムエクスクルーシブを送信する。 |
midiOutReset(MidiOut); midiOutClose(MidiOut); MidiOut=0;を使います。