ついでにソースなんてものをちょっと

調子乗ってさらに書いてみる。
自分のソフトの中でも一つ肝になっているところだ。



MIDI音源を開く処理@Delphi
宣言(グローバル?)

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);