I’m 10/10 with MTP and BomeBox so far, so really stretching limits here…!
I would love to have a series of repetitive MIDI messages coming in, all identical (e.g., same key pressed and released over and over again on a MIDI controller keyboard). This series would then be mapped onto a pre-defined array of MIDI messages, one at a time, in a looping fashion - starting over after the last one has been reached (e.g., playing the notes of a major musical scale, advancing one note each time the keyboard key is pressed, going back to the first note after 7 keystrokes, for example).
I assume this is doable, but it seems pretty insane. Would this be something for the Rules function?
The global variable “ga” acts as a counter. The global variable “gb” is the base note. Each time we send a note-off, we increment the the counter and adjust the offset to output the local variable pp.
We do this on note-off so that we don’t get hung notes.
Here are the note-off rules. The note on-rules are similar to determine the correct note but we do not increment the counter on note-on or use the mod operator.
if ga==0 then pp=gb
if ga==1 then pp=gb+2
if ga==2 then pp=gb+4
if ga==3 then pp=gb+5
if ga==4 then pp=gb+7
if ga==5 then pp=gb+9
if ga==6 then pp=gb+11
Log "Log Note-off note %pp%"
ga=ga+1
// Mod Operator ga will be 0-7 only
ga=ga%7
Thanks Steve. I loaded the file you attached, but I’m not really able to get it working properly. I thought I might share more specifics with the hope that I must have just missed something obvious.
I would like this trigger to begin on key 54 and step through a series of notes that I can later define specifically. In looking at the attached .bmtp file, where specifically would I make those not changes, when I get it working on get to that step. As always, !
Thanks! Any thoughts on how I could apply this to additional translators in my song’s preset? I think I’ve got my mind around the mechanics of it now, but it would be so awesome to be able to add it to the translators list within a specific song and assign it to one particular key on my controller.
Hi, I’m not 100% sure what you are looking for but in the below example.
I added another preset that uses only one global variable as a counter. The outgoing note progression is based on the incoming note. I guess you could define the note number for the incoming message to only restrict to a single incoming note. You might also need to restart the counter sequence upon preset activation, so that as you activate a new preset (song), the sequence restarts with the desired incoming note. You could all another offset to the outgoing note if you don’t want the outgoing note starting with the same incoming note.
Oh, yeah. Thanks Steve! This is really great. I think it takes me down the right path.
Yeah, I think you are absolutely right that the counter would need to reset on preset switch! It would be absolutely crucial, in fact. I’m gonna have a mess around now.
Hi again. So, after playing around with this and troubleshooting on repeat, I’m back to seek guidance. I will outline EXACTLY what I’m trying to achieve and I’ll put a copy of my .bmtp file here to show what I’ve been working on.
Here’s what’s going on. I am trying to specifically create a translator that would step through a specific series of notes (that I will go through a map out and define later) in Song 2. The pattern I’d like to step through will be 32 notes long and then should loop back and start over from the top, once completed. I’ve successfully achieved this in a blank project that I set up from scratch, but that doesn’t really work with what I’m trying to add on to, with this .bmtp setup file.
Ultimately, I would love to have MIDI CC #54 step through the below 32 note steps, while handling note on/note off requirements and have it reset back to the first note in this process, whenever the preset or ‘song’ is selected or deselected, whichever works best.
32 steps I’m trying to get working using Rules:
if ga==0 then pp=gb+27
if ga==1 then pp=gb+30
if ga==2 then pp=gb+34
if ga==3 then pp=gb+39
if ga==4 then pp=gb+42
if ga==5 then pp=gb+41
if ga==6 then pp=gb+39
if ga==7 then pp=gb+37
if ga==8 then pp=gb+39
if ga==9 then pp=gb+42
if ga==10 then pp=gb+46
if ga==11 then pp=gb+51
if ga==12 then pp=gb+54
if ga==13 then pp=gb+53
if ga==14 then pp=gb+51
if ga==15 then pp=gb+49
if ga==16 then pp=gb+48
if ga==17 then pp=gb+32
if ga==18 then pp=gb+36
if ga==19 then pp=gb+39
if ga==20 then pp=gb+44
if ga==21 then pp=gb+48
if ga==22 then pp=gb+51
if ga==23 then pp=gb+54
if ga==24 then pp=gb+51
if ga==25 then pp=gb+32
if ga==26 then pp=gb+36
if ga==27 then pp=gb+39
if ga==28 then pp=gb+44
if ga==29 then pp=gb+48
if ga==30 then pp=gb+54
if ga==31 then pp=gb+53
The rest of the bells and whistles, I believe I have a handle on. I’m just not sure about what needs to go into where to get the timers and all the various variables working. I know it’s a lot, but I’m kind of interested in the impossible. I don’t think this is that…
Translator 3.14 handle resetting the counter on preset activation
Translator 3.13 handles the note sequence. We set the global variable gc to the last note played for sending note-off messages. I assume you don’t want a timer since you are manually stepping through things to CC 54 value 7F.
Translator 3.15 turns off the currently playing note when the preset is deactivated.
On every step we send a note off for the last note played and then a note-on for the new note. The note will sound until the next note is played.
Okay, so here’s where I’m at on this journey. I’ve got a set of songs set up and working relatively flawlessly. There’s one part in the bridge of the first song in the list labeled as ‘motmm’ that has the part that I’m trying to work out with the single repeated key press that that cycles through a series of notes and then loops back to the beginning, once it reaches the end while also ‘resetting’ from the top when changing to a new preset or ‘song’, so that it always starts from the 1st note.
I have multiple projects I’ve been testing in where I get it to work, but I can’t seem to integrate it as a translator in this, my main operating project. Any ideas or help would be greatly appreciated!
In ‘motmm’, I’m trying to use rules to walk through the following notes, then cycle back to the top and through again. Is there something I can do to integrate it into this file, without interrupting what’s already built and working well?
Here are the notes I’m attempting to step through in this song, but trigger a single key:
if ga==0 then pp=gb+27 if ga==1 then pp=gb+30 if ga==2 then pp=gb+34 if ga==3 then pp=gb+39 if ga==4 then pp=gb+42 if ga==5 then pp=gb+41 if ga==6 then pp=gb+39 if ga==7 then pp=gb+37 if ga==8 then pp=gb+39 if ga==9 then pp=gb+42 if ga==10 then pp=gb+46 if ga==11 then pp=gb+51 if ga==12 then pp=gb+54 if ga==13 then pp=gb+53 if ga==14 then pp=gb+51 if ga==15 then pp=gb+49 if ga==16 then pp=gb+48 if ga==17 then pp=gb+32 if ga==18 then pp=gb+36 if ga==19 then pp=gb+39 if ga==20 then pp=gb+44 if ga==21 then pp=gb+48 if ga==22 then pp=gb+51 if ga==23 then pp=gb+54 if ga==24 then pp=gb+51 if ga==25 then pp=gb+32 if ga==26 then pp=gb+36 if ga==27 then pp=gb+39 if ga==28 then pp=gb+44 if ga==29 then pp=gb+48 if ga==30 then pp=gb+54 if ga==31 then pp=gb+53
ga is the preset offset number
gb us the current preset
(see translator 0.2)
It is important to track and use your global variables and make them unique for everything that you want to use.
I added gc as the sequence number and gd as the last note played.
When we deactivate the preset, we make sure the last note played is turned off (see translator 2.13)
When we activate the preset, we reset the sequence number to 0
(see translator 2.12)
The rules of translator 2.11 step through the notes turning the new note on and the last note off.
I capture the incoming note and offset it by -20 to get the note you want played. You may want to offset it by something else.
I capture the last note number from the previous sequence into the local variable tt from the global variable gd.
Before I increment the sequence number, I set the last note number so that we can turn it off on the next iteration so we have no stuck notes.
Here are the rules:
// offset rr
rr=rr-20
// get last note
tt=gd
// turn off last note if reset
if tt==0 then tt=rr
// step through notes
if gc==0 then pp=rr+27
if gc==1 then pp=rr+30
if gc==2 then pp=rr+34
if gc==3 then pp=rr+39
if gc==4 then pp=rr+42
if gc==5 then pp=rr+41
if gc==6 then pp=rr+39
if gc==7 then pp=rr+37
if gc==8 then pp=rr+39
if gc==9 then pp=rr+42
if gc==10 then pp=rr+46
if gc==11 then pp=rr+51
if gc==12 then pp=rr+54
if gc==13 then pp=rr+53
if gc==14 then pp=rr+51
if gc==15 then pp=rr+49
if gc==16 then pp=rr+48
if gc==17 then pp=rr+32
if gc==18 then pp=rr+36
if gc==19 then pp=rr+39
if gc==20 then pp=rr+44
if gc==21 then pp=rr+48
if gc==22 then pp=rr+51
if gc==23 then pp=rr+54
if gc==24 then pp=rr+51
if gc==25 then pp=rr+32
if gc==26 then pp=rr+36
if gc==27 then pp=rr+39
if gc==28 then pp=rr+44
if gc==29 then pp=rr+48
if gc==30 then pp=rr+54
if gc==31 then pp=rr+53
// capture the last note for the next iteration
// for note-off
gd=pp
// increment sequence fornew note played
Log "Log Sequence %gc% note-on=%pp% note-off=%tt%"
gc=gc+1
// cycle back to the first sequence if we have
// finished
if gc>31 then gc=0
Oh man…sooooo close now!! Now the main issue I’m having is that the ‘step-though’ notes are almost all hanging. Some don’t, but the majority of them do. Likely, I’m missing some kind of core ‘note off’ functionality. Where would I go about adding that? Globally, or within Rules?
Hmm although I didn’t fully test it before, I just did and it works fine. Maybe you are getting stuck notes by some coming through directly through the keyboard or via a MIDI Thru path. Did you try disabling the MIDI thru paths and just let the translators do the work?
Edit or maybe the MicroFreak needs a velocity of 0 for note-off.
Try changing this:
80 tt qq 90 pp qq
to this
80 tt 00 90 pp qq
in the output of translator 2.11
Steve Caldwell
Bome Customer Care
Also available for paid consulting services: bome@sniz.biz
Hey Steve. After nearly a month of trying everything I can think of, I’m still SOOL on this…the single, step-through notes work like a charm, but they almost all hang forever. I tried your previous suggestion, but no dice. Very likely a Microfreak thing, but I’m super committed to it at this point and I still think it’s worth the hunt. I’d love to hear any other creative solutions that you or anyone else in the community may have.
Do you every send program change (PC) messages? Maybe the MicroFreak gets confused when a PC comes across so you might want to follow up every PC with an all-notes off message?
Steve Caldwell
Bome Customer Care
Also available for paid consulting services: bome@sniz.biz
I’m a bit lost. I think that is certainly worth a try, as it might just be the thing that’s confusing the Microfreak. The confusion comes with trying to decipher where to apply the All Notes Off feature. I have this step through this successfully running within Rules in a Translator, so at least that part is working very successfully.
Any advice where I would apply the notes off function?
I’m attaching my working .bmtp file, for reference.
Actually…yes…sometimes following preset switching, after hitting a note, it will get hung on another octave upon release. I usually just shut off the Microfreak and reboot and it fixes the issue…but it does happen.