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
I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.
For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.
Ok. There are more lines of code needed for many of the things I do this way, but if that’s your design outlook then I had better not buck it.
@brambos Why do you think it's a bug that layouts (aka layouts[0]) is assigned but layouts[2] is unassigned?
Because I intended 'layouts' as a whole (all potentially 1000 cells) to be assigned as soon as the name 'layouts' becomes valid.
Unassigned was supposed to test if a variable with that name already exists, and not if any of its cells has invalid contents.
I see. un/assigned wasn't supposed to work with an array index.
Why? I'm genuinely interested in learning how Unassigned makes this shorter/more robust. As I said, I am probably going to formalize the current behavior, but I'd like to know how it's currently being used/perceived.
Testing for Unassigned is not different or shorter than testing for any other value?
Mostly in smaller ways and for perceived (though it sounds like not actual) memory efficiency.
Let’s say I have an array that I’m going to dump note on messages into, one after the other, until I flush them out and start over by copying an empty array into it. Maybe I’m only going to have at most a dozen. So I fill up a whole array with -1. It seems wasteful. Or maybe I don’t know for sure that -1 is safe. I could point out a few other examples, but they’re trivial code savings, and not worth quibbling about.
It’s no big deal. It just seems conceptually wrong and inconsistent the way you’ve designed it. There is a difference between the number zero and nothing. A variable that has no value assigned to it is invalid. A cell within an array that has no value assigned to it is a zero. You don’t see the inconsistency in that? I don’t like it when I get back something when I didn’t put there, and I sure didn’t put a zero there. Also, since the first time I learned about Arrays (possibly before you were in elementary school ), I’ve always thought of an array as a collection of variables, not as a variable busted up into little bits. To me a cell is a variable. But, I’m arguing semantics, not anything of practical import.
As long as I know that’s how it works, I’m fine with it. Old dogs can learn new tricks.
[edit ...] just read more carefully - that you may formalize that behavior. Sorry, didn’t read that at first. Please don’t change it on my behalf. And sorry if I sound argumentative. It’s past 3:00am and I should not be conversing with anyone in my present state!
This reminds me of the confusion I had (long time ago) with testing if a string existed (empty or not) in Pascal: you should use if mystr == NULL, in stead of if mystr == "".
The most confusing case would be:
arr[2] = 1
but:
Unassigned arr => true (currently)
Based on this I think it's a bug.
The language should not allow Unassigned[*] and Unassigned should return false if the variable name has been used in any assignment.
Hi
I post this bug again
Bug mozaic
Recently when i load one of the patch of mozaic in cubasis and touch the cubasis virtual keyboard, cubasis crashes. And when I restart cubasis again , this problem is fixed . There is no this problem with other midi plugins like Audio veek or fuge or atom pianoroll .
There was no this problem before with 1.0.3 version. I think this problem issues 1.0.5 or later .
IPad Air 2
Cubasis 2.8
Mozaic 1.0.8
Ios 12.1.1
Is this with all scripts? I can’t reproduce this on my iPads and I’ve done some intensive testing in Cubasis the other day.
Help
I need to write script for when i play note or notes on keyboard, mozaic holds them until I play another note or notes, and if new note or notes is / are same previous note or notes mozaic hold them again .
Hope something like this show up!!
It is complicated to explain.
I did the test again to see where this happens , Because it does not happen in any situation , I noticed this myself recently too .
If in one cubasis project that there is any midi plugin mozaic track , and we select one Mozaic Script for first time, there is no this problem.
But if :
Step by step:
1, load cubasis and create new project
2, create one midi track
3, select one mozaic patch in cubasis midi effect. It’s ok .
4, create another midi track ( second track ).
5, when I select mozaic in cubasis midi effect, shows me this text , that i add screen shot in this post about it .
6, but after cubasis midi effect warning , cubasis open mozaic GUI .but in cubasis midi plugin dashboard is empty , i add second screen shot about it . And I did not notice this before .
7, anyway I select one mozaic patch and active cubasis virtual midi keyboard.
Result: when I touch one of key on virtual keyboard, cubasis is crashes.
8, close cubasis of ipad screen
9, Reload cubasis again ,
Result: in this time mozaic is appears in cubasis midi effect dashboard.and works ok .
There is no this bug with other plugins . That's why I attributed this problem to mozaic.
That’s what I was expecting but a few days ago I was getting random floating point values if I accessed something like layout[8] in a SetKnobLabel call. I changed all my array initializations to
Which just feels wrong but worked. I’m guessing the second line is an element-by-element assignment rather than reassigning the layout variable to reference a new array?
Correct
Hi @pejman,
I started to work on this, thinking it would be a pretty straightforward modification. I’ve since discovered that it’s a bigger challenge than I thought. The Chordulator is simple because it only needs to track one note. But to act on chords requires detecting what is actually a chord based on how close together their note-on messages happen. That’s easy enough.
But then the notes would be scrambled up into different voicings, timing, and probability. In the meantime, the original notes would be released at some point. The relative timing for the release of the notes would be different. Or a different chord might have been triggered, possibly overlapping timing and sharing some of the same notes. This is only one aspect of where things get complicated. It becomes a nightmare trying to track what is going on to assure there are no stuck notes.
Sorry, I don’t think I’m up for the challenge. Maybe I’ll have a stroke of brilliance and understand how it can be done, but right now I don’t see much chance of success and am putting the idea aside.
Sorry - I know that’s not what you were hoping to hear.
Thanks for informing. No problem. I myself guessed that this is very difficult.
Because you had to change things from the base.
But I now have almost the same thing I wanted , of course, thanks to the help of brambos .
But i am waiting for new perfect patches.
Thanks.
Hi brambos
Today I discovered the problem .
I have already created patches in mozaic through cubasis host .but don’t save them to mozaic, I have saved many patches in cubasis midi effect presets only , Because I wanted to write them as experiments and save them temporarily in cubasis midi effect preset.
and i didn’t save within itself the mozaic presets . And use these presets in some of cubasis projects, but every time that I wanted add another tracks with mozaic plugin to the same project, issue this problem, even SOMETIMES in new cubasis projects , like the project I tested was carefully tested for you yesterday .
Anyway , We conclude that , if we create mozaic patches in cubasis and save them only in cubasis midi effect presets, and not in mozaic presets, and use them in cubasis midi tracks, every time that open cubasis and open same project and add new midi track with mozaic ,happen this bug , even some times if we want use mozaic in new cubasis projects in second track, like exactly step by step report bug in my previous post , and sometimes doesn’t happen.
Is this still a mozaic bug or cubasis bug or pejman bug ?
Wizards! The lot of you! 🧙♂️ 🧙♂️ 🧙♂️
Greetings!
Here is a first version of a mozaic script i wrote for myself to use minilab mkII with relative knobs. I've mapped controller's knobs to send values on cc# 11-26 on channels 10-16.
https://patchstorage.com/relativeccv0-1/
Not sure if it will be comfortable to use because it require custom controller maps. But for me it works as expected. Finally i can use relative knobs with iOS.
Here is the description of a script. Sorry for poor english .
"
( Tested only in AUM )
This script receives relative cc values from midi controller and outputs them as absolute.
Input channels must be from 10 to 16
and cc # must be from 11 to 26
Script stores last values so when you load up session there will be no jumping values.
Optionally there are three pads you can use with these functions :
1) save - store default values for relative cc #11-26 on channels 10-16
2) load - load stored default values when pressed.
3) autoload - if this button is lit – script will autoload stored default values when session is loaded
Example of midi routing setup is on a screenshot
"
Didn't had time yet to do a heavy testing with all channels. perhaps there are bugs. but i haven't noticed any yet.
Hi @brambos, I’m figuring it’s probably not possible for technical reasons, but if it were, being able to name the AU parameters for knobs would be super helpful. Being able to hide selected ones would be too.
@brambos; Adding to the feature requests; one thing I'd really like is the notion of a global timestamp, like CurrentTimeMillis in Java.
I want to be able to do stuff in OnMidiNoteOn like
SetNoteState 0, note, CurrentTimeMillis
and then later save note duration on OnMidiNoteOff with something like
duration = CurrentTimeMillis - (GetNoteState 0, note)
This would be awesome for things like unquantized looping and similar stuff.
I realize that this can be "hacked" using my own timers or high PPQN, but that doesn't feel right from a CPU usage perspective and I also have other uses for the Mozaic timer that it's better suited for (like measuring pad hold times using -ki's script).
Man I get a headache reading about all you coders!😅🤓🎹🤪❤️❤️❤️❤️☝️
Loving it though❤️😇🤓
Sorry, could be my lack of programming training, but I don’t understand the advantage of this. You would still have to run a loop to check the time constantly to do things, so it seems much same as using the timer. Something like the below seems like it would be just as good, and as many timers as you like could be used.
Why doesn’t this script work?
This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.
The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.
Works in Audiobus at 127. Doesn’t work in AUM, just as you said. Maybe too many notes at once for AUM to handle?
If you put a minuscule pause after each note does it work?
I tried 1ms and it didnt work. I’ll try something higher.
EDIT: even a pause of 1000ms doesn’t help, using the delay parameter in the SendMIDINoteOff command. Is there another way to implement a pause?
@OnShiftDown
for nn = 0 to 127
SendMIDINoteOff 0, nn, 0, nn
endfor
@End
Should work