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
Yeah, that did the trick! The delay parameter works differently than I thought.
Edit: wait, not exactly. It still skipped about half the notes. I’ll try doubling the delay.
There is also an All Notes Off message. I recall this was discussed before.
https://www.midi.org/specifications-old/item/table-1-summary-of-midi-message
😦...good to know! 😆
Not all synths support it, so a brute-force method isn’t a bad thing to have as a backup.
It’s interesting that AudioBus could handle all the simultaneous Note Off messages without a hiccup and AUM couldn’t.
Try this instead:
This will send the midi “all notes off” message to all channels. Obviously, if you only want to kill all the notes on only one channel, you can skip the for loop and specify the channel directly in place of x.
Not really - if you have a ”global” accessible timestamp you don’t need a loop at all to store note timings, you just grab the timer value when you need it. Your @OnTimer triggers every 1ms, times number of instances of Mozaic, which will have CPU/battery consequences.
My code above only runs in for example @OnMidiNoteOn, no looping, no CPU impact whatsoever.
I have very little experience with realtime ”sample-accurate” programming so maybe the 1ms @OnTimer trigger has no or very little impact, in that case I’ll be happy to use your code as a workaround. But it doesn’t feel right to ”waste” CPU cycles when it’s not necessary, especially in ”multi-tenant” environments like AUv3 hosts where every plugin need to be as well-behaved as possible to allow for the others to work fine.
(Following this discussion with interest)
So I see how you could use the milliseconds timestamp for capturing events OnMidiInput, but what event would you then use for playing back the loop with the correct timing?
I suppose you could set the timer between each following event with a different interval and only let it trigger once. Or would you quantize the input and use a fixed-interval timer for playback?
I see. Yes, on further thought, I can think of several ways this would be useful. I was only seeing it from the perspective of triggering events, not measuring their duration. Measuring round-trip midi latency, calculating offsets and real-time adjusting for hardware timing drift, calculating and adjusting tempo independent of host tempo, providing feedback about timing accuracy of one’s playing, building groove templates from midi input...
Yep. I like it!
I am looking into this, but I still haven’t been able to reproduce this.
Presets saved in Cubasis are identical to presets saved in a state or in the plugin filesystem, so that shouldn’t be the cause - unless it’s a bug in Cubasis. But everything is working as expected on my end.
I have solved the code-editor-memory-hogging problem! Typical memory footprint for the plugin is now <12 mb. per instance, regardless of the script’s length.
Fontsize preferences are also preserved now.
I hope you also solved the disappearing textcursor in the editor when you've reached the bottom of the screen (happens with IOS keyboard or bluetooth keyboard)?
That one is harder than you might expect because text/keyboard components inside plugins behave differently from standalone apps. So the standard “scroll into view” functionality doesn’t work. Probably because they have no clue where on the screen the cursor is and where it is relative to the keyboard.
I don't need events, someone really clever implemented things like SendMiniNoteOn with optional delay.
So let's imagine (purely hypotetically of course...) that you want to build an OP-Z-like sequencer that allows for "exact" live recording. The OnMetroPulse could trigger on every step (say, 1/16th) and keep track of the step being sequenced as well as the CurrentTimeMillis of the pulse. When OnMidiNote arrives, I can then keep track of the delay with which I want to trigger the note by just measuring elapsed time since last pulse. Then measuring the elapsed time since note on in the OnMidiNoteOff I can also replay the note exactly as played. Very, very nice imo
Some really awesome examples there that I'd never thought of!
Thank you, Bram, I understand. Although this disappearing cursor also happens in Mozaic standalone... (f.e. the Notes editor in AUM works as expected).
One other thing: could you please make the User Patches preset-list order case INsensitve? Because now it's case sensitive and that's confusing (infinity-0.4 comes after Velocity MIDI Echo!).
But the standalone container is a simple AU host which loads the plugin. So it just looks like a standalone but it’s actually the plugin running
Got it! ( )
Anyone know if it's possible to code a portamento note slider script that adds it for synths that don't? Very useful for drum synths like ruismaker noir and synth drum 808 slides!
That should be possible as long as the apps in question respond to pitch bend messages. Just detect note overlap and send pitch bend between the two notes over the range of the overlap.
I haven’t tested whether noir or synth drum respond to pitch bend though.
[edit] Looks like they don’t. So no-go on those two at least.
Thanks for checking out Wim. Any chance of adding that to Noir @brambos ?
Are the following scenarios possible in Mozaic?
1) Filter incoming MIDI and only pass through the lowest note? (e.g. bass note generator from chord)
2) An Arpeggiator which can play multiple notes per step. So let's say there are 4 incoming MIDI notes, N1 to N4 (from low to high) ... so on each arp measure we'll play a selection of those notes e.g.
Measure 1: N1
Measure 2: N2 + N4
Measure 3: N1 + N2 + N3
Measure 4: N4
Ideally this would be set using a grid editor of some kind (e.g. as in StepPolyArp app) but maybe in a future version of Mozaic.
Thanks in advance
Richard
Yes, but there would need to be some kind of timing threshold to determine whether two notes should be considered simultaneous or not.
Why when SPA already does this?
Because SPA doesn’t have a Random function ... you can’t ask it to select randomly from the notes held down to inject a bit of variation into a Bassline for example.
Also because I have some other similar arpeggiator ideas I’d like to try out.
Did I read somewhere that a fresh install comes with more scripts / presets ?
No need to reinstall. Simply updating to the latest version should always bring the up-to-date preset collection.
Rad! Ty
@brambos
Do you think midi clock out (with dividers, +/- delay) is achievable in Mozaic framework?
Would be great to be able to start/stop external seqs
In that case, mechanically, no problem. Interface-wise it I can’t really picture it.
Indeed, the algorithm doesn’t sound too difficult, but we’d have to figure out how to ‘get the notes in’.
Haven’t tried yet, but it sounds doable. The only issue I see is that perhaps some hosts may filter out clock messages in their internal MIDI streams.
Hi again wim
But one question. Can you create one patch with only ( rand time ) and ( rand vel ) and ( probability ) ? This patch can solve my problem . I have one patch with rand time and rand velocity with brambos help , and then decide to add probability to it . but I cannot add probability to this patch . Perhaps its structure is such that it can not be easily added to this option