Manche Midi-Controller schicken über ihren Midi-Ausgang unglaublich viel Datenmüll, der oftmals dazu führt, dass sich zwei Geräte nicht verstehen. Mein uraltes Kawai Datacat Mini-Keyboard kann z.B. keinen Ploytec PL2 steuern. Deshalb habe ich einen Arduino Uno dazwischengeschaltet, der nur Noten- (inklusive Velocity), ControlChange-, ProgramChange- und PitchBend-Befehle weiterleiten soll.
Voraussetzungen für das Gelingen sind ein Arduino Uno, die Arduino-Midi-Library, ein Midi-Shield bzw. selbst gebaute Midi In und Out für den Arduino sowie folgender Sketch, den ich zusammenprogrammiert habe:
#include <MIDI.h>
// Arduino Midi Filter
// Version 1.0 by Christian Streng
// Midi Out is on Channel 1.
// www.christianstreng.de/arduino-midi-filter
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
MIDI.begin(MIDI_CHANNEL_OMNI);
MIDI.turnThruOff();
MIDI.setHandleNoteOn(MyHandleNoteOn);
MIDI.setHandleNoteOff(MyHandleNoteOff);
MIDI.setHandleControlChange(MyHandleControlChange);
MIDI.setHandleProgramChange(MyHandleProgramChange);
MIDI.setHandlePitchBend(MyHandlePitchBend);
}
void loop() {
MIDI.read();
}
void MyHandleNoteOn(byte channel, byte number, byte velocity) {
MIDI.sendNoteOn(number, velocity, 1);
}
void MyHandleNoteOff(byte channel, byte number, byte velocity) {
MIDI.sendNoteOff(number, velocity, 1);
}
void MyHandleControlChange(byte channel, byte number, byte value) {
MIDI.sendControlChange(number, value, 1);
}
void MyHandleProgramChange(byte channel, byte program) {
MIDI.sendProgramChange(program, 1);
}
void MyHandlePitchBend(byte channel, int value) {
MIDI.sendPitchBend(value, 1);
}
Mit diesem Sketch sendet der Arduino nur auf Kanal 1 (Standardkanal z.B. für den Meeblip Triode). Der Sketch lässt sich aber auch leicht an eigene Bedürfnisse anpassen. Die Implementierung der Midi Clock fehlt.
UPDATE 1: Meine erste Aktualisierung des Programmcodes ermöglicht das Weitergeben der Daten der Midi Clock.
UPDATE 2: Diese zweite Aktualisierung des Programmcodes lässt eine LED bei Notenweitergabe zur Kontrolle leuchten.
One comment