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
Ah. I see. When is the allocation done? Would it be possible to have size declaration in the language, like
dim patterns(8*64*6)
and allocate based on that during OnLoad? (Mainly asking from a curiosity perspective, I fully respect if you don’t want to bloat Mozaic)However...would be neat to have the ”arbitrary” 1000 upped to 1024 to have the max array size a power of two to support many sequencer use cases.
Just catching up on some of these amazing scripts.
A huge thanks to @recccp for his stop recording script that has made AUM so dreamy to record with. https://www.dropbox.com/s/1q816e5ql4jdwlt/StopRec.mozaic?dl=0
@Bryan Metroplex is insane!
Plus it really helped me understand how to make some things I was struggling to do myself.
Please help
How can i use midi cc,s for external control each of these 4 knobs? For example cc13 for knob 1 cc14 knob 2 cc15 knob 3 cc16 knob 4
The best way IMO is to map the cc's to the AU parameters for those knobs in the host. This is the most flexible and requires no code at all. But if you really want to do it that way, I'll post some code.
Hi wim
How can i map cc’s to AU parameters ? I use mozaic in cubasis app .
Although I'm very interested in knowing those codes .To raise my knowledge , if possible please.
Hi @pejman, I’m pretty sure there must be a way to do that in Cubasis, but I don’t know it well enough to say how. Maybe someone else can answer that.
In the meantime, here’s some added code that should do what you want.
@pejman, here’s one that does the same thing but in a less abstract way. This one is probably easier to understand and modify.
Very very thanks. They were , very informative ,( both codes ) .Each time I learn something new, I become more hopeful , that one day I can make my own patches ,with the help of you all .
Although some of my ideas, seem to be very difficult .
Do you mean midi learn , that the AUM app has it ? I haven’t AUM app . So I'm not exactly familiar with how it works .There is no midi learn option in cubasis for triggers to AU or plugins .
Anyway if anyone knows anything about this please help .
Thanks.
Yes, I was speaking of AUM, AudioBus, and other apps where you can midi-learn any cc to AU parameters. I’m just not familiar enough with Cubasis to know if this is possible or not. It should be though.
When creating the Flow sequencer script (https://forum.audiob.us/discussion/34063/flow-multi-track-pattern-midi-sequencer-looper-for-mozaic) I compiled a little wish-list for Mozaic. Some stuff are probably specific to my use case but I think there are some things that would make Mozaic even greater without adding bloat.
First of all I want to say that I really enjoy the constraints in Mozaic with predefined layouts. It helps staying focused and fuels creativity so custom views are NOT on my list.
Here's my wishes to Santa Bram @brambos :
I'm curious about this one. I combine description with value in label knobs similar to the example below, and it works OK for me. I think I must not be understanding the request.
+1
This is a good one.
Is this something different than the existing
LabelKnobs {Hello }, {world!}
?I'd love to see predefined blocks of controls that could be combined on a page. Something like a square of 4 knobs, square of 4 pads, X-Y pad by itself, square of two faders, Text Box square, Blank square ... that one could combine 4 of on a page in any way they like. I can envision a couple of simple functions to define a module by type and the numbers of the controls shown on it, then a layout and the modules used on it. I think this would respect the simplicity and healthy design constraints, while doing a lot to make layouts more practical.
I wanted a millisecond-resolution time to make a totally unquantized midi looper (and I didn't want to set a per-millisecond timer!)
I tried to use a combination of a once-per-second timer that would increment a "seconds" count, and a ramp LFO with 1hz frequency and 0-999 range. I would reset the LFO in the timer, and then in the MIDI event handler I would look at the LFO value as the milliseconds timer.
I couldn't get it working stable unfortunately.
These are ALL great feature requests. For debugging purposes, I have a few more:
The manual describes the Log as
“ ... a great tool for passing runtime information about your script to the user or for checking values
while debugging your script.”
but the limits of the Log inhibit that.
I just finished a substantial Mozaic development consisting of 7 scripts which allow for triggering of output MIDI “phrases” based on input MIDI “triggers”. As soon as I’ve stress-tested it, I’ll provide the scripts and a “manual” for its use. It was during the development that I determined the need for my additional features.
Sounds interesting! Sort of like some kind of arranger keyboard or auto accompanying script?
I just uploaded a new script on patchstorage.com called CC Processor. This script provides four independent CC processors, each with control over CC level and ballistics in the style of West Coast control voltage processors made by Buchla, Serge, and others.
The SHIFT key switches between banks, where each bank has controls for two CCs.
Set the CC to be controlled using the CC knob on the left side of the plugin.
The RANGE pads on the far left side set the range of the CC knobs to make dialing in specific CCs easier.
The GAIN knob is an attenuverter; at 12:00 o’clock no CC will pass; fully clockwise the CC will pass at full value with no attenuation and in between, various levels of attenuation are available. Turning counter-clockwise from noon inverts the CC, also with variable attenuation.
The OFFSET knobs add a static offset to the CC level.
RISE and FALL set the rise and fall time of the slew limiter. A slew limiter controls how fast a signal can change. Set fully counter-clockwise, CCs can change rapidly, but as the dials are turned clockwise only slow movements will pass through while rapid changes are blocked.
The LINK SLEW pads control whether the RISE and FALL knobs are linked or can be adjusted independently.
The XY PAD displays the output levels for the two CC being controlled on the current bank.
This script is extensible; if you need to control more than the default four CCs, you can easily add as many banks as you wish by modifying the variable “numBanks” in the code. You will find this variable a few lines down from the top of the code.
Is this like a “pre-announce”? [grin]. Here are the script names and a minimal description:
Newf1_phrases_keys - Accepts a MIDI stream as input from almost any source. It uses MetroPulse to create a time base. Phrases are stored with a trigger number, which is assigned in a few different ways. It creates GLOBALs which I refer to as a “notes” file. The limitation for the number of entries in this notes file then is the limitation of GLOBAL arrays, 999.
Newf2_triggers - also uses MetroPulse for a time base. Input for triggers can also come from almost any MIDI source. It’s data is stored as a pulse number and trigger number. It’s also stored in GLOBALS as a pseudo “triggers” file with a max of 999.
Newf3_commands - meshes “notes” and “triggers” to create a “commands” file in GLOBALs (limited to 999), which contains the data needed to send a MIDI command (CC, note on, note off) at a MetroPulse point in time.
Newf4_player - uses a MetroPulse time base. When the pulse time for a command matches the MetroPulse, it translates the commands data to a real MIDI command and sends it to MIDI out, which could be any app that accepts MIDI input.
Newf5_CCs_randomizer - has three functions: 1) add data to the “notes” file for a single CC event, 2) add data to “notes” for a “range” CC, which is translated to multiple CC events, one per pulse, for a range of values over a period of time, and 3) create a phrase of random MIDI notes/velocities/lengths and add them as a phrase to the “notes” file.
Newf6_delete_by_trig - will delete all “notes” data for a specific trigger number, or deletes all “triggers” data for a specific trigger. They’re done separately for flexibility.
Newf7_reports - writes summary information to the Mozaic Log so you can see what’s contained in each of the “files”.
==========
I originally tried to incorporate more functionality into fewer scripts, but when trying to do too much, I was getting CPU >100, and actually had all scripts crash several times. I opted for scripts with more or less dedicated functionality. There are occurrences of a basic “bubble sort” (techie stuff) to make sure events happen in time order. This means I can add stuff to “notes” and “triggers” in any order, and they get sorted into time order in Newf3_commands. Frankly, knowing that bubble sorts can be inefficient, I was pleasantly surprised at how fast they processed.
Any more information about the scripts is premature, but it sure has been interesting!
Incase anyone wanted to give me hints or ideas
https://forum.audiob.us/discussion/34087/need-some-ideas-help-in-re-creating-a-zachteman-monophonic-tape-loop-player#latest
Brilliant! Will have a look later on.
Thanks.
Just uploaded a new script. It’s a basic MIDI recorder/looper, allowing you to record incoming MIDI and replay it (with or without host running). Looping is possible when host is running and can be triggered automatically.
https://patchstorage.com/simple-recorder-looper
Also uploaded an update (2.2) to Chord Magic script, adding:
– Edit option to transpose chord sequences up/down half steps
– Arpeggiator style step types for the pattern sequencer (up/down movement, randomness etc)
– New mode for thru processing: map input to closest chord note
https://patchstorage.com/chord-magic/
@NoonienS Just tried the simple looper works good. Maybe add in overdub that would be cool.
@motmeister Nice and complex script idea
I have some remarks regarding globals:
IIRC the manual stated 100 globals (just looked: its on page 12) and their are accessed with global00 to global99, but you were still right:
Practical tests show that there are actually 1000 globals that can be accessed with global[0] to global[999]
I also have scripts in the works that use globals for plugin script to plugin script communication (ToggleChannels and its Snapshot companion) :
I guarded my data blocks with ‚magic numbers‘ infront of the exchanged structure and a checksum over the data so that the receiver can test if the sender is present and check the data validity.
= The receiver tests for the magic and only reads data if the checksum is valid.
= The sender tests before sending if its magic is still there. If not, it stops sending to no longer interfere and produces a log warning.
= If the checksum is not correct, some other plugin modified values inside the data structure. Thats why the sender also verifies the checksum of the old data block before sending new data.
A sequence id inside the data block allows the receiving plugin to notice changes. The sender increments that number on changes, and the receiver compares it with the last seq id picked up.
Some great little scripts coming out this week plus loads of update thanks to all the kind devs putting in the time and they are free!
Looking forward to the Mozaic update “refresh” so I don’t have to keep closing down the app to install via open in!
I assume the best way if a script gets a update is to delete the old script first and then download install the new update. That’s what I’ve been doing anyhow. It’s a bit long winded compared to say updating an app but for what this brings can live with it.
Currently the best way is if all script writers include the version number in the script name, as mentioned earlier by @_ki (I think). Then you could just download the new script, and later decide to swipe away the old version in Mozaic.
Any way to enforce version number as part of script name on patchstorage.com, @brambos?
The current version of Mozaic has already the REFRESH button - it's on the Load dialog. What can be confusing is that presets/patches are sorted case sensitive, so f.e. flow 1.01 comes after Velocity randomizer.... I hope @brambos will change that to case insensitive sorting...
+1
I can see if iOS allows this. It's an iOS filesystem feature, and we all know how 'advanced' the iOS file system is.
@Brambos: Another thing i wonder about is that downloading a patch from patchstorage adds the patch named in lowercase and with dashes instead of blanks - but if right after downloading i ‚refresh‘ and ‚load‘ that patch and then do a ‚save‘ the orginal name with caps and blanks is presented to save
I just downloaded CC Processor which downloaded as cc-processor-1.0.1.mozaic and was presented as cc-processor-1.0.1 in the list sorted after all the scripts starting with capital letters.
After loading that script, when i press the save button, the name in the Save-Popup is CC Processor 1.0.1.
.
Here another of my Mozaic poweruser tips:
To organize my scripts, i add one of the emojiis in front of the name. These will sort to the end of the presets list. I distinguish between several categories:
Of coarse i have to ‚save‘ each downloaded patch to add the prefix, but i also add a version number if not specified. And then i need to open preset ‚load‘ again to delete the downloaded script with its lower-case letters (and without prefix) to not mix with my own scripts starting the preset list.
All in all, this does not take long and as result the scripts are nicely organized and easy to find - even without user folders.
.
And no - i don‘t know/want to know what these chinese symbols mean. They have an imaginary meaning to me, so please don‘t spoil the real meaning Hope they are not offensive
Hah.. I never noticed that. I save the original name made up by the user inside the project so I can use it for saving and exporting even when the script is loaded from a project/saved state instead of a preset file. I guess that PatchStorage changes the actual filename to be "safe" for all operating systems (e.g. by removing spaces etc.). I don't control what PatchStorage does to the name so there's not much I can do about that.
Hi peblin
Thanks for your nice patch and sharing. I have wrote my feedback in mozaic patch storage .