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.
Is there an iOS midi key remapping app that remaps each midi note to another midi note *AND* Channel
I need to remap every key of a midi controller to another midi note number as well as the channel. So low octave is remapped to C4 - C5 Ch1, next octave C4-C5 Ch2, etc.
I know of MIDI flow and some other tools, but none of them I've found allow remapping of channel and note.
Is there a good app for this task I'm missing? It's trivial on PC, but not finding that capability on iOS.
Help?
Comments
There is a way to get this done but you'll need some help.
Streambyter has a programming language that can re-map notes and channels easily. You'll just need a StreamByter App:
StreamByter AUv3 MIDI App
MidiFire - the complete MIDI programming debugging app
Either will accept a custom StreamByter script and do the mappings you request.
I asked for a custom StreamByter script and was offered one in about 4 hours here. Good luck.
MidiFlow can probably do this as well and you might be able to do it the mapping yourself. There are 2 versions of it:
MidiFlow FX Bundle
MidiFlow Standalone
I find that this developer is looking for revenue and the original MidiFlow Standalone seems like it was abandoned. I had a similar experience with "MIDI Pro"... still selling the App but no response regarding bugs.
The StreamByter developer @Audeonic has a user forum and you can make the request there and probably see a script in a day or two max. Some Forum members have been digging in and might like the exercise to write something. @_Ki has already created some amazing (and very complicated) scripts shared on the Forum. He wrote one that takes the lowest note from chords and send it to another channel for mapping a better Bass Instrument for a Polyphonic sequencer's output.
A StreamByter Scripting tutorial might exist to get started. The best thing about learning programming is it takes hours to learn and you won't buy more Apps you try and forget so it's a financial benefit as a time sink. It's also really fun when something works correctly. A lot like finishing a project only better to share so someone else can use the code to make a variation.
Yea, I'd forgotten about MIDIFire. I've never been able to wrap my head around the streambyter thing. Hex, etc. Ugh.
But I think I can do it with the GUI in MIDIFire by using like 42 channel strips. Just REALLY tedious..
I did write a StreamByter script that remaps Rozeta XOX/Rythm to other channels. It takes a list of notes (up to 16) and a list of output notes. (And a third list of notes if the velocity is above a specified threshold, but one might use the same note as in the other remapping list) Not yet publish it - needs more documentation...
@MonkeyDrummer If i understood you correctly you
So a sample user input to the script would be 3 variables
The 4 splitpoints/output-notes would result in 4 split regions
Each split can be remapped to different note range or stay the same has with split 4)
If there is demand, i could easily do such a user-configurable streambyter script as it is quite simular to the one i already have.
Thanks @_ki ! What I need to do is remap every key/pad of the new Pearl MalletStation. So I'd need a translation of noteA.ChX -> noteB.ChY for every note/pad. No ranges, which makes it kind of a pain.
@MonkeyDrummer
But your example contained ranges, low octave (12 consequtive notes) to C4-B4 on channel 1, next octave to C4-B4 channel 2 and so on. In my proposed script this would translate to
You want to remap every octave of the MalletStation to a different midi channel and each of these groups should start at C4
Or did i misread your postings ?
Genome?
No, potentially every note.
So potentially:
C1.Ch1->C4.C2
C#1.Ch1->D4.C2
D1.Ch1->E4.C2
etc...
??? I need live translation. how would a sequencer do that?
@MonkeyDrummer
Hmm, so its a little bit more complicated... Should the outputs for the octaves be identical for all channels ? In your example you skipped C#4, should all #‘s be skipped in the output ?
The MalletStation layout looks like a keyboard with black and white keys played with sticks.
I still don’t understand what you want to archieve with you remapping - what do you do control with the MalletStation ? Several synth using the notes on the different channels ? But then why omit some notes ?
I'm looking to control the 6 voices of a NordDrum via midi.
My goal is to have essentially 6 "zones" that map to if not complete scales in CM then maj & min chords in CM. I'll then route midi output from this remapped input into @brambos 's Scaler to change, well... Scale.
If you've looked at pics of the MalletStation, you see that there are pad where a normal keyboard doesn't have keys. So I'd use the included, simple/basic tool they provide to set those "extra" pads to be a midi note outside the normal range of the controller. Thus I can't just use a simple "range" remap as the "extra" accidental triggers/pads will not be continous with the notes before/after.
That's why I said just assume that I need to remap every key/trigger/pad on the controller in a totally arbitrary/discreet manner as it's the most accurate use case for what I'm trying to do.
And I can't say that output octave will always be the same...
Like I said, I think I'll try MidiFire. It's going to be tedious to do 42 channel strips, but I think it will be easiest to modify/maintain once it's set up.
From your description, I believe MidiFlow standalone could do this. You’d need to set it up separately for each translation you wanted to do though.
It could also be done with StreamByter. Here’s some code that does something similar. It takes GR-16’s output, which is on a separate channel per pad and lets you change both the channel and the note before passing it through. In the first table you put the note substitution. In the second, the channel substitution.
What you want to be able to do is potentially more complicated, and would result in a more difficult script. This is why I recommend MidiFlow Standalone. But here it is in case it helps give an idea of what’s involved.
Here is the v3 of the StreamByter script that i came up with - it allows to remap specific notes to other notes/channels using a remap table.
The main drawback is that it uses hex values for notes, so one need to look them up in the midi/hex table.
For debuggging and step by step entry of the remap table, each keypress outputs its new note and channel or -N- for unassigned note and -C- for unassigned channel.
.
To download the script, use the attached zip file since Safari does not offer a ‚select all/copy‘ on text web-pages.
Oh i see, @wim was faster
And you also uses a remap table. I suspect comenting and debugging output/ testing took some additional time.
I just uploaded v2 of the script, which fixes some typos in the comments.
I don’t get how this script tells what the “from” note is in I0 array. It looks like you’re just sending the translate “to” values...
If you want GUI, you can use Beatmaker 3. Load a blank sample on every pad. On the sample overview page, there is a slot that says what note the sample should be. That’s the note setting 1-128. Then, each pad can be edited with a dropdown menu. In there is a setting for channel 1-16. Play in to BM3 to that bank, it will translate and play out to your note/channel per pad.
Thank you so much for your help and attention on this!
I’ve spent the last hour or so figuring out how midifire works, streambyter basics, etc and I think this may work.
However, can you tell me how I would block the converted note’s original value?
I’d like any notes not in the conversion array to pass but anything that’s been converted should only pass the converted value. I tried a few things and all I did was break it! 😜
Add a “+B” to block any rule. Example n1 = xx +b. Any note on channel 2 gets blocked
GR-16 sends on a different channel for each pad. So it’s looking at the pad it comes in from, not the note to do the lookup.
It then either passes it through unchanged, or changes any note from that pad to a specific note. While it’s at it, it also remaps the midi channel if wanted.
That script is specific to GrooveRider, and was only meant as an example of the kind of thing that’s possible.
@MonkeyDrummer
You are right, as @Zetagy already mentioned, i forgot to block the original notes - sorry for any inconveniences. I updated my original posting with version 3 link and new zip.
In v3 i added the following line at the end of the script:
NX = XX +B # // Block arriving NoteOff/NoteOff
Just awesome man! Thank you so much. This was like the last “hurdle” to be able to get off the PC and be more “immediate” by using the iPad for basic midi processing.
I’ll have to write up the full translation table and try it out before I get my hope too far up, it is technology after all, and it always has a way to bite you! 🤪
That’s pretty clever tool usage @Zetagy !
When i read the opening post, i thought one could programm a clever loop working on some regular structure so that no or only minimal user setup is needed - but now you got a one to one translation with lots of user input.
Setting up the table for 42 notes itself is quite some work and prone to lots of copy/paste or user error, misreading the hex tables etc - thats why i added the debugging labels for notes and channel and the little error message if something is undefined.
My hope is that using the script is more light-weight than setting up 42 independand translations in MidiFlow , which is basically the same what the script does...)
Midiflow is unstable with that many lanes. Needs to be done in Streambyter.
Somewhat tempted to post my project.
Its a long read.
The real magic is in StepPolyArp, so there’s no harm in posting some syntax...
My head hurts from this thread.
This is the map done in BM3, you will see Xequence in its place. I’m using it for direct AB midi in.
Commands in, to secret arp magic, to multichannel harmony out.
Sorry to bomb ur thread, I hope there’s some useful bits in there.
Sincere THANK YOU to Nic Grant for creating Streambyter.
@Zetagy Holy f*ckballs! I don't run AB3, but man... That's pretty insane!