使用VB或Python脚本编写FruityLoops或Propellerheads Reason?

10

我在Windows电脑上安装了Fruityloops和Propellerheads Reason软件合成器。

有没有办法从Visual Basic或Python中访问并编写这些软件?或者至少能否从代码发送Midi消息到合成器?

更新:尝试使用像“midi-mapper”之类的工具(感谢MusiGenesis提供的链接),似乎不起作用。 我认为Reason或FL Studio不像标准的GM Midi合成器。

更新2:如果您对此问题感兴趣,请查看这个

7个回答

3

这两个应用程序都支持MIDI,只是它们彼此之间无法通信。

为了在应用程序之间通过MIDI发送消息,您需要安装一个虚拟MIDI端口

有几个免费的选项可供选择,但是这个工具可以使用:http://www.midiox.com/zip/MidiYokeSetup.msi

您将获得一个虚拟MIDI输出端口,您可以像操作普通MIDI设备一样将数据写入该端口。在Fruity Loops或Rebirth中,您选择该端口作为输入即可连接这两个程序。

连接方式如下:

您的应用程序 --> 虚拟MIDI端口 --> FruityLoops


2
我认为FL Studio和Reason都可以配置为默认的MIDI播放设备。要从VB.NET向其中任意一个发送MIDI消息,您需要使用midiOutOpen、midiOutShortMsg和midiOutClose API调用。以下是代码示例链接:http://www.answers.com/topic/midioutopen ,尽管是VB6的,但应该很容易转换成VB.NET。
我知道FL Studio可以通过为FL编写的插件(或VSTx插件)来“驱动”,但我认为这些插件总是用C或C ++编写的。
编辑:我刚刚得知Windows Vista删除了MIDI Mapper(这将使设置FL或Reason作为默认MIDI设备变得简单)。真不敢相信。这是我找到的替代方案链接:http://akkordwechsel.de/15-windows-vista-und-der-midi-mapper/ 我刚刚试过了它(只需双击运行*.CPL文件),看起来可以正常工作(尽管在我的笔记本电脑上只有GM Synth可用,因此我不确定它是否会选择FL或Reason作为选项)。

有没有办法配置这个?我正在使用FL Studio 7,但似乎找不到任何选项来使其接收来自我的VB或Python程序的MIDI信号,它们似乎直接发送到Windows GM合成器。 - interstar
我猜你正在使用Vista,但我刚刚了解到它不再有MIDI映射器。真是太神奇了 - Vista如此糟糕的另一个隐藏原因。请查看我的编辑以获取解决问题的链接。 - MusiGenesis
感谢Vista Midi映射器...遗憾的是在这种情况下似乎无法工作。不确定Fruity或Reason是否将自己注册为Windows MIDI合成器。 - interstar

2
注意:这个答案并没有完全回答你提出的问题,但可能会达到你想要的结果 :)
你可以使用 jVSTWrapper(http://jvstwrapper.sourceforge.net/)在 Java 中编写 VST 插件。如果你真的想使用 Python,你可以使用 Jython 来接口到 Java 并以这种方式完成。或者,你可以使用 Java 或其他脚本语言(如 Groovy)为 JVM 编写插件。

1
你需要的是一个 VST MIDI 脚本编写器/插件,以创建可发送到任何 MIDI 通道的 MIDI 事件逻辑。您需要在 FL 中设置一个 MIDI 通道,用于调整所需的 VST 乐器/效果的值。在谷歌上搜索,有一些插件可以使用,如果您发现任何有用的内容,请在此分享 :)

SuperMidiScripter: http://azertopia.free.fr/Supermidiscripter.html 还有一个看起来不错的VstLua,但由于原作者的网站已经关闭,我找不到下载链接。如果你找到了,请分享一下,或者如果有人有它,请上传到某个地方供我们使用。 - stagas

0

说到Reason,由于其封闭的架构,你可以做很多事情 - 你可以使用VST插件(或任何其他类型的插件,如DirectX)- 你唯一的选择是使用MIDI。

关于Fruity Loops,你可以编写一个VST插件,它可以从脚本语言(VB、Python或其他语言)中获取输入,但为了编写这样的东西,你必须使用Delphi或C++。

或者,你可以查看由Cycling74制作的MAX - 这是类似于音乐IDE的东西;-) - 我非常确定你可以在其中使用Python。


0

你可以编写一个Rewire主机。不过,你需要获得许可证(许可证是免费的,但你的应用程序必须是专有的,所以不能开源)。

或者,你可以通过MIDI消息进行接口。

最后,你可以实现一个虚拟音频设备,将音频路由到/从任何你想要的地方或以某种方式处理它。 我想这些都会相当困难。 MIDI可能是三个中最容易的(我不知道Rewire协议使用起来有多容易或困难)。


你也可以编写VST插件,但据我所知,Reason不支持它们。 - user21037

0
有一个开源的音乐工作站叫做Frinika,你可以用Javascript编写脚本来操作它(插入/删除音符,改变MIDI效果如音高滑轮等)。它可以导入/导出常规的MIDI文件,因此可以与Fruity loops或其他软件兼容。
// Insert New

song.newLane("MyMidiLane", type("Midi"));
lane = song.getLane("MyMidiLane");

part = lane.newPart( time("10.0:000"), time("4.0:000") );

part.insertNote(note("c#3"), time("11.2:000"), time("2:0"), 120 );
part.insertNote(note("f3"), time("11.3:000"), time("1:0"), 100 );
part.insertNote(note("g#3"), time("11.3:000"), time("1:0"), 100 );
part.insertNote(note("b3"), time("11.3:000"), time("0:64"), 100 );
part.removeNote(note("f3"), time("11.3:000"));

part = song.newLane("MyTextLane",
type("Text")).newPart(time("24.0:000"), time("10.0:000"));
part.text = "This is the test text to be inserted.";
part.lane.parts[0].remove(); // remove initially inserted text-part 

另一个阅读/更改笔记的例子:

lane = song.getLane("MyMidiLane");
// a lane has a fixed instrument assigned


lane.parts[0].notes[0].duration=64
lane.parts[0].notes[1].duration=32
lane.parts[0].notes[1].startTick=120
// Parts are blocks of notes that you can drag around together in the Frinika GUI.
// They're like patterns in trackers.
for (i in lane.parts[0].notes){
  println("i: "+i+", n: "+noteName(lane.parts[0].notes[i].note));
  println("i: "+i+", dur: "+lane.parts[0].notes[i].duration);
  println("i: "+i+", startT: "+lane.parts[0].notes[i].startTick);
} 

http://frinika.appspot.com/ 它还有一个Java Webstart启动器,所以你甚至不需要安装。

它曾经捆绑了Javadoc文档,但出于某种原因,它们最新的下载不再包含该文档。这很遗憾,因为那里记录了Javascript绑定。所以,现在你必须浏览源代码或自己构建Javadoc。(它还具有一些内置示例,可从脚本窗口访问,你应该先查看它们。我的第一个示例就是来自那里。)

这是你将找到Javascript文档的源文件:

frinika Javascript doc/source

但是还有其他选择。您也可以查看mingus,这是一个用于音乐理论和midi文件处理的Python库。它需要Fluidsynth,并且演示应用程序还需要GamePython,因此设置比Frinika更复杂。

P.S.: Frinika有一个特定的错误:当拖动相邻的音符时,有些可能不会发出正确的长度。您可以通过在钢琴卷轴视图中快速转换连续音符(相对较快),或者拖动包含音符的部分来帮助解决这个问题。重新启动Frinika也有帮助,但这是较慢的方法。因此,此错误不会影响保存的文件,也不会影响midi导出。


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