VSTホストとして機能するDelphiプログラムでVSTプラグインを使用したい。tobybearの例を試し、delphiasiovst stufを使用して、その一部を機能させましたが、プラグインにMIDIメッセージを送信する方法がわかりません(ほとんどのプラグインがMIDIを処理しないことはわかっていますが、プラグインの例があります)。
具体的には、MIDIメッセージを送信するときは、VSTプラグインでいずれかの方法を使用するか、MIDI出力を再ルーティングする必要があると思います。方法がわかりません。
誰かがこれを行う方法に関するドキュメントやコードを教えてもらえますか?前もって感謝します。
アーノルド
私は2つのテストプラグインを使用しています。1つはDelphiAsioVstパッケージからコンパイルされたもので、もう1つはPolyIblitです。どちらもFinaleとLMMSで動作します。私のテストプログラムにロードすると、両方ともVSTエディターが表示されます。
TvstEventレコードを挿入して初期化し、MIDIDataおよびAddMIDIDataプロシージャとタイマーを挿入して、テストデータを提供し、プラグインのProcessEventsルーチンを実行しました。ProcessEventsは正しいテストデータを取得しますが、音が聞こえません。MIDI出力ポートに直接送信すると何かが聞こえます。
以下のコードでは、PropcessEventsで十分です。追加のコードは、MIDI情報が正しく送信されているかどうかのテストです。VstHost [0]は最初のプラグインであり、テストに応じてPolyIblitまたはVSTPluginのいずれかになります。
procedure TMain_VST_Demo.TimerTimer (Sender: TObject);
var i: Int32;
begin
// MIDIOutput.PutShort ($90, 60, 127);
MIDIData (0, $90, 60, 127);
if FMDataCnt > 0 then
begin
FMyEvents.numEvents := FMDataCnt;
VSTHost[0].ProcessEvents(@FMyEvents);
// if (FCurrentMIDIOut > 0) and MIMidiThru.Checked then
// begin
for i := 0 to FMDataCnt - 1 do
MIDIOutput.PutShort (PVstMidiEvent (FMyEvents.events[i])^.midiData[0],
PVstMidiEvent (FMyEvents.events[i])^.midiData[1],
PVstMidiEvent (FMyEvents.events[i])^.midiData[2]);
// FMidiOutput.Send(//FCurrentMIDIOut - 1,
// PVstMidiEvent(FMyEvents.events[i])^.midiData[0],
// PVstMidiEvent(FMyEvents.events[i])^.midiData[1],
// PVstMidiEvent(FMyEvents.events[i])^.midiData[2]);
// end;
FMDataCnt := 0;
end;
end; // TimerTimer //
そのため、プラグインでイベントを取得しません。何が間違っているのでしょうか?