10

I have both Fruityloops and Propellerheads Reason software synths on my Windows PC.

Any way I can get at and script these from either Visual Basic or Python? Or at least send Midi messages to the synths from code?

Update : attempts to use something like a "midi-mapper" (thanks for link MusiGenesis) don't seem to work. I don't think Reason or FL Studio act like standard GM Midi synths.

Update 2 : If you're interested in this question, check out this too.

Matthieu Brucher
  • 21,634
  • 7
  • 38
  • 62
interstar
  • 26,048
  • 36
  • 112
  • 180

7 Answers7

3

Both applications support MIDI. It's just that they don't see each other.

In order to send messages via MIDI between applications, you need to install a virtual midi port.

There are several freely available, but this one works: http://www.midiox.com/zip/MidiYokeSetup.msi

You'll get a virtual MIDI output port that you can write to as if it's a normal MIDI device. In Fruity Loops or Rebirth you choose that port as the input. That's all you need to do to connect the programs.

It'll work like this:

Your Application --> Virtual MIDI Port --> FruityLoops

David Koelle
  • 20,726
  • 23
  • 93
  • 130
Wouter van Nifterick
  • 23,603
  • 7
  • 78
  • 122
2

I think both FL Studio and Reason can be configured as the default MIDI playback device. To send MIDI messages to either from VB.NET, you'll need to PInvoke the midiOutOpen, midiOutShortMsg and midiOutClose API calls. Here's a link to code samples:

http://www.answers.com/topic/midioutopen

They're for VB6, but they should be easy to translate to VB.NET.

I know FL Studio can be "driven" from a plugin authored for FL (or a VSTx plugin), but I think these are always written in C or C++.

Edit: I just learned that Windows Vista dropped the MIDI Mapper (which would have made setting up FL or Reason as the default MIDI device simple). Amazing. Here is a link I found with an alternative solution:

http://akkordwechsel.de/15-windows-vista-und-der-midi-mapper/

I just tried it out (it's just a *.CPL file that you double-click to run) and it appears to work (although the GM Synth is the only option available on my laptop, so I'm not sure if it will pick up FL or Reason as choices).

MusiGenesis
  • 74,184
  • 40
  • 190
  • 334
  • any idea how to configure this. I'm using FL Studio 7 and can't seem to find any option to make it receive Midi from either my VB or Python programs which seem to go straight to the Windows GM synth. – interstar Nov 06 '08 at 10:43
  • I assume you're using Vista, which I just learned doesn't have the MIDI mapper anymore. Amazing - another hidden reason why Vista sucks so horribly. See my edit for a link to deal with the problem. – MusiGenesis Nov 06 '08 at 13:29
  • thanks for that Vista Midi mappper ... saddly it doesn't seem to work in this case. Not sure that either Fruity or Reason register themselves as Windows midi synths. – interstar Nov 07 '08 at 17:08
2

Note: This answer doesn't exactly answer the question you asked but it might achieve the result you want :)

You can author a VST plugin in Java using jVSTWrapper (http://jvstwrapper.sourceforge.net/). If you really wanted to use Python you could use Jython to interface to java and do it that way. Alternatively you could just write the plugin in Java or another scripting language for the JVM like Groovy.

Peter Kelley
  • 2,350
  • 8
  • 26
  • 46
1

What you need is a VST MIDI scripter / scripting plugin to create a logic of MIDI events that can be sent to any MIDI channel. You would need to set a MIDI channel in FL for the VST instrument/effect you need to tweak its values. Google for it there are some plugins around and please share them back here if you find anything useful :)

stagas
  • 4,607
  • 3
  • 28
  • 28
  • SuperMidiScripter: http://azertopia.free.fr/Supermidiscripter.html and there is also VstLua which looks nice but I can't find a download link since the original author's site is down. Share if you find it please or if anyone has it please upload it somewhere for us. – stagas May 15 '10 at 12:13
0

When it comes to Reason, you can do with it to much because of it's closed architecture - you can use VST plugins (or any other type like DirectX ones) - your only option is to use MIDI.

Regarding Fruity Loops, you could write a VST plugin that can take an input from a scripting language (VB, Python or whatever) but in order to write such thing you would have to use Delphi or C++.

Alternatively, you can check out MAX made by Cycling74 - it's something like a IDE for music ;-) - and I'm pretty sure you can use Python with it.

David Koelle
  • 20,726
  • 23
  • 93
  • 130
Luka Beatz
  • 26
  • 1
0

You could write a Rewire host. Though, you will have to get a license (the license is free, but your application must be proprietary, so no open source).

Alternatively, you could interface through MIDI messages.

Finally, you could implement a dummy audio device which would route the audio to/from wherever you want or process it in some way. I imagine all of these would be reasonably difficult. MIDI is probably the easiest of the three (I have no idea how easy or hard the Rewire protocol is to use).

  • You could write a VST plugin too, but Reason does not support them, AFAIK. –  Nov 06 '08 at 13:31
0

There's an opensource music workstation, called Frinika, and you can script that in Javascript. (Insert / delete notes , change midi effects like pitch wheel etc.) It can import / export regular midi files, so it will work with Fruity loops or whatever else you have.

// 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 

Another example for reading/changing notes:

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/ It has a Java Webstart launcher as well, so you don't even have to install.

It used to bundle the Javadoc documentation as well, but for some reason their latest downloads don't include that. It's a pity, because that's where the Javascript bindings are documented. So, now you have to browse the source or build the Javadoc yourself. (It has some built-in examples that are accessible from the scripting window, you should check them out first. My first example is from there.)

Here is the sourcefile where you'll find the Javascript docs:

frinika Javascript doc/source

But there are other options as well. You can check out mingus too, which is a Python library for music theory and midi file handling. It requires Fluidsynth, and the demo apps require GamePython too, so it's a bit more complicated to setup than Frinika.

P.S.: Frinika has a particular bug: when dragging around neighbouring notes, some might not sound the right length. You can help that by transposing forth and back the consecutive notes (fairly fast in piano roll view), or dragging the part that contains the notes forth and back. Restarting Frinika will also help, but that's the slower way. So this bug won't affect saved files, neither midi export.

zslevi
  • 409
  • 2
  • 10