ついでにソースなんてものをちょっと
調子乗ってさらに書いてみる。
自分のソフトの中でも一つ肝になっているところだ。
var GSData :array[0..10] of Byte = ($F0,$41,$10,$42,$12,$40,$00,$7F,$00,$41,$F7); MidiHeader: TMIDIHDR; // MIDIHDR 構造体 hMidi: HMIDIOUT; // MIDI OUT デバイスへのハンドル
処理
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
if res<>0 then
begin
midiOutClose(integer(hMidi));
sleep(500);
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
end;
// しつこく開き続けてみる
if res<>0 then
begin
midiOutClose(integer(hMidi));
sleep(500);
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
end;
if res<>0 then
begin
midiOutClose(integer(hMidi));
sleep(500);
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
end;
if res<>0 then
begin
midiOutClose(integer(hMidi));
sleep(500);
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
end;
if res<>0 then
begin
midiOutClose(integer(hMidi));
sleep(500);
res:=midiOutOpen(@hMidi,n_dev,0,0,0);
end;
if res<>0 then ShowMessage('MIDIデバイスが開けません');
// end;
midiOutReset(n_dev);
MidiHeader.dwBufferLength := Sizeof(GSData);
MidiHeader.lpData := @GSData; //配列へのポインター
midiOutPrepareHeader(integer(hMidi),@MidiHeader,sizeof(TMIDIHDR));
// GSリセット
midiOutLongMsg(integer(hMidi),@MidiHeader,sizeof(TMIDIHDR));
// GSリセットが効くまで間を取ってみる
sleep(200);