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
Would love to be able to play cc values and have attack/hold/decay on them. Even velocity ranges for cc.
Many thanks for the suggestions. Lots of avenues to go at. I’m ultimately most interested in Mozaic. I was imagining a modular app when I was looking for appropriate apps, the kind of thing @brambos rejected for the script-based version of Mozaic. Look forward to it.
Will Mozaic be able to display faders too or only knobs? I’d really like to have a surface controller like TouchOSC but in AU format.
One of the available layouts has 10 vertical sliders on it.
There's a brilliant new LFO AUv3 coming soon to apeMatrix and I'm using it constantly in every host now. Has 8 LFOs with multi AU out ports with apeSoft's great LFO options which have random, long cycle times and also each pair of LFOs has an X/Y pad which can perform the LFOs.
If you buy apeMatrix you'll be able to use it in AUM too (not sure when the beta is finished though)
Are layouts fully customizable?
Looking forward to this, I saw the sequencer you posted on Twitter, looks great. So glad you went with multiple layout options.
Nope, they’re as fixed as a hardware midi controller.
Is there already a layout with a bit of everything like that?
If not yet, could you consider making one? That could be very useful for more than 80 % users I suppose
One thing that's a bit confusing is that the display isn't accurate at the lowest setting. It says the lowest value is 0.01Hz, which would be 100 seconds or 1.66666 minutes. However, there's a bit of play at the bottom of the knob and you can move the knob for a ways while it still says 0.01Hz.
If you move the knob down from a faster rate and stop as soon as you see 0.01Hz you will get the expected rate. But as @CracklePot noted, the lowest value is actually around 0.00318Hz, which is around 315 seconds.
It is, in fact possible to get values in between those, but there's no way to accurately replicate that as the display only shows 0.01Hz. Perhaps this could be fixed?
That said, the "problem" people have with Rozeta LFO is in the tempo sync'ed option. Here the slowest value is 8 bars; at 120 bpm that's 16 seconds. It's very easy to want a tempo synced LFO at 16 or 32 bars as that would likely correspond to a verse or chorus section.
@brambos One request for Mozaic: please have a way for the LFO to only send out a change in value. A square wave is really only two values, but Rozeta LFO sends out a constant stream of the same value. It's common to use control signals for multiple functions and a square wave is useful as a trigger, but when the same value is sent repeatedly it causes multiple triggers. Also, with super-slow LFOs we don't need constant streams of the same value. Thanks!
Sure, just check if the new value is different from the last and don’t send it out if it’s the same. The beauty of a script concept is that you can change anything to fit your specific use case.
@aplourde
Here's an ultra-slow LFO which checks if the new value differs from the last one:
And here's a modified one which constantly cross-fades between MIDI channel 1 and MIDI channel 2 (using CC7 for volume):
I will add both to the Mozaic presets as example scripts
loverly!
@brambos that first slow LFO example had me confused until I realised that you were re-using var0 in the OnTimer section and it had no relation to its value in OnLoad.
I’m going to find the variable names a pain to remember what value goes where. Like programming registers in assembly. Thought I had left that way of working long behind!
I'll consider an elegant mechanism for user-defined variable names at a later stage. For now I decided against it, to avoid having to force users to declare variables and having to consider variable scope - which is probably a lot more painful for a lot more people than having to remember what went into var0 and what went into var99.
Something is always going to be painful, and for me conceptual accessibility was highest priority. Understanding scope is not easy for beginners.
Yeah I understand. My team maintain a DSL at work, mainly JavaScript and custom HTML, so I see the pain that non developers go through with some of these concepts.
I had assumed that all the variables were global but I guess, from our previous discussion as well, that you do have bigger plans for Mozaic.
Hope you don't mind me picking up on aspects of the language that I am curious about..?
No, not at all. Just know that very few things were just arbitrarily chosen; I have thought long and hard about the tiniest of details. But I agree the variable naming was thing I decided to compromise on for now.
All variables are currently global - that's what keeps it simple - but if you want to use user-defined names you'll have to declare them somewhere. Doing that upfront (at the top of the script) requires thinking ahead. I remember learning Pascal as a kid and it was one of the things that I really had to get used to. Declaring them inside loops and events makes their scope and life-cycle ambiguous. It's a tradeoff.
I could consider introducing alias names or something, where you define an alias for a predefined global for convenience. That would make it an optional mechanism which is backwards compatible with the model I have built now.
Oh god @brambos I wouldn't for a minute suggest that you are making arbitrary decisions!
No, no it was just me offering my perspective. I find that people have a hard time with naming generally and user-defined names doesn't fix this, but it can lead to much more understandable code. Also, it can do the opposite and that was my niggle with the first example, exacerbated by re-using the variable for a different purpose (I think?)
Fully agree about scope. Have seen experienced developers struggle with getting it right in an unfamiliar language.
I understand your idea about aliasing variables but language design is tricky, as you know, and little, seemingly innocent changes at the start can cause major difficulties as the language develops. I always try to err on the side of simplicity.
Me too.
And language design is indeed tricky. Apple are now at their 4th attempt to get Swift right
Awesome! I can actually figure out what's going on in these.
I do, however, fully support the idea of aliases for the variables. That would certainly help in the immediate readability, especially in more complex scripts.
Feel free to post more examples, especially if you're working down the list of tool ideas that @ocelot provided; it would be great to understand the capabilities!
What is Mozaic?
It's a roll-your-own AUv3 MIDI Plugin Plugin I'm making. Should be ready for beta soon.
nice can’t wait!
@Antkn33 : a midi macro language AUv3 Bram Bos is working on.
Does anyone know how to slow down the LFO to like 4 /8 bars ? I put the rate on a low setting and it’s still too fast.
Which LFO are you using? Rozeta LFOs or the LFO functions in Mozaic?
Rozetta lfo
What is Mozaic ?
See farther up on this forum page. Mozaic is a MIDI scripting language created by Bram Bos, the author of Rozeta. It includes a nice user interface (GUI), and there are many scripts you can download from Patchstorage. Using Mozaic, you can probably go extremely slow.
mLFO does this 127,032 beats (31,758.00 bars). Is that slow enough?
Apologies in advance if someone’s already mentioned this - I’ve skimmed most of the thread.
One possible problem with using any MIDI LFO is the steppiness due to MIDI only having 128 steps between min and max. This will become more obvious at really slow rates.
NB I’m making an assumption here, that MiRack internally has smoother LFO control. I’m reasonably confident this is the case, but happy to be corrected if not.
One possible way round this would be to use MiRack multi in/outs in effects slots in AUM, with a stereo VCA for each channel (eg BogAudio Mix2) and an LFO per VCA. You might need a scaler/offset module for each of you don’t want to go for full range. Pipe the inputs to the VCAs and set the LFOs to control level, with the outputs going back to the same channels as the inputs.
A plus would be that there are a couple of really slow LFOs in MiRack, should that be needed.
An example setup with two channels. In this case you don’t really need the scaler modules as the LFOs have scaler and offset built in, but with some other LFOs they might be needed: