Delphi 2006中的MIDIYOKE

时间:2012-05-11 12:07:56

标签: delphi midi delphi-2006

我正在使用delphi中的应用程序。我需要使用 MIDIYOKE 将我的应用程序的输出发送到另一个应用程序。第二个应用程序是虚拟钢琴键盘。

enter image description here

我安装了所有软件包并在delphi中获得了MIDI组件。

我尝试使用MidiOutputPort1和MidiInput1组件。 我试过播放一个MIDI。代码如下:

procedure TForm3.Button1Click(Sender: TObject);
var
outputPort : TMidiOutputPort;
begin
 outputPort := TMidiOutputPort.Create (Nil);
   try
    outputPort.PortId := -1;
    outputPort.Active := True;
    outputPort.PatchChange(0, 127, 0); // Gunshot
    outputPort.NoteOn (1, 20, 127);    // Play note at full volume


    Sleep (1000);
    outputPort.NoteOff (0, 60, 0);
finally
outputPort.Free
end
end;

我想在我的应用程序和虚拟钢琴键盘之间建立联系。如何使用MidiOutputPort1和MidiInput1进行两者之间的连接。

2 个答案:

答案 0 :(得分:2)

我认为你应该把你的一个轭端口的端口号放在portid属性中。

要知道要使用哪个ID,您必须枚举可用端口,因为如果添加硬件,或者更改midi轭配置,ID可能会更改。

因此,要记住用户选择了哪些端口,您需要存储设备名称,并希望用户不要重命名其设备:)

让我知道这是否足以帮助您继续工作;否则我会挖出一些旧的代码来做你正在尝试做的事情。

答案 1 :(得分:2)

如果两个应用程序都支持MIDI同步,您可以使用MIDI同步。在这种情况下,MIDIYOKE是主设备,Vpk是从设备。同步由以下命令处理:

mc_MIDI_Timing_Clock           = $F8;
mc_MIDI_Start                  = $FA;
mc_MIDI_Continue               = $FB;
mc_MIDI_Stop                   = $FC;

我在很久以前就用它,所以我的知识有点生疏。我可以从我的代码中收集到的是它的工作方式如下:将slave设置为slave / sync receive /无论它被称为模式。接下来将$ FA发送到您选择的频道。一些(并非所有)奴隶要求您收听特定频道。

在每个时钟刻度处首先发送$ F8。接下来发送消息,前面是$ FB消息(两个数据字节都为零)。当你准备好发送$ FC。