
Orgel
.....
Hallo,
ich habe ein Programm auf einem Arduino UNO, welches prüft ob ein bestimmtes Note-On/Off-Event von einem bestimmten MIDI-Kanal eintritt. Ist dies der Fall wird das Event an einen anderen Kanal weitergeleitet.
Das Programm läuft zwischen zwei Geräten, wobei der Sender nur auf Kanal Acht kann, der Empfänger nur auf Kanal Zehn. Leider kann man es bei beiden nicht verstellen.
So weit, so gut. Dennoch werden verschieden Noten verschluckt und kommen beim Gerät nicht an. Bedeutet, wenn der Sender 16tel Noten spielt, wird immer mal eine nicht ausgegeben. Das ist mir zu unzuverlässig. Ich hatte das Programm zunächst mit dem Auslesen der Seriellen-Schnittstelle gemacht, schneller und stabiler erscheint mir aber Midi.h (Midi Library).
Wie kann man das optimieren das es keine Aussetzer gibt?
Ich habe den recht einfachen Code einmal angeheftet.
ich habe ein Programm auf einem Arduino UNO, welches prüft ob ein bestimmtes Note-On/Off-Event von einem bestimmten MIDI-Kanal eintritt. Ist dies der Fall wird das Event an einen anderen Kanal weitergeleitet.
Das Programm läuft zwischen zwei Geräten, wobei der Sender nur auf Kanal Acht kann, der Empfänger nur auf Kanal Zehn. Leider kann man es bei beiden nicht verstellen.
So weit, so gut. Dennoch werden verschieden Noten verschluckt und kommen beim Gerät nicht an. Bedeutet, wenn der Sender 16tel Noten spielt, wird immer mal eine nicht ausgegeben. Das ist mir zu unzuverlässig. Ich hatte das Programm zunächst mit dem Auslesen der Seriellen-Schnittstelle gemacht, schneller und stabiler erscheint mir aber Midi.h (Midi Library).
Wie kann man das optimieren das es keine Aussetzer gibt?
Ich habe den recht einfachen Code einmal angeheftet.
Code:
#include <MIDI.h>
MIDI_CREATE_DEFAULT_INSTANCE();
void setup() {
MIDI.setHandleNoteOn(handleNoteOn);
MIDI.setHandleNoteOff(handleNoteOff);
MIDI.begin(8);
}
void loop() {
MIDI.read();
}
boolean validPitch(byte pitch) {
return pitch == 36 || pitch == 38 || pitch == 40 || pitch == 41 || pitch == 43 || pitch == 45 || pitch == 47 || pitch == 48;
}
void handleNoteOn(byte channel, byte pitch, byte velocity) {
if (validPitch(pitch)) {
MIDI.sendNoteOn(pitch, velocity, 10);
}
}
void handleNoteOff(byte channel, byte pitch, byte velocity) {
if (validPitch(pitch)) {
MIDI.sendNoteOff(pitch, velocity, 10);
}
}