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
Yea that’s what I thought, since so many synths have different mappings and ways to map, or maybe don’t even have parameters exposed it would be difficult. I did stumble across midi cc randomizer which can be mapped to the values of a synth then randomized.
@Hursoom @Poppadocrock The CC mapping of Mononoke is described in the Mononoke Manual on page 12. It seems all params of left and right side are available. You need to use midi channel 2+ for Mozaic to react.
Developing such a randomization script should be easy with this info. One could even add some interactive smart ranges for the more delicate parameters, or pin a random set and afterwards only add minor modifactions to that base etc... Sorry, i‘m busy scripting something else
@wim do you think I could do it with midi cc randomizer, maybe 2 instances mapped to all parameters in whatever synth then just double tap to randomize.
There’s also EAS Pad CC which is useful for midi learn, and quickly cycles through all the CC#’s
And yea spectrum randomizer, might be useful with a few code changes.
That's what I was trying to say. I think MIDI Randomizer and Scenes would do you well for this. See the link in my post above.
My bad I missed the imbedded link. Thanks buddy.
I just got manual from the site now long after posting this, so I’m going to see about setting that up, and Potentially for sharing my first Mozaic script, if it’s a success. Thanks ya’ll
I just stripped the code out of a bunch of Mozaic patches on Patchstorage.com and posted them to a repository on github:
https://github.com/hsitz/mozaic-patchstorage-scripts-archive2
I think this might make things easier for people who want to simply get a look at the code in any of these projects. In particular, maybe it will be useful as a reference for posters on these forums, who can post a link directly to a project's code, or copy/paste sections of the code from github in posts here. If anyone objects to having their code on the github repository, I will of course take it down.
Also, in most cases I think there's no need to download these projects from Patchstorage at all. If you want, you should be able to copy the code from the github page (maybe click to select 'raw' mode for best results), then paste the text into the code section of a new Mozaic project and save it. Here's an example of a raw file on github: https://raw.githubusercontent.com/hsitz/mozaic-patchstorage-scripts-archive2/main/1-Key-Neo-Soul-v1.0-MIT.mozaic
I haven't checked all the files, but the ones I have checked seem to look fine. The code stripping process I used missed any comments that occurred in the code before the first '@On...' line and any comments after the last '@END', I think some projects had comments and/or license info in those sections, so you may need to refer to the original mozaic project on Patchstorage for that.
[EDIT]Looking a little more, it seems some subset of the files was set by github as having 'binary' type, not text, so they aren't directly viewable on github. I think this may be 10% to 20% or so, not sure. If this project ends up being useful I'll likely debug that problem and try to redo the code-stripping process.
@hes Since PatchStorage offers to share files with different licensing types, i would be cautious to just publish their sources (and there even stripping some parts of the texts !) to another platform. Each of them needs to be acompanied with the original author info and its licensing type.
Otherwise you run into copyright infringement problems.
Mine are mostly shared with „Creative Common Attibution Share Alike 4.0“, which means you need to state the author and also need to mention the license form. There are tons of other license types an author can choose on PatchStorage, each with its own rules.
It’s even more complicated, some of the licenses only allow modifications (for instance stripping of the top comments...) only when referencing the original file/author and license in the modified version.
I think this could mostly be solved I included a link to the patchstorage.com page in each file, rather than the general link to the archive zip. Or maybe just duplicate all the patchstorage project files in folders on github and add in the stripped out code file. But for now I'll just remove from github.
Automatically adding a back-reference link to PatchStorage file and author in the form of
and keeping the top-comments should do it. I don‘t think there are any script on PatchStorage that are using licences that don‘t allow source modification. In my opinion they were published to be used and adapted
Any licensing expert in the house, who knows if there is any PatchStorage licensense-type that wouldn’t allow the above modification ? For all the OpenSource licences i personally know, it would be okay to republish them with that added header.
.
Having all sources on a github would help script devs as one could look up how stuff was done without the need of first downloading/installing the binary presets. That repository would need to be updated from time to time to refresh the changed files.
But another thing to watch out for are the ‚house-rules‘ that the patchstorage site itself implies - perhaps scraping their site and republishing of the scripts on a different site isn‘t allowed. I suspect that‘s why the zipped patchstorage mozaic archives were published on patchstorage itself and not hosted elsewhere.
I just grep‘ed the htmls in the latest scripts archive for the license info and compiled the occurences:
The 20 ‚Custom Licenses‘ need to be inspected one by one.... - that‘s license hell (or a kind of sodoku for lawyers specialized in IT)
.
I didn‘t find any info about patchstorage’s policy regarding copy/sharing the data they provide. There is even a REST API for automated querries. Their API doc also does not list restrictions.
I myself am a former attorney, not a specialist in copyright law, but it certainly is something I have some knowledge of. It's far from clear to me -- even with what I first put up on github -- that it would not fall under the "fair use" exception to copyright infringement. This is a gray area. Yes, it's in many cases clear that some uses are technically in violation of a license, and this was the case with my repository on github. The question of infringement is not decided by that, since "fair use" is a defense to an otherwise valid infringement claim. (See this wikipedia article for a little more info: https://en.wikipedia.org/wiki/Fair_use ). So, I don't know. But I tend not to get involved if people are complaining. So, if it seems fun, I might redo the code-stripping process, and/or republish the whole Collection Archive 2 on github with an added stripped-out code file for each projec.
@hes Sorry if i came around like i was I complaining, that wasn`t my intention. During my work and when reading about software dev, i noticed that there is often a big hazzle about these little details (like license attribution, derived works etc) . For me your intention is quite clear that it‘s meant to support new devs and it’s a good idea. With the post i just wanted to raise awareness of issues you could run into due to the licenses applied to each of them - and in my followup posts i also tried to help solving the issue i noticed.
I myself don‘t bother if top comments were stripped of the scripts i published, it‘s cool that their code is made available more widely - (as long as no-one states that ‚he‘ had writtem them instead )
.
About a year ago, PatchStorage started to force the author to choose a license when uploading or updating a script, and there were sooo many of them in the selection popup. I could have choosen the „Do the fuck you want“ license type but that sounded a bit rude to me, and having seen the CCA licenses everywhere on wikipedia etc, i choose the latest one with the highest version number.
.
Like you, I presume that re-publishing the scripts if fair use, and when attributing them with comments at the top, you should be on the safe side regarding the licenses. And for patchstorage‘s terms, i didn’t find that they claim rights to their ‚collection’ but instead offer an API for easier querry and download.
@wim
This will really be nice. I presently load up Cality just to tune the root note of 'off key' sequences...
Thanks for this gem..
Hi Mozaic experts,
Need your help and expertise here..
I am trying to develop an accompaniment script using Mozaic along with the melody line (which I will play manually).
My workflow is: Midi-Keyboard > My Script (this splits the note ranges into two zones) > Chordulator > StepPolyArp
I want the script to play arp PATTERN-1 (via StepPolyArp) if I hit ONLY one lower Octave note (this is easy and done).
But also I want the script to play an arp PATTERN-2 when I am hitting two different notes an octave apart SIMULTANEOUSLY.
The problem I am facing how do I know whether another note is pressed inside an OnMIDINoteOn event as I do not know which note will come first.
If you think any other workflow will also achieve this - please suggest..
When a note comes in in the desired range save it and check the system time.
When another note comes in the desire ranged save it and check the system time.
If 2 notes come in within some short time interval (compare time1 to time2) you
have a 2 note situation.
Based on the 2 notes identified take some action.
MIDI notes will come in one at at time. Even two played at once will be transferred
in 1st and 2nd order. MIDI is a single lane road.
You can use Mozaics note state array feature to store if a note is active:
The ^ operation in the IF statement does an ex-or. The result is only true if a single
note is active one octave apart, not if there is a note on the octave above and below at the same time.
For your use-case, you need an additional check to see if the current MIDINote is in the lower range, to not trigger when a bass note and a melody note are an octave apart.
Nice - my ‚solution‘ cared about the ‚any key at one-octave apart‘ part and @McD ‘s answer about the temporal aspect which my code is totally missing
So the final solution could be a combination - the following code only works for single-channel midi input:
The first two conditions can‘t be combined with AND since Mozaic doesn‘t do condition short-cuttting.
The second condition of an AND will allways be checked, which would result in an negative array index
Exception when the input MIDINote is less than 12.
Due to the temporal aspect (SystemTime will allways increment), one doesn‘t need to clear the noteOnTime[MIDINote] in the @OnMidiNoteOff. It automatically gets invalidated after maxDeltaTime (or 20msec in this example)
.
Hupps, that‘s basically @McD‘s proposal - i didn‘t need to use the NoteStateArray that i brough up at all.
Thanks a lot, @McD & @_ki ... Being a programmer for 20 years how come capturing timestamp did not come to my mind !! Getting old I guess...
As a 20 year programmer this comment is made for lurkers wondering if they should
get into Mozaic scripting. It's not to be taken personally.
Event Driven programming (which Mozaic implements) is hard for most people comprehend.
A chord could have 2-6 notes (for example) but the script will process those notes as 2-6 ON events and you need apply IF logic to decide when you have the right amount of notes to
send something out. But still... you could detect a 4 note chord and THEN send out single notes in a arpeggio with each note OUT being processed by a PPQN Metronome event.
The one extra trick people need to consider is sending a NOTE out with a delay argument added which tells the Mozaic excuse engine to do this on 500 millseconds, for example. Very useful for echoes. I like to use them for NOTE OFF's like a SUSTAIN parameter in an ADSR envelope. Start this note NOW and stop it in 500 milliseconds.
Mozaic also has a TIMER feature so you can effectively make scripts that do NOT require the
DAW's transport instructions. It might take off playing arps on loading and stop when killed
for example using the TIMER to stage rhythmic events.
The system clock captures would be required to make a record function. Just save in 5 arrays:
CHANNEL
EVENT_TYPE (ON or OFF)
NOTE
VOLUME
SYSTEMTIME
I implemented PLAYBACK by using the recorded SYSTEMTIME deltas to set TIMERS for the next EVENT OUT when the recorded stream of events is played back.
Solving these puzzles is more than 1/2 the fun. Like a great logic based video game... a box of puzzles.
Is there a Mozaic script out there for converting poly to mono?
Can you explain in more detail what you mean?
Dear Lurkers: I disagree that event driven programming his hard to comprehend. If one can get over the fear of programming, Mozaic is quite friendly.
Event-driven program is easier for most people who have never programmed. And is probably only hard to get used to if one spent years writing programs before becoming aware of even-driven programming. In my career, I have witnessed quite a few people afraid of programming that became enthusiastic scripters thanks to event-driven environments that allowed them to only have to figure out how to respond to events of interest...and were freed from the the tedium of writing event loops and dispatching the program and managing event queues. I think event-driven stuff may seem strange to programmers that learned programming back when even-driven programming was exotic.
Sure, let’s say i have a synth that doesn’t natively support monophony, it only works in polyphonic but I want it to work in mono. I’m wondering if i could insert Mozaic between the midi controller and the synth with Mozaic providing filtering so that only one note is ever active/on at a time. Each time a new note is pressed Mozaic ensures the currently active/on note is replaced/turned off rather than added to. Hope that makes sense - bit of an edge case really
As an old school procedural programmer who adapted to event driven programming when it became a thing, I would say that in a lot of cases event driven programming is simpler. Where it isn’t simpler is if you need actions that hang off diverent events to occur in a specific order, as those events can happen in a different sequence to the one you want, so you have to jigger around to make it happen.
Thanks for the nice and short distraction. Here you go - just uploaded Force Monophonic to patchstorage.
You’re welcome lol
Seriously though, many thanks to yourgoodself - will give it a whirl later on
@wired2moon After playing around with the legato mode for some time, i remembered that my old Korg MS 20 behaved differently:
If i sustained a low note and then played a higher note, the higher note was played (with possible portamento). But when releasing the higher note, the lower note was played again while the envelop stayed in the sustain phase.
In its legato mode, the script played the slide up - but not the return to the low note when relasing the higher note.
.
So i updated the script to version 1.5 with a second legato mode that emulates this behavior of old monophonic keyboards.
The previous note is retriggered (with legato) on note-off of the current note if it is still sustained. For synth (instruments like the bs-16 piano) that don‘t react to legato play, that sounded a bit wierd as they retriggered their envelop with the full volume of the previous note - so i added a velocity damping feature which allows to tone down to re-trigger, which sounds a lot better with those instruments.
TL;DR: In addition to the slides of the first legato mode, the second legato mode allows to play trillers or fast slide up/downs by holding the triller base note and tapping/releasing a short second note
@espiegel123 said:
I would add, for some perspective, that it has been a very long time since event driven programming has been considered "exotic". It is and has been the dominant paradigm for programming gui apps for decades, ever since gui operating systems and gui apps became a thing. For example, this Wikipedia article suggests that developers were slow to develop software for the original Apple Macintosh, in 1984(!), partly because of its limited RAM (128k), the new gui interface, and partly because of its relatively-new event-driven programming paradigm. ( "The difficulty of fitting software into its limited free memory, coupled with the new interface and event driven programming model, discouraged software vendors from supporting it. . . " https://en.wikipedia.org/wiki/Macintosh_128K )
This event-driven paradigm was basically what was needed to simplify programming for a gui interface, which was new a the time. (Some people can recall that competing IBM-PC DOS-based computers in the 1980's were text-based, didn't have a gui).
So since 1984 for Macs, and since WIndows came out in late 1980's, event-driven programming has been commonplace. Beginning programmers and/or those who just write procedural scripts may not see or use it much. But for anybody who's programmed actual gui apps since the 1980's (i.e., most any app) event-driven programming has been part of the basic architecture of things, feels as familiar and as comfortable as an old pair of shoes. It makes things easier, not harder.
I believe the PolyThemus app can do this (and more) if you're interested in a non-script based approach.
If you have @_ki on the job you should be good though.