MIDI Pipe Filter
Custom MIDI pipe that filters and modifies messages. Only Note messages pass through, transposed down one octave and redirected to Channel 5.
Original:
MIDI_Pipes-Filter.ino
#include "pico/stdlib.h"
#include "pico/cyw43_arch.h"
#include <cs_midi.h>
using namespace cs;
BluetoothMIDI_Interface midi;
struct NoteFilter : MIDI_Pipe {
void mapForwardMIDI(ChannelMessage msg) override {
switch (msg.getMessageType()) {
case MIDIMessageType::NoteOff:
case MIDIMessageType::NoteOn:
msg.setChannel(Channel_5);
if (msg.data1 >= 12)
msg.data1 -= 12;
sourceMIDItoSink(msg);
break;
default:
break;
}
}
void mapForwardMIDI(SysExMessage) override {}
void mapForwardMIDI(SysCommonMessage) override {}
void mapForwardMIDI(RealTimeMessage msg) override {
sourceMIDItoSink(msg);
}
};
NoteFilter filter;
int main() {
stdio_init_all();
if (cyw43_arch_init()) return 1;
midi >> filter >> midi;
midi.begin();
while (true) {
midi.update();
sleep_ms(1);
}
}