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
@espiegel123
@wim
@ki
Do you know this app ? ( Yamaha synth & dr Pad ) , A sequencer and arpeggiator that is powerful in its own way, and Built in instruments and patterns drum rhythms and patterns arpeggiators .
Unfortunately, this app is no longer available in the App Store And I don't know why, And I have it on my iPad since old times. It is an old application that does not support Audio Unit v 3.
But it has options that are very interesting to me, and I have not seen these options in any of the drum machines in the App Store that have them all together. Or at least I haven't seen it yet.
Like :
1, ( swing - ) and ( swing + )
2, swing values
3, beat stretching
By combining these three options together, you can reach very interesting and complex rhythmic patterns.
Unfortunately, since this app does not support Audio Unit, I have to use it all the time in the background, and unfortunately there is no midi learn for these options that I can control in the background mode .
🔺Has there ever been a patch with these 3 options in mozaic that you can introduce to me?
🔺If not, can such capabilities be created with mozaic ?
@pejman, Mozaic seems to me like it would be virtually impossible to do something like this with. The reasons are more than I care to go into. You could maybe cherry-pick a few features but anything of that scope? No way.
@wim
I can imagine that my question about beat stretching is illogical, but what about negative swing and Create swing values ?
It depends what you mean. Negative swing on live midi input can only be accomplished by delaying the rest of the midi. You can't move a note to a time before it is received.
Applying negative swing to an existing stored pattern would be possible. Mozaic isn't a great vehicle for storing patterns though. It can be done for quantized patterns of a limited number of steps fairly easily, but I wouldn't call Mozaic a great choice for that.
@wim,
In both modes, the first note is played when we play a note on a keyboard, This means that no note is scheduled to be executed earlier than when we execute it.
Screenshot of yamaha synth & dr pad app .
The issue is the second note. If the person playing, plays the second note later than it is wanted (let's say they play it as a straight eighth note), the script can't move it back in time to the correct reverse swung position.
@espiegel
Yes your right, the yamaha app has pre-saved notes as patterns and performs swings on the saved notes in different ways or stretches them.
And as @wim said, this requires quantized notes saved in mozaic, which mozaic is not a good choice for this.
I have to think of another solution.
A miscellaneous question.
I haven’t ruismaker app, Can this app play back automatically when we play a note on the keyboard? like arpeggiators , Like arpeggiators do that .
I mean ruismaker drum machine.
No. I think you can start and stop the transport with a note, I think, but it can’t act like an arpeggiator.
@wim
Thanks wim ,
Great.
That's exactly what I meant, play and stop with an note on and off , like arpeggiators play on and off with note on / off, .
Excuse me for asking random questions all the time, but I have one more question.
I need to MidiVelocity from 0 to 127 , translat to 1000 , 0 . That is, a reverse transliteration.
I know that mozaic doesn’t reverse translation , for example
Translate MidiVelocity 0 , 127 , 1000 , 0
I need to this reverse translation from note velocity to another variable , like delay time .
How can I do this?
Should this be done through a mathematical formula?
Use translatescale.
Translatescale doesn’t do this . ( Reverse translation )
@wim
YES ; It was great, How easy and simple. thank you very much 🙏❤️.
Ha ha! I'm embarrassed to remember how long it took me to figure that simple trick out when I was first starting to write Mozaic scripts. 😂
@wim
😉
On the contrary, in my opinion, reaching this answer is not an easy task at all, For someone who is just starting to code.
I hope there is no misunderstanding that I wrote how simple it is, I meant the low number of characters : 5 characters: x , = , 1000, - , x
But in practice, it was impossible for me to reach this simple answer.
Because in my opinion, the answer with this formula should always be equal to 0 , not 1000 to 0 .
I have edited my last post.
I just realized how this could happen, it was very interesting.
Hi
How does mozaic know how many notes we have taken at the moment?
For example, the number of notes that we play as chord can be different every time. How does mozaic know the number of notes?
What do you mean by "know the number of notes"?
for example i play C E G = ( 3 notes ) , I will get another chord again C D F B G A = ( 6 notes) , …
Can mozaic detect the number of notes in my chord every time I play a chord?
You need to count up the notes as they come in and use a Timer to detect that a complete chord has been entered… in other words after some amount of time you know a chord is entered. Selecting this Timer Interval is important… I choose 1/2 a second or 500 milliseconds.
The code Logs the number of notes to the Log window. You could continue to add chord notes to the Chord Array and save the starting position of each chord in yet another array and the number of notes in a chord to another array. That way you could play the chords back later.
I would not mess with timer to start.
I would start by simply tracking note ons and offs in an array.
Look at the chapter of the Mozaic manual about remembering note states.
You also can increment a counter when a note on arrives and decrement when a note off arrives.
It can also be useful to create your own array of notes you update when note on and offs come in.
No timer is needed for any of this.
You could learn a lot by going to patchstorage and studying scripts people have posted,
@McD
@espiegel123
@McD , Very thanks for help , The codes that you sent were a very instructive lesson for me in this field. I am glad that I learned how to count using a timer.That’s great 🙏.
But when I was using your code for this method I noticed a new problem, : Sometimes I keep ( remain ) the fingers on the keys for chords that contains notes that are the same between both two chords and move the other fingers that should be on different notes. ( If you are interested in knowing why I have to do this, I will explain it to you in a separate post ) .
So with the method you suggested, whenever I move one of my fingers for a new note, only the new note is counted, and it counts as one note, not along with the previous notes that were taken.
Therefore, it would be better if I asked my question like this ; How to count the notes taken ( NoteOn ) through mozaic ? I apologize if I did not ask my question more precisely.
I think the method suggested by @espiegel123 can solve my problem well, but I haven't tried it yet.
🔺 My ultimate goal is to average the velocity of several notes taken simultaneously.
@espiegel123 wrote: You could learn a lot by going to patchstorage and studying scripts people have posted,.
You're right, I do the exact same thing in some cases, but that's when I know what to look for and where to look.
But in some cases, I don't know which patch I should look for among the 300 patches that have been made to find the answer to my question.
And to make matters worse, I still don't have the ability to read some of the patches easily
Thank you for helping me again 🙏, I will try to solve the problem with the method you suggested.
The best way to track notes that are carried over between chords is to catch NoteOff events and decrement the count so any held notes prevent the count from getting back to zero.
Using the increment for Note On and decrement for Note Off will track active notes.
The timer is an effective way to “catch” the moment when a complete chord has been submitted assuming chords are separated by some “space”.
Your proposed question only gets more complicated with actual input like a human playing a keyboard with two hands.
Another thing to consider is playing to a pulse/metronome. Mozaic has events related to OnNewBar and OnNewBeat. That could be useful to detect chords the way a piece of sheet music or Tab does along rhythmic lines.
How ever you do it you will need to save the Note data and count how many notes passed through.
I made a MIDI recorder app by saving aligned data into three arrays:
That’s enough information to play back a recording with accrurate Note, Velocity and Timing details. It works for up to 1024 notes and after that point you need to detect that event and start storing in a 2nd set of arrays.
The Timer is important to Log the number of notes in the chords as they come in. You could also output chord
note data based upon a metronome event but there must be an event since chords could contain any number of notes.
A complete script is often too confusing to start with when learning. A piece of example code that runs and can be built on is better. But it takes some effort to create an example and a lot less to give free advice or suggest reading the manual which is also more information that is required to address a sincere request for help.
The basic question to be answered is always:
what are the incoming events and how would you like to store and interpret them to do something new?
Then you create event blocks to catch the events and add logic to generate a response to precise event sequences.
@pejman : the script @McD posted> @McD said:
For tracking what notes are being held, I am not understanding why the timer is useful. Updating an array and/or counter every time a note on or off comes in is sufficient.
Unless I am overlooking something, your method resets the array even if notes aren't released. And it counts notes that may have been held fleetingly. It seems to be a count of notes played within the previous 1/2 second.
If you run a finger up and down the keyboard, you get a high note count even there was never more than one note at a time.
@espiegel123 Collecting the note-ons and note-offs is one part of the problem, but that won‘t help at all to detect when the chord is ‚complete‘. There are chords with 3 or 4 notes (and complex choards have even more notes) and Mozaic delivers the notes one by one. So if the script would react when three notes are marked as active you are not sure if there‘s a forth note comming up to complete the chord.
That‘s why a fast running timer event is neccessary for chord detection. It basically should detect that some msec are passed after the last note-on happened and then one is safe to assume that the chord is finished and can start processing the input and generate midi output depending on the scripts purpose.
A wait-time up the range of <30msec allows to catch the notes input by a human player, who never trigger all thee notes of a chord in the same microsecond, so they usually arrive in separate Mozaic timeframes (*). If the midi input is comming from a sequences, a timer rate of 1-2msec is enough, as chords are usually issued synchronously by the midi sequencers. All my chord detecting scripts utilize a timer event loop and offer to configure the wait-time with a knob to adapt the the input.
(*) The Mozaic events are triggered during buffer change, the exact spot in time depends on samplerate and bufferlength).
.
Starting and stopping a Mozaic timer takes some time, often several 100msec - so one needs to have the fast timer running the whole time and implement an own logic to only act if processing is really needed and bails out in the other 99%.
.
For the AUM keyboard, you‘ll receive legato played notes - ie the note-off of the current note arrives after the note-on of the next note on the AUM keyboard - but both events are send inside the same Moazic timeframe, so there‘s two active notes for a split-time of a micro-second.
BTW: The note collecting part of the script should never release/clear it‘s stored information after processing - just update its state using the note-on/note-off events - otherwise you will loose the ability to detect legato played chord changes, where some of the notes are held, while some of the notes change.
@_ki : If one is talking about detecting block chords played at once, sure a timer will be part of the solution. I guess it isn't clear to me that the query that started this is about detecting block chords.
And if it is about detecting block chords, I stand by my assertion that MacD's script detects fast runs of non-helds as "chords".
Hi
According to the topic that I already sent to you in my previous post, what should I do now so that this problem does not arise?
I wrote: “_But when I was using your code for this method I noticed a new problem, : Sometimes I keep ( remain ) the fingers on the keys for chords that contains notes that are the same between both two chords and move the other fingers that should be on different notes. ( If you are interested in knowing why I have to do this, I will explain it to you in a separate post ) .
So with the method you suggested, whenever I move one of my fingers for a new note, only the new note is counted, and it counts as one note, not along with the previous notes that were taken.”_