您好寻找一些建议。我正在写一些音乐创作软件。我拼凑了工具来读写和发送midi数据,它们工作正常。但是我难以理解:我正试图将midi事件发送到计算机上的SW合成器。
所以我可以从外部键盘控制sw合成器。我可以在计算机上控制我自己的键盘。但是如何让我的sw将midi发送到同一台计算机上的sw合成器。
如果可能的话,我也试图以独立于平台的方式做到这一点。
谢谢!
VMAN
我的问题不明确。
所以我目前正在运行Win7。跨平台是优先考虑但不是第一个原型。
具体来说,我的问题是访问kontakt播放器(v2)它在自己的环境和midi IO中工作。但我无法从我自己的软件中访问它。
midiOutGetNumDevs只返回一个设备,它是Microsoft GS Wavetable Synth。
我很困惑,我可以通过midi / usb线将midi发送到kontakt播放器,但它不会显示为midi设备。
我错过了什么?
THX
答案 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端口并连接到目的地,这在您的应用程序中非常容易。