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.
iOs/iPadOS Sysex Recording/Playback
If you have a host that doesn't support sysex messages there is still some simple ways to record/playback these events. For this, although they are other solutions, I use a Mozaic script hosted in AUM, as they both support sysex, convert the sysex (or part of it) to CC(or any MIDI data).
Then on playback rebuild the sysex and send back to the external device.
Ok, first you need to launch or buy AUM - audio mixer (it's a bit more than an audio mixer) and Mozaic plugin workshop (a MIDI scripting tool that let's you do pretty much eveything with MIDI)
1) Launch Mozaic, then close it (it's intended to be used as a plugin, not standalone)
2) Launch AUM, tap the big + sign and select MIDI
3) Tap the + sign in the white circle, choose Audio Unit Processor, then look for Mozaic ( if it's not showing up you may need to turn of your iPad and restart it, then back to 2) )
4) Tap on the Mozaic icon to open it. If needed you can resize(hold the lower rigth side)/move(hold the big gray bar on top) the window .
5) Click on Code, then on Maximize, select all the text in it and delete it (cut or BACKSPACE)
6) Now copy/paste the code below, it's a simple MIDI monitor and displays sysex as well, unfortunately only in decimal, but to test it's good enough.
7) Now hit Upload, this will start the script(program). And make sure LOG is selected, that's where our MIDI data will show up.
8) We still need to connect to the hardware (or any port, it can be from virtual ports, bluetooth, network, ...). Click on the "Z" or "S", second icon on top of the Mozaic window. In MIDI Sources select the port(s) you want to listen too.
9) Ok when moving knobs, faders,.. on your MIDI device you should see midi data coming in, if it has only 4 values it's a standard midi message (Command, channel, byte2, byte3) and if it's longer it's a sysex.
10) Now time to save, in Mozaic, hit SHOW GUI, then SAVE, mozaic doesn't allow subfolders so you may save this one to something like UTIL_MIDI monitor, once you have a hundred scripts you will understand why
11) To save the AUM project, hit the hamburger icon (top rigth) , Save, click the blue pencil, rename and Save session. Note that saving the aum session will also save the mozaic script, but it's a good habit to save them both.
OK, next time you launch AUM, just tap Reload last Session or use Files/Sessions >
That's it for now, next we will send / receive these sysex to other host.
// simple midi monitor 1.0 Mozaic 1.3.9
@OnLoad
SetTimerInterval 1200
SetShortName {Log..}
@End
@OnTimer
Log { }
StopTimer
@End
@OnMidiInput
if MIDIByte1 > 0xF0
exit
endif
SendMIDIThru
StopTimer
log MIDICommand , {,}, MIDIChannel , {,}, MIDIByte2 , {,}, MIDIByte3
StartTimer
@End
@OnSysex
StopTimer
// log {Received a Sysex message! (}, SysexSize, { bytes long)}
ReceiveSysex msg
sl = SysexSize
FillArray msg[sl], -1, 16
i = 0
if sl > 16
log { }
endif
if sl < 9
log msg[0+i], {,} , msg[1+i], {,} , msg[2+i], {,} , msg[3+i], {,} , msg[4+i], {,} , msg[5+i], {,} , msg[6+i], {,} , msg[7+i]
elseif sl < 11
log msg[0+i], {,} , msg[1+i], {,} , msg[2+i], {,} , msg[3+i], {,} , msg[4+i], {,} , msg[5+i], {,} , msg[6+i], {,} , msg[7+i], {,}, msg[8+i], {,} , msg[9+i]
else
repeat
log msg[0+i], {,} , msg[1+i], {,} , msg[2+i], {,} , msg[3+i], {,} , msg[4+i], {,} , msg[5+i], {,} , msg[6+i], {,} , msg[7+i], {,}, msg[8+i], {,} , msg[9+i], {,} , msg[10+i], {,} , msg[11+i], {,} , msg[12+i], {,} , msg[13+i], {,} , msg[14+i], {,} , msg[15+i]
i = i+16
Until (i >= sl)
if sl > 16
log { }
endif
endif
StartTimer
@End
edit: code change
Comments
..
MultiTrackStudio supports sysex messages as of version 3.9, not sure if that helps
Cool, thanks for the tips and the script. What's the best way to playback sysex in AUM through midi cc?
@je> @Littlewoodg said:
Thanks, good to know, would be probably a good choice for sysex editing. And tempo track / time signature !
Version 1.1.2, forgot to deal with values of 0 when using Note On ( 0x90)
New version 1.1.1 ,now you can also send NoteOn, Key Aftertouch or Pitch wheel instead of CC
Patch change and channel pressure should work too, but as they have only one data byte, some host may clear the second one.
For Drambo set MIDICMD = 0x90 and NOTEOFFDURATION = 100 //msec or what you want
But don't fool too much with quantisation and velocity changes unless you know what you do.
You can have up to 24 CC in a single sysex
Use values 1000+CC to define an element
With a sysex like F0 00 01 02 03 F7
SysExCheck = [0x0, 1000+11, 0x2, 1000+12] // the script uses 1000 to know it's a CC
SysExCheckLen = 4 // in this case
Otherwise all element must between 0-127 or 0x0 - 0x7F in Hex
If you want to record each element
SysExCheck = [1020, 1021, 1022, 1023, .. ad up to 24 CC ]
But IMO, it's better to use CC for values you are really using
Make sure to set SysExCheckLen = number of elements (without F0 and F7)
I guess that the maximum size of the sysex can be 1024 (haven't tested)
Note that this version doesn't allow sysex of different length
In Cubasis avoid CC64 and CC123 as CB2/3 will send them after the sequencer stops
On playback the script will check which CC it receives and if there is a double will
generate an error and restart from there. Once it has all the CC's it generates a SYSEX
Also once it receives the first CC, there is a timeout between each cc
If it's longer than the one we define in SetTimerInterval, it generates an error (log) and
resets the count
The routing can be a little tricky
The easiest is probably to record that CC on it's own channel/track in your DAW
and use two instances of Mozaic with the same script, then in AUM:
external midi -> mozaic1 -> DAW, converting sysex to CC, then
DAW -> mozaic2 -> external midi, CC back to sysex
With Cubasis 3 this would be:
in AUM:
external midi -> mozaic1 -> Cubasis 3
'AUM' destination -> mozaic2 -> external gear
In CB3 you need to set the midi In to All Inputs (there's no Cubasis In),
so it's probably a good idea to receive only on our selected channel (16 in the example)
and Midi output to AUM, same channel
The good part is that once it works it should work all the time, just need to launch this AUM session
Little script to test with the Sysex Converter 1.1.0 script
Generating random values for elements with a CC
In AUM connect TOP = RND-SX, RIGHT = SYS-CV
Tested with Cubasis 3 .. IT WORKS .. so far
Tested with Drambo , no luck with note on, drambo records note on with a velocity of 1 as 0, witch generates a note off. , unless someone really cares, no drambo or change the script.
Edit: should be fixed in a future version of Drambo.
Still, converting sysex, CC, pitch wheel, .. to Notes is still a problem as a Note On with zero velocity is a note off, and most host won't record a note off on it's own.
In the script to avoid loosing the zero, I increment all velocity by 1 up to 125, and on return decrement by 1 all values except 127, so we do loose value 126, better than loosing the zero.