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 Store

Loopy Pro is your all-in-one musical toolkit. Try it for free today.

MOZAIC - Create your own AU MIDI plugins - OUT NOW!

19799101102103

Comments

  • heshes
    edited December 2023

    @wim said:

    @hes said:

    @wim said:
    The bottom line @pejman is the underscore has no function other than as a visual aid for code readability. It has no effect on the variable's scope or what it does.

    True. But if it's used to designate local variables, then I think the underscore should be a flag that is slightly more than an aid for readability. It should serve as a flag that in any function the first use of a variable preceded by an underscore (i.e., a variable to be treated as local) should always be assigning it a value. This is so you can use the same variable in many different functions, but treat it as a local variable in all of them, never needing to worry about whether its value has been changed in some other function.

    The point I wanted to be sure @pejman understood was: there is no change of variable function provided by the underscore (or any other naming convention). Perhaps I used too many words. I'm repeating it here in case the rest of these posts obscure that main point.

    Yeah, gotcha. All Mozaic variables are global. Naming conventions don't change this; they merely indicate how you intend to use them.

  • @espiegel123
    @wim
    @ki
    Thanks for all information. Thank you very much for your continuous help.

    @espiegel123 and @wim , Thanks for clarifying the issue again.

    @ki , Thanks for the very constructive actions you have done in Textastic.

    I am collecting all the informations that you have shared with me and helped me over the past several months, I am sorting them and going through them again and carefully. I sincerely thank you for all your help.🙏

  • edited December 2023

    @espiegel123

    Hi,

    I have read all of the AUparameter topics in mozaic manual , but I don’t understand how to work with @onAuparameter .

    I know there are 22 knobs and 16 pads as AUparameters that we can control them via host app like AUM , and I know there are 8 AUparameters with high accuracy and resolution , but I don’t know these 8 parameters what parameters are included?

    Can the variables we create in our patch include these parameters?

    I don’t understand these paragraphs from mozaic manual .

    “ returns the number of the AU parameter which was most recently changed or updated by the AU host.

    _Parameters and output:

    the last user AU parameter that was updated by the host. Result will be in the range of 0-7, as there are 8 parameters available for general purpose usage.”_

  • @pejman said:
    @espiegel123

    Hi,

    I have read all of the AUparameter topics in mozaic manual , but I don’t understand how to work with @onAuparameter .

    I know there are 22 knobs and 16 pads as AUparameters that we can control them via host app like AUM , and I know there are 8 AUparameters with high accuracy and resolution , but I don’t know these 8 parameters what parameters are included?

    Can the variables we create in our patch include these parameters?

    I don’t understand these paragraphs from mozaic manual .

    “ returns the number of the AU parameter which was most recently changed or updated by the AU host.

    _Parameters and output:

    the last user AU parameter that was updated by the host. Result will be in the range of 0-7, as there are 8 parameters available for general purpose usage.”_

    Have you looked at a host to see the names of the parameters that Mozaic exposes?

    Take a look at them. Set up something in your host to manipulate the exposed parameters. Write a little script that logs the values when the parameters change.

    Experiment with a super simple script.

    Think about how knob and pad values are retrieved. look at the example line in the manual.

  • @espiegel123

    Ok understand.

    Great , Exactly what I needed.

  • edited December 2023

    @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 ?

  • wimwim
    edited December 2023

    @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 ?

  • @pejman said:
    @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 .

  • @pejman said:
    @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.

  • wimwim
    edited December 2023

    @pejman said:
    @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 .

    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?

  • edited December 2023

    @pejman said:
    @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.

  • edited December 2023

    Translatescale doesn’t do this . ( Reverse translation )

  • wimwim
    edited December 2023

    @pejman said:
    @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?

    value = GetKnobValue LastKnob
    x = TranslateScale value, 0, 127, 0, 1000
    x = 1000 - x
    
  • @wim

    @wim said:

    @pejman said:
    @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?

    value = GetKnobValue LastKnob
    x = TranslateScale value, 0, 127, 0, 1000
    x = 1000 - x
    

    YES ; It was great, How easy and simple. thank you very much 🙏❤️.

  • @pejman said:

    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. 😂

  • edited December 2023

    @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?

  • @pejman said:
    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?

  • McDMcD
    edited December 2023

    @pejman said:
    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?

    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.

    @OnLoad
    
      count = 0 // Stores the note count for chord notes
      SetTimerInterval 500 // a timer to log the count of the recent chord input
      StartTimer
    
    @End  
    
    @OnMidiNoteOn
    
      Chord[count] = MidiByte2
      Inc count
      SendMIDIThru
      ResetTimer
    
    @End
    
    @OnTimer
    
      if count > 0
        Log {Note Count = }, count
        ResetTimer
        count = 0
      endif
    
    @End
    
  • @pejman said:
    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?

    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:

    1. Note
    2. Velocity
    3. SystemTime

    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.

Sign In or Register to comment.