4

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

在此处输入图像描述

我安装了所有的软件包并在 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 进行两者之间的连接。

4

2 回答 2

2

我认为您应该将其中一个轭端口的端口号放在 portid 属性中。

要知道要使用哪个 id,您必须枚举可用端口,因为如果添加硬件或更改 midi yoke 配置,id 可能会发生变化。

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

如果这对您继续工作有足够的帮助,请告诉我;否则我会挖掘一些旧代码来做你想做的事情。

于 2012-05-11T15:21:06.953 回答
2

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

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

我在很久以前就用过它,所以我的知识有点生疏。我可以从我的代码中收集到它的工作原理如下:将从属设置为从属/同步接收/无论它被称为模式。接下来将 $FA 发送到您选择的频道。一些(不是全部)从站要求您收听特定的频道。

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

于 2012-05-12T13:20:08.057 回答