Loopy Pro: Create music, your way.
What is Loopy Pro? — Loopy Pro is a powerful, flexible, and intuitive live looper, sampler, clip launcher and DAW for iPhone and iPad. At its core, it allows you to record and layer sounds in real-time to create complex musical arrangements. But it doesn’t stop there—Loopy Pro offers advanced tools to customize your workflow, build dynamic performance setups, and create a seamless connection between instruments, effects, and external gear.
Use it for live looping, sequencing, arranging, mixing, and much more. Whether you're a live performer, a producer, or just experimenting with sound, Loopy Pro helps you take control of your creative process.
Download on the App StoreLoopy Pro is your all-in-one musical toolkit. Try it for free today.
Individual note filter?
I’m looking for an app or a script that will allow me to allow individual MIDI notes to pass through while blocking most others. Many hosts have range options but that’s not enough specificity for my use case. For example: I want to allow notes 42, 44, 46, 48, 49 but no others. Any options?
Comments
Streambyter, dRambo and Mozaic.
Specific scripts in SB or Mosaic?
In Mozaic or Streambyter, roll your own. It would be very short. If you own either, you can probably figure out what you need from looking at the provided examples. Mozaic’s manual is particularly good.
If you have Drambo...

I believe Midiflow can do this also
Yep! Had not thought of this because it is still a range but a small number of modules could do it.
I sat down to write the script in Mozaic and recalled that @wim wrote this script for me that does a lot of what I want but the “thru = no” does block notes but ends up blocking even the notes I want to flow through.
@Description
The script checks for certain notes then looks up a note to translate it to. It then sends a note-ON for that note, and schedules a note-OFF after a configurable delay. If another note-ON for another one of the notes is received before the delay time then the note-OFF is sent immediately, a new note-ON is sent, and a new note-OFF is scheduled.
▫️ Configure the note-OFF delay with the first knob.
▫️ Edit variables in the @Settings section to change the notes to listen for, notes to translate to, the channel to listen on, and other settings. See the comments for details and ...be careful.😬
@End
@Settings
// The midi channel to check for and send notes
channel = 9
// NotesIn holds the notes to check for.
// NotesOut holds the notes to translate to
// sendTime must only hold zeros
// Make sure all these arrays have the same number of cells!
notesIn = [30, 38, 64, 67]
notesOut = [66, 68, 70, 72]
sendTime = [0, 0, 0, 0]
// If you change the number of notes in the arrays above,
// set "lastNote" to 1 less than the number of notes!
lastNote = 3
// set this to NO if you want to block other MIDI
thru = no
// this is the delay in milliseconds on a new script load. Adjust to taste.
default_delay = 5000
@End
@OnLoad
Call @Settings
// these are just some constants to make code more readable
noteON = 0x90
noteOFF = 0x80
// this stuff happens only on a new load of the script
if Unassigned init
init = YES
endif
SetTimerInterval 10
StartTimer
LabelKnobs {Settings}
ShowLayout 4
@End
@OnMidiInput
if MIDICommand <> noteON and MIDICommand <> noteOFF
if thru = YES
SendMidiThru
endif
else
onTime = SystemTime
Call @CheckNote
endif
@End
@CheckNote
noteIndex = -1
if MIDIChannel = channel
idx = 0
while (noteIndex = -1) and (idx < lastNote+1)
if MIDINote = notesIn[idx]
noteIndex = idx
else
Inc idx
endif
endwhile
endif
// if no note match was found then noteIndex will still be -1
@End
@OnTimer
time = SystemTime
for sendIndex = 0 to LastNote
if sendTime[sendIndex] > 0 and sendTime[sendIndex] <= time
endfor
@End
///////////////////////////////////////////
// GUI Stuff //
///////////////////////////////////////////
@OnKnobChange
knob = LastKnob
value = GetKnobValue knob
if LastKnob = 0
tmp = TranslateScale value,0,127,1,10
Call @RoundTime
endif
@End
@RoundTime
seconds = RoundDown tmp
// round to nearest 0.5 seconds
decimal = 5 * (Div ((tmp - seconds) * 10), 5)
// convert delay to milliseconds
delay = 1000 * (seconds + (decimal/10))
// label the knob this way to avoid zeros after the decimal
LabelKnob 0, seconds, {.}, decimal, { sec.}
@End
How do I filter multiple notes by having multiple modules? The problem is that I'm filtering out the other notes I want to pass through in "downstream modules".
You could connect each note filter to the track MIDI input, send the outputs to a MIDI mixer, then to MIDI to CV.

MIDI to CV is not really necessary, right?
@lukesleepwalker In the script, which notes do you want to flow through? The SendMIDINoteOn should send the (mapped) notes selected by the @CheckNote function. Does that not work? Since the script transforms the notes, it generates Note Off messages, which might be confusing.
That script may be a little too complicated for what you want. You just want to pass certain notes, both Note On and Note Off, and block other notes. You could keep @CheckNote and drop most of the rest, adding code that just does what I said.
Right. Only if you want to play a Drambo instrument. Not if you only want selected MIDI.
@lukesleepwalker : for your purpose, I don't think a nice u.i. for the Mozaic script is needed -- as the code you need to just do the filtering/pass-thru could be only a few lines -- and it would be easy to edit the code to change the notes.
I would structure it something like this (this is pseudo-code that will need a little modding to make correct)
This is all you need:
onMidiNote
if midiNote = noteToPass1
sendMidiThru
else if MidiNote = noteToPass
sendMidiThru
endif
end //end onMidiNote
add an else for each note you are looking for
I thought the Drambo MIDI mixer would work too, but it doesn't actually yield the expected results. Try it in AUM as suggested above. I can get the first module to work but never the second one. Which conceptually makes sense, right? The first module is filtering down to just the note I selected. The second module isn't getting all the other notes that I play, yes?
Edit: forget it. I thought I had set each module to the track MIDI input but I whiffed on that. It works, thanks!
.
Yep, thanks for mapping it out. This is easily doable but Drambo gives me convenient UI so I think I'll go with that.
@lukesleepwalker just to be pedantic, this is another Mozaic option
:
Ah yes, that's elegant!
I still can't figure out why Wim's original script doesn't work--even though it's just an annoyance at this point rather than a blocker to progress. I've looked at the script closely and I can't see why it shouldn't do what it is supposed to do. That is, it should send the notesOut and nothing else with "thru = NO".
Nice and elegant!
.....
As an exercise, you can figure it out by putting some log statements in there to spit out diagnostics at various points in the program -- with particular attention to any branching points.
It "works for me". Remember that, as written, the accepted notes are on MIDI channel 10 (binary 9 in the script), and the notes are translated into the notesOut, so they're not the same as the inputs. Also, there's an automatic Note Off 5 seconds after the note, or immediately when another accepted note is input. That said, when I strike the allowed notes, the mapped notes are output. Other notes have no effect. I used the StreamByter monitor to verify this.
@lukesleepwalker is that Mozaic script on Patchstorage? If not be great to see it up there. Cheers!
Well, crap. I am having a very bad day with MIDI brain farts and you guys keep bailing me out. I had the MIDI channel set wrong on the AUM keyboard; when I change it from Channel 9 to Channel 10 it does indeed work. I appreciate the help, everyone who has weighed in. Despite my brain farts, I'm now in good shape to make some music.
It is not up there, per Wim's request. He thought it was a little too risky given the possibility for stuck notes and other mayhem due to the messing with note off's.
Great! 😊