I would like Bome MIDI to filter all MIDI messages of any kind from a channel to send them to a dedicated port. It includes all notes ON/OFF, channel controlers, program changes, etc...
I am very surprised I cannot do that using a simple user option in the subtype of a midi message. I used to do it with MIDIOx with no effort.
Is there a simple way to do this without missing a kind of message ? Maybe a translator with :
- raw midi/Sysex message type
- midi message : "pp qq rr" to capture only the first bytes
- rules : extract channel number to filter (I may include too many cases)
ss=pp%16
if ss!=10 then exit rules, skip Outgoing Action
- outgoing
send midi message with content=pp qq rr
Does the content=pp qq rr send the full midi message in all cases with following parameters ?
Do I have to create multiple translators for any length or type of message ?
It is hard for me to understand how to process this case. Could you help me ?
If you turn off your default MIDI routes and the only create translators for messages you want to send through, you can do this. You can set input to pp qq rr and then evaluate the channel . For instance MIDI channel 3
// mask channel
tt=pp&0x0f
if tt==2 then exit rules, skip outgoing action
Or you can only let channel 3 through
if tt ==3 then exit rules, execute outgoing action
Outgoing Raw pp qq rr
If the outgoing action is executed, yes all variable defined in the outgoing action will be sent.
MIDI CC , program changes and Note messages are 3 bytes so you can do that with a single translator.
Any MIDI message with a different number of bytes, yes, you will have to check for all incoming bytes for the incoming action.
First of all a happy new year to everyone! Sorry to resurrect this thread but I’m having issues with the suggested method above, here’s my scenario:
I’d basically like to filter out all MIDI messages on channel 1-8 being sent from a Synthstrom Deluge to an Elektron Octatrack. However, all MIDI messages on channel 9-16 shall be transmitted. I managed to accomplish the filtering by doing the following:
[MIDI Router]
No default MIDI routing from the Deluge to the Octatrack
[Translator]
Incoming:
MIDI Message
RAW MIDI / System Exclusive
oo pp qq
Specific Ports… Deluge
Rules:
// extract MIDI channel (0–15)
ga=oo&15
// block channels 1–8 (0-7)
if ga<8 then exit rules, skip Outgoing Action
Outgoing:
MIDI Message
RAW MIDI / System Exclusive
oo pp qq
Specific Ports… Octatrack
Here comes the issue: while the filtering works just fine, clock, note on/off and control changes are transmitted as expected, program changes are only transmitted after pressing “Play” on the Deluge. However, if I disable the translator for troubleshooting purposes and create a direct MIDI routing from the Deluge to the Octatrack, program changes are being transmitted all the time, even when “Play” has not been pressed - which is what I like to achieve.
How is that? Already had quite a discussion with ChatGPT about it, hope to find some help.
Program changes are 2 byte MIDI messages so you should have something like this
Incoming: Raw MIDI oo pp
Rules :
rr=oo&15
if rr<8 then exit rules, skip outgoing action
Outgoing: Raw MIDI oo pp
Also in your original translator, I would use rr instead of ga unless you need to use the variable for a separate translator. ga is a global variable while rr is a local variable.
Steve Caldwell
Bome Customer Care
Also available for paid consulting services: bome@sniz.biz
That does result in three times the tempo, there were no MIDI routes setted up.
Aren’t there other ways inside BMTP to filter MIDI messages from specific channels that don’t influence the Timing Clock?
Edit: I cannot really quantify if it’s really three times the tempo as the Octatrack max. sequencer tempo is limited to 300 BPM. It feels a little faster than just having the two previous translators though.
Using three Translators, with “oo pp qq”, “oo pp” and “oo” results in exactly double the tempo staying consistent. Stop processing is enabled on all of them.
Thanks a lot for providing an example, it was just the order of Translators that caused the issue. I didn’t know I have to “stack” them in increasing order, starting with “oo”, going over “oo pp” all the way to “oo pp qq”. Now everything works like a charm!