Für die Übergabe der Werte von Processing zu anderen Programmen über MIDI verwenden wir die Library “TheMidiBus” (http://www.smallbutdigital.com/themidibus.php). Diese müsst ihr herunterladen und in euer Processing-Library-Verzeichniss kopieren (z.B. “Users/itz/Documents/Processing/libraries/). Dann stehen euch die Funktionen der Library zur Verfügung.
Es gibt im wesentlichen zwei Arten von Midi Signalen, welche ihr mit Hilfe der MidiBus-Library erstellen könnt. Diese orientieren sich an den Signalen, die ihr auch mit den Midi-Keyboards auslösen könnt.
1. sendMidiNote(channel, pitch, velocity)
channel = Kanal auf dem gesendet wird
pitch = Tonhöhe
velocity = Anschlag
Die Funktion sendMidiNote() könnt ihr verwenden, wenn ihr ON/OFF Events an MuLab übergeben möchtet. Sie entspricht den Tastenanschlägen auf der Midi-Tastatur.
2. sendControllerChange(channel, number, value)
channel = Kanal auf dem gesendet wird
number = Nummer des Controllers
value = Wert der gesendet werden soll
Die Funktion sendControllerChange() wird verwendet, falls eine kontinuierliche Veränderung hervorgerufen werden soll. Sie entspricht dem drehen eines Reglers aus der Midi-Tastatur.
Im folgenden ein kleines Beispiel, das demonstriert, wie sowohl eine MidiNote, wie auch ein ControllerChange gesendet werden kann.
import themidibus.*; //Import MidiBus library MidiBus myBus; //Name for the Instance of MidiBus //Values for sending a note int channel = 1; int pitch = 64; int velocity = 127; //Values for sending a controllerChange int number = 20; int value = 0; int oldValue = 0; void setup() { size(400, 400); background(0); MidiBus.list(); // List all available Midi devices myBus = new MidiBus(this, "", "P5toMIDI"); //Mac //myBus = new MidiBus(this, "", ""); //Win } void draw() { value = int(map(mouseX, 0, width, 0, 127)); if (value!=oldValue) { myBus.sendControllerChange(channel, number, value); } oldValue = value; } void keyPressed() { switch(key) { case ‘a’: myBus.sendNoteOn(channel, pitch, velocity); // Send a Midi noteOn break; } } void keyReleased() { switch(key) { case ‘a’: myBus.sendNoteOff(channel, pitch, velocity); // Send a Midi nodeOff break; } } |