Delphi 2006 中的 MIDIYOKE

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来连接两者。


你能否在你的问题中添加你所使用组件的链接? - TLama
@Tlame的链接是: http://go.to/davesmidi 和 http://www.wilsonc.demon.co.uk/d10midicomponents.htm - user1071339
2个回答

2
我认为你应该在portid属性中放置一个yoke端口的端口号。要知道要使用哪个ID,您需要枚举可用端口,因为如果添加硬件或更改midi yoke配置,则ID可能会更改。
因此,为了记住用户选择的端口,您需要存储设备名称,并希望用户不要重命名其设备:)
如果这对您有足够的帮助以便能够继续您的工作,请告诉我;否则,我将找出一些旧代码来完成您正在尝试做的事情。

我看到你已经接受了一个答案,所以我认为你的问题已经解决了。如果你仍然对代码示例感兴趣,只需将其制作成一个新问题即可。 - Wouter van Nifterick

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。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接