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.
Comments
No. I do hold back on the prices… but I’m getting bored with the toys I own. I got the Enhancia Ring for $100 and
It can send similar types of MIDI controls. Since the company went under I could resell the Ring to offset the cost of the
Roli.
If your looking for a cool Moziac project consider simple sequencers… that’s a rat hole I went down for months.
I even got a Realtime MIDI Recorder to work with a 255 note limit. Step Sequencers that save incoming notes to an array and send them out in Sync with the DAW’s clock is fun. The Realtime solution saves all the relevant stats to parallel arrays using a common index:
Note
Velocity
System Time
Play back does the “delta” calculation on the System times and requests all the notes be sent out with the “system time delta” added as a MIDI delay option. So, I can send up to 256 notes in a batch.
Getting the time right between batch’s to do longer recordings is where I stopped on that effort. You want the batch dispatch to be really precise to make it all seemless.
maybe the keith mcmillen board would be worth considering, someone posted it here a short while ago. MPE pressure and you can tilt the keys?, so no glide...but still, only 100 bucks https://www.keithmcmillen.com/products/k-board/
@dobbs it’s a bit pappy but I think it works - the bias setting can be set to taste, im not sure how to set it correctly for exponential, or if that’s even the best way to do it, dealer’s choice really
after looking it up in the mozaic manual I still don't have the slightest clue what translatecurve does I guess for a version where you want to give the pads values corresponding to the frequencies of the chromatic scale you don't really need the min/max knobs because only one max-min makes sense, and then it would be easiest to just manually give each pad its value... hmm, or you put in the formula... ---redacted----
I'm super tired and it's very late and it's been like 5 years since the last time I did maths beyond the rule of three, so maybe this is all complete nonsense
edit: yes it was
Hey @krupa - to code-format a block like you have a couple of posts up, put three back-ticks (```) on a line by themselves before and after the code. The single back-tick only works for short inline code snippets.
@dobbs
I created a MIDI Monitor that can turn on/off MIDI types to reduce the cluttter when looking at the PitchBend output.
A major use of a Monitor that can filter by MIDI type is when you want to send a specific MIDI stream to a target for MIDI learn. This Monitor script can be used to create custom MIDI configs in AUM mapping CCs to AU Parameters or GUI controls.
MIDI PitchBend SPEC:
PitchBend is a 14-bit value with 7 bits in MIDIByte2 and 7 bits in MIDIByte3.
The numbers sent in Byte 3 are worth 128 each and Byte 2 are just their 0-127 value. So, PitchBends can swing from 0 to (127 + (128*127) or 0 to 16,383.
The Orba only send 63 or 64 in MIDIByte 3 so the number range is 63128 to 127+64128 or 8,064 to 8,319. That's a little 256 value hole in the 0-16,383 that a synth expects. No wonder you can barely hear it. BUT with a pitch bend wheel you can assume it stings back to the middle 8,063 position.
So, Orba PitchBends are a really small vibrato +/- 127 around the center 8,064 position of a pitch bend wheel.
To hack a solution the value of Byte2 (63 or 64) needs to feed a scale translation for Byte2:
The jumps might be a little rough but this shows how come the untreated PitchBend even at 100% is just a little wiggle for vibrato. But since PitchBend is mapped to the degree the finger is off the centerline this protects the Orba from sending out PitchBends that a totally out of tune.
The 63 value covers off center to one side and 64 indicates off center to the other side.
My montitor script works for any MIDI Logging by MIDI Type. I intend to add PADs to toggle MIDI Types on and off but here’s the current script for anyone to study or play with. The MidiType is enable by setting it’s Variable to a 1 in the Onload section:
Cheers, I might have to try on a non mobile device as I’ve just edited it like that but it’s made it worse 😅
@McD very cool, thanks!
Gosh I need to find a good resource to read up on all that stuff… at least i found the official listig midi commands now https://www.midi.org/specifications-old/item/table-2-expanded-messages-list-status-bytes
I was already wondering how pitchbend could cover multiple octaves smoothly with just 128 steps, but yeah, that makes more sense now
“Reinventing the wheel”: I was poking around for the faster way to get the Bluetooth Midi config menu in AUM and I happened across the “Filter” menu… go figure:
But I will continue because I want to Log MIDI event by type and have a switch to control forwarding that MIDI or not.
The Orba Manual has clarification about the limitations of the “Vibrato” implemented via Pitch Bend:
I added all the Obra specific MIDI events to my Mini Monitor script:
Just change variables to a 1 (or anything great than zero) to Log events of that type:
I added the PAD switches for MIDI types and specific Orba CC features. I think it might be wise to use the 4 available Knobs as CC Targets and preset them to Orba Defaults but let the user reset them to specific CC’s they would like to monitor:
```
@Description
This is a MIDI Logging Script with logical switches for Orba 1/2 events
but also useful as a generic MIDI logger. I will add PAD switches for the
Event Types and SendMIDIThru so the script can function as a filter to use
for setting up MIDI Learn Associations.
@End
@OnLoad
// ShowLayOut 1 // 22 Knobs
ShowLayout 2 // 16 Pads + 4 Knobs
// ShowLayOut 3 // 10 Rotary Dials + X-Y Pad
// ShowLayOut 4 // Description Box + 4 Knobs
CC = 0
Tilt1 = 0
Shake2 = 0
Radiate74 = 0
Spin112 = 0
Move113 = 0
PC = 0
PolyPressure = 0
ChannelPressure = 0
AfterTouch = 0
PitchBend = 0
Note = 0
Bump39 = 0
Shake69 = 0
PassThrough = 0
LabelPad 0, {All CC's}
LabelPad 1, {Tilt CC1}
LabelPad 2, {Shake CC2}
LabelPad 3, {Radiate 74}
LabelPad 4, {Spin CC112}
LabelPad 5, {Move CC113}
LabelPad 6, {Prog Change}
LabelPad 7, {Poly Pressure}
LabelPad 8, {Ch Pressure}
LabelPad 9, {AfterTouch}
LabelPad 10, {Pitch Bend}
LabelPad 11, {Notes}
LabelPad 12, {Bump Note 39}
LabelPad 13, {Shake Note 69}
LabelPad 14, { }
LabelPad 15, {Passthrough Off}
@End
@OnPadDown
If LastPad = 0
If CC = 0
CC = 1
ColorPad 0, 1
else
CC = 0
ColorPad 0, 0
endif
elseif LastPad = 1
If Tilt1 = 0
Tilt1 = 1
ColorPad 1, 1
else
Tilt1 = 0
ColorPad 1, 0
endif
elseif LastPad = 2
If Shake2 = 0
Shake2 = 1
ColorPad 2, 1
else
Shake2 = 0
ColorPad 2, 0
endif
elseif LastPad = 3
If Radiate74 = 0
Radiate74 = 1
ColorPad 3, 1
else
Radiate74 = 0
ColorPad 3, 0
endif
elseif LastPad = 4
If Spin112 = 0
Spin112 = 1
ColorPad 4, 1
else
Spin112 = 0
ColorPad 4, 0
endif
elseif LastPad = 5
if Move113 = 0
Move113 = 1
ColorPad 5, 1
else
Move113 = 0
ColorPad 5, 0
endif
elseif LastPad = 6
if PC = 0
PC = 1
ColorPad 6, 1
else
PC = 0
ColorPad 6, 0
endif
elseif LastPad = 7
if PolyPressure = 0
PolyPressure = 1
ColorPad 7, 1
else
PolyPressure = 0
ColorPad 7, 0
endif
elseif LastPad = 8
if ChannelPressure = 0
ChannelPressure = 1
ColorPad 8, 1
else
ChannelPressure = 0
ColorPad 8, 0
endif
elseif LastPad = 9
if AfterTouch = 0
AfterTouch = 1
ColorPad 9, 1
else
AfterTouch = 0
ColorPad 9, 0
endif
elseif LastPad = 10
if PitchBend = 0
PitchBend = 1
ColorPad 10, 1
else
PitchBend = 0
ColorPad 10, 0
endif
elseif LastPad = 11
if Note = 0
Note = 1
ColorPad 11, 1
else
Note = 0
ColorPad 11, 0
endif
elseif LastPad = 12
if Bump39 = 0
Bump39 = 1
ColorPad 12, 1
else
Bump39 = 0
ColorPad 12, 0
endif
elseif LastPad = 13
if Shake69 = 0
Shake69 = 1
ColorPad 13, 1
else
Shake69 = 0
ColorPad 13, 0
endif
// elseif LastPad = 14
elseif LastPad = 15
if PassThrough = 0
PassThrough = 1
LabelPad 15, {Passthrough On}
ColorPad 15, 1
else
PassThrough = 0
LabelPad 15, {Passthrough Off}
ColorPad 15, 0
endif
endif
@End
@OnMidiInput
if MidiCommand = 0x80
if Bump39
if MidiByte2 = 39
Log {Bump Note 39}
if PassThrough
SendMidiThru
endif
endif
elseif Shake69
if MidiByte2 = 69
Log {Shake Note 69}
if PassThrough
SendMidiThru
endif
endif
elseif Note
Log {Note Off = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
if PassThrough
SendMidiThru
endif
endif
endif
if MidiCommand = 0x90
if Note
if Bump39
if MidiByte2 = 39
Log {Bump Note 39}
if PassThrough
SendMidiThru
endif
endif
elseif Shake69
if MidiByte2 = 69
Log {Shake Note 69}
if PassThrough
SendMidiThru
endif
endif
else
Log {Note On = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
if PassThrough
SendMidiThru
endif
endif
endif
endif
if MidiCommand = 0xA0
if PolyPressure
Log {Channel = }, MidiChannel
Log {PolyPressure = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if MidiCommand = 0xB0
if Tilt1
if MidiByte2 = 1
Log {Tilt_CC1 = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if Shake2
if MidiByte2 = 2
Log {Shake_CC2 = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if Radiate74
if MidiByte2 = 74
Log {Radiate_CC74 = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if Spin112
if MidiByte2 = 112
Log {Spin_CC112 = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if Move113
if MidiByte2 = 113
Log {Move_CC113 = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
endif
if MidiCommand = 0xC0
if PC
Log {Program Change = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if MidiCommand = 0xD0
if ChannelPressure
Log {ChannelPressure = }, MidiChannel, { }, MidiByte2, { }, MidiByte3
endif
endif
if MidiCommand = 0xE0
if PitchBend
Log {Pitch Bend = }, MidiChannel, { }, MidiByte2, { }, MidiByte3, { }, MidiByte2+(128*MidiByte3)
endif
endif
// Log MidiByte1, {, }, MidiByte2, {, }, MidiByte3
@End
``
Hi Wim,
Thanks for asking for clarification, yes I didn't express it clearly enough. As you will have seen Krupa was kind enough to take a stab at this and what he has come up with is pretty cool.
What I really want is for Objeq to be able to play pitches from sequencers. Eg, I would like to use an impulse, put objeq on that and make a sequencer 'play' the pitch of Objeq according to the scale etc it is sending out.
Of course you can always just sample any sound, processed by objeq and tuned by ear, into a sampler and play that via keyboard but it is a less elegant and a slower solution than what I'm asking for. As Objeq has no midi note in I guess there needs to be a way for the mozaic script to convert midi notes from a sequencer to pitch bend messages. And for the pads in Mozaic to be played by note messages?
Yeah, 'turning off' is maybe more complicated than it sounds.
I think a few of the other things you mentioned like pitch bend values have been discussed by other commenters and maybe this is all more complicated than I imagined.
Cheers!
Gav
mozaic doesn't have access to the phone's gyros, has it? But drambo has a gyro module that could send out MIDI?
Mozaic has access to the gyros. See motionpitch, motionroll and motionyaw in the docs
Oh cool you're right.
Oh man I wanted to write something to use the XY pad to morph between 4 different values,but io and behold,that already exists as a function too
Says in the manual that AU parameters are 32bit/way more precise than midi, is that true for all AU parameters that all the plugins expose? That would come in very handy
Generally, yes, AU parameters can be more precise, however it depends on how the plugin developer has implemented them. They can be as coarse as two values, say for an on/off switch, or anywhere up to the internal resolution of the plugin, which could be anything.
Then there's the communication between plugins which is always via MIDI as far as I know. So that means no matter high the resolution of the AU parameter, talking from a MIDI plugin to an app is going to be limited to 8-bit (128 values), or 14-bit (16,383 values) if the host and plugin support it.
But there is no way to get the values from Mozaic to other AUs except via MIDI as far as I know even though internally Mozaic has better resolution…sending pitchbend gives better granularity since it is 14-bit
Dear programmer wizards, I got a question (before I start learning programming mozaic..):
Is ist possible (with mozaic) to define momentary buttons which send 8 CC's on push and 1 CC on release?
I'd like to use mosaik to trigger snapshots of the FX on my SP 404 mk2. There are 6 FX controls, 1 FX select and one FX on/off in the midi implementation (total of 8 CC's). These CC's should be sent when pressing a button and only the FX on/off should be sent on release. I tried to implement it with the Midi Designer Pro 2 app, but it's not working well for me (see picture). I got it working with my Hotone Ampero Control foot pedal, but it has only 4 buttons and preset swapping is not well implementet imho.
So can this be done? And does something similar allready exist? (had a look on pathstorage.com but did not find any..)
@Samplix, yes, what you describe can be done with Mozaic. I believe it may be able to be done with Loopy Pro without programming if you own Loopy Pro.
Can you link to the MIDI implementation chart that you're referencing? The SP 404 MKII chart that I found on a quick search doesn't have any reference to the FX cc's you mention.
@wim thank you for your input!
midi implementation is on pages 137/127.
I do have loopy pro but I switched to TouchOSC in the meantime and it works fine so far! I don’t think that mosaic nore loopy pro is the way to go in my case..
That's great. While I love to program, I always think it's best to avoid scripting where practical.
Hi
Is it possible via Mozaic script to achieve trills or tremolo on instruments like Santoor or Hammered Dulcimer? I could not find any virtual instrument which can do this. See this video to understand the trill articulation I am referring -
Script Logic would be as follows
When Note On and a particular CC message:
When Note On and NOT that particular CC message:
Also, it will be great if I can have an interface to change the number of split notes within one second.
Say I need to change the number of split notes from 10 to 15 for faster trills.
I will greatly appreciate if someone can create this simple script as it would be very useful for certain types of instruments.
May be @McD or @wim or @_ki ??..
No commitment yet... but it's a very intriguing little task. I would call this script a "Hammered Dulcimer" or "Mallet Percussion" and built/test the functionality in phases:
PHASE 1 - the "roll" (I'm a percussionist by training and repeated notes to create sustain is called a "roll".
Knobs for rate and velocity percentage exposed.
PHASE 2 - optional "rolls"
I would add a screen based PAD in the Mosaic GUI labeled "Roll" to turn on the above behavior.
Later pressing this PAD could be linked to an input CC (selectable by knob). CC=1 is the standard "Mod Wheel" input and it could vary repeat rate since is sends 0-127 values. Any slider control could implement this rate variation but then we'd have to "standardize" on a MIDI controller, I suspect.
PHASE 3 - "Trills" - in the western keyboard notation there are several scale-based trills.
On Note one play:
1/2 step or note above the incoming note in scale at reduced velocity
1/2 step or note below the incoming note at reduced velocity
Incoming Note at full velocity
Active with a PAD labeled by trill type "whole tone" or "half step" and add CC optional activation.
Knob to select the "scale".
PHASE 4 - "slide" grace notes
Similar to trills but just a 1/2 step or scale step slide up to the incoming notes. On a keyboard this
is typically a black note to white note "slide" to create bluesy/jazzy affectations not usually present in the
classical style where two fingers are used for all grace notes conventionally. Even a poor keyboardist can
learn to slide into notes to sound cool.
Again a pad to activate with optional CC.
Are there additional techniques worth adding to the design? As a mallet player (vibes, marimba, etc) I would think of:
I don’t think that’s a trill. Trills and mordents only involve 2 pitches. A turn will use 3 pitches, but not in the order described above.
https://www.musictheoryacademy.com/how-to-read-sheet-music/ornamentation/
Thanks.
Good catch on the nomenclature for these ornamentations. It would be nice to create code for a nice collection. The trick of course is that the CC to apply one has to precede the Note On event which is the duty of the performer.
I was trying to label from memory. I did Google the hammering technique and there’s little concensus given that the flat beds of strings span many cultures. There’s a lot of folk innovation on the hammer materials.
I just saw this UI in a Kontakt instrument from precisionsoundware. Hope it will help to build the UI in Mozaic.
Interesting... I wish I had Kontakt to hear how the knobs change the results. I wonder what the "arps" are like... are they traditional Indian broken chords in some selected scale?
I DM'ed you my first tae that implements the tremolo effect for any instrument... I have tested it on Clav's,
guitars (acoustic mostly), world instruments like Japanese Koto's, etc.
I haven't connected the knobs yet but it allows settings for repeat rate (notes per second), the velocity (volume) of the secondary notes relative to the primary note... then I use some randomization to vary
velocity and repeat note spacing to humanize the results. I also tried throwing in some random adjacent 1/2 step notes into the mix because a lot of hammered dulcimer players can accidentally hit an adjacent string.
I haven't created a decelerate option yet but it sounds interesting. I also haven't made the volume fall off over time... my tremolo makes a great mandolin effect. If you play a short note you get the typical short ring of a single note but if you hold the note it starts the repeated picking style of the mandolin soloist seeking some sustain.
I think this will be doable and I can keep adding features. As I am prone to do until the script begins to scare me when I loose some big block of updated code in an app crash.
I also do not have that Kontakt app and hence can not try.
However, I have tested your code. Here is the screen capture (with sound):
After I played with velocity range and sensitivity in the VelocityKeyboard app - It came out really well in the third SynthMaster sound I tried. More humanization will be needed but you can gradually attempt that.
At the first sound, something weird happened. Also, I have observed that if the Pitch Bend Range is anything other than zero either in VKB or in Synth the script crashes after a few seconds of playing. Maybe we can skip achieving glided play technique at this moment, pitch bending is difficult to tame.
I posted here because I wanted to let the members know the good work you are doing. In future I will DM you my testing results.