Das "Musical Instrument Digital Interface" ist ein Protokoll das für den Umgang mit digitalen Instrumenten und Controllern entwickelt wurde.
Per MIDI können Noten (Notes) eingeschaltet (On) und ausgeschaltet (Off) werden. Dies Aktionen entsprechen der Tastatur auf einem MIDI-Keyboard. Weiter können auch Veränderungen von anderen Werten (Controller Change) übertragen werden. Dies entspricht meistens den verschiedenen Reglern auf dem MIDI-Keyboard.
Tools
- MIDI Monitor - Debugging Applikation für OSX.
- SimpleSynth - Einfacher Synthesizer.
Processing Beispiel
Für die Übergabe der Werte von Processing zu anderen Programmen über MIDI verwenden wir die Library “TheMidiBus” (http://www.smallbutdigital.com/themidibus.php). Die Library kann über den Library-Manager bequem installiert werden.
Folgend Ein Programm das eingehende Nachrichten ausgibt und ein Synthesizer per Maus und Tastatur steuert:
import themidibus.*; // MIDI Library importieren MidiBus myBus; // Kontrollobjekt erstellen int note, velocity; void setup() { size(800, 800); background(0); MidiBus.list(); // Liste aller Geräte ausgeben myBus = new MidiBus(this, "PORT A", "SimpleSynth virtual input"); // "PORT A" als Input auswählen } void draw() {} void mousePressed() { note = int(map(mouseX, 0, width, 0, 127)); velocity = int(map(mouseY, 0, height, 0, 127)); myBus.sendNoteOn(0, note, velocity); // Note einschalten senden } void mouseDragged() { myBus.sendNoteOff(0, note, velocity); note = int(map(mouseX, 0, width, 0, 127)); velocity = int(map(mouseY, 0, height, 0, 127)); myBus.sendNoteOn(0, note, velocity); // Note ausschalten senden } void mouseReleased() { myBus.sendNoteOff(0, note, velocity); // Note ausschalten senden } void keyPressed() { myBus.sendControllerChange(0, 50, 64); // Controller change senden } void noteOn(int channel, int pitch, int velocity) { // Eingehen Nachricht ausgeben println("Note On: " + channel + " - " + pitch + " - " + velocity); } void noteOff(int channel, int pitch, int velocity) { // Eingehen Nachricht ausgeben println("Note Off: " + channel + " - " + pitch + " - " + velocity); } void controllerChange(int channel, int number, int value) { // Eingehen Nachricht ausgeben println("Controller Change: " + channel + " - " + number + " - " + value); }