如何将Midi事件发送到C ++中的Software Synth

时间:2011-08-31 01:39:07

标签: midi

您好寻找一些建议。我正在写一些音乐创作软件。我拼凑了工具来读写和发送midi数据,它们工作正常。但是我难以理解:我正试图将midi事件发送到计算机上的SW合成器。

所以我可以从外部键盘控制sw合成器。我可以在计算机上控制我自己的键盘。但是如何让我的sw将midi发送到同一台计算机上的sw合成器。

如果可能的话,我也试图以独立于平台的方式做到这一点。

谢谢!

VMAN


我的问题不明确。

所以我目前正在运行Win7。跨平台是优先考虑但不是第一个原型。

具体来说,我的问题是访问kontakt播放器(v2)它在自己的环境和midi IO中工作。但我无法从我自己的软件中访问它。

midiOutGetNumDevs只返回一个设备,它是Microsoft GS Wavetable Synth。

我很困惑,我可以通过midi / usb线将midi发送到kontakt播放器,但它不会显示为midi设备。

我错过了什么?

THX

3 个答案:

答案 0 :(得分:2)

您使用的是哪个API / OS?哪个SoftSynth?

简短回答:您可以尝试“PortMidi”。

http://portmedia.sourceforge.net/

长(呃)回答:

我还没有发现任何跨平台的MIDI lib能够与任何类型的MIDI接收器对话。实际上,它取决于softsynth用于接收MIDI事件的内容。

1)在Linux上,您可以使用ALSA与ALSA合成器通信。 softsynth可以将自己注册为ALSA接收器。你可以: *使用ALSA lib连接将MIDI事件发送到此接收器; *或者您可以将您的应用程序注册为ALSA MIDI源,并使用另一个程序(aconnectgui,qjackctl,patchage)将其连接到任何接收器。

http://www.alsa-project.org/alsa-doc/alsa-lib/rawmidi.html

http://www.alsa-project.org/alsa-doc/alsa-lib/seq.html

下行:特定于Linux

2)你可以使用JACK for MIDI。与在ALSA MIDI中一样,应用程序可以注册MIDI源和接收器。 Yhe softsynth可以注册为JACK MIDI接收器。然后你需要让你应用一个JACK MIDI源并将它们与另一个程序(qjackctl,patchage)连接。

http://jackaudio.org/files/docs/html/index.html

下行:需要安装,配置,启动JACK

您有两种解决方案可将ALSA接收器/源作为JACK接收器/源移动:

  • 使用JACK的内置功能(命令行-Xseq);

  • 或使用“a2jmidi”

4)在MacOS上你可以用CoreAudio做MIDI。我对此一无所知。

5)在Windows上,我猜你在

中使用了midi *函数

6)在其他一些操作系统上使用OSS

7)使用套接字/协议与合成器通信

您可以使用MIDI / RTP或MIDI / UDP使软件发送MIDI事件,这样您就不必关心驱动程序/操作系统了。大多数softsynth不直接说这些,所以你需要一个程序来做桥接(qmidinet或其他)。

8)PortMidi是MIDI的跨平台库。但是它似乎不能直接使用JACK作为后端(但是你可以在JACK中使用ALSA设备,如上所述)。

http://portmedia.sourceforge.net/

例如,在Linux上,Fluidsynth可以使用ALSA,OSS和JACK进行MIDI输入。 Timidity ++可以使用ALSA和Windows API。

答案 1 :(得分:1)

好的,这个问题的答案是使用虚拟midi驱动程序。我在这里发现了一个免费的: http://nerds.de/en/loopbe1.html

这会创建一个midi输出设备,显示midiOutGetNumDevs,我也可以流式播放midi音符,同一台计算机上的其他Midi软件可以将它用作midi输入设备。

适用于Win7,并且显然也有mac支持。我的问题解决了。

“LoopBe1是用于在计算机程序之间传输MIDI数据的内部MIDI设备。基本上,LoopBe1是一种”隐形线缆“,用于将应用程序的MIDI输出连接到任何其他应用程序的MIDI输入。”

答案 2 :(得分:0)

同意虚拟MIDI驱动程序是最简单的解决方案。

另一个过去非常受欢迎的(不知道它在Win7上的表现如何)是MIDI Yoke。 http://www.midiox.com/

如果您正在寻找商业广告,可以考虑编写自己的虚拟MIDI驱动程序,使您的软件控制器(发送者)成为虚拟MIDI源。只有在Windows上才会有很多工作。

在Mac和Linux上,您的工作要轻松得多。正如@ysdx所说,Mac使用CoreMIDI和Linux使用ALSA / Jack,通过创建虚拟MIDI端口并连接到目的地,这在您的应用程序中非常容易。