我想在我的 Delphi 程序中使用 VST 插件,它充当 VST 主机。我已经尝试了 tobybear 示例,使用了 delphiasiovst stuf,其中一些甚至可以工作,但是......我不知道如何将 MIDI 消息发送到插件(我知道大多数插件不会处理 MIDI,但我有一个示例插件)。
更具体地说:我希望当我发送 MIDI 消息时,我必须在 VST 插件中使用一种或其他方法,或者重新路由 MIDI 输出。我只是不知道怎么做。
谁能指出我如何做到这一点的文档或代码?提前致谢。
阿诺德
我使用了两个测试插件:一个从 DelphiAsioVst 包和 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 //
所以我没有得到插件中的事件。知道我做错了什么吗?