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!

19899100101103

Comments

  • @pejman said:
    Hi @wim @McD

    Thanks @McD for explanation.

    @wim , From reading your code, I noticed that you sort the notes through a loop .

    I had tried before I asked you my question .
    But not based on loop, but based on being if’s, with 2 array : The first array to collect held notes and the second array to sort them with ( if midinote = x put in x array’s sell), In the middle of the way, I realized that the direction I was going was completely wrong.

    But In the middle of the way, I realized that I needed a lot of (IFs) and I realized that the direction I was going was completely wrong. I was disappointed.

    In this script I was only trying on the first three notes .

    @OnLoad
    FillArray note, -1, 5
    FillArray count, -1, 5

    log {firstnote ➡️}, count[0] , { secondnote➡️}, count[1],{ thirdnote➡️}, count[2], { fortnote➡️}, count[3]
    @End

    @OnMidiNoteOn
    n = MIDINote
    CopyArray n, note[MIDINote] , 1

    Call @counter
    //log {firstnoteON ➡️}, note[0] , { secondnoteON➡️}, note[1],{ thirdnoteON➡️}, note[2], { fortnoteON➡️}, note[3]
    @End

    @OnMidiNoteOff
    n = -1
    CopyArray n, note[MIDINote]
    Call @counter
    //log {firstnoteoff ➡️}, note[0] , { secondnoteoff➡️}, note[1],{ thirdnoteoff➡️}, note[2], { fortnoteoff➡️}, note[3]

    @End

    @counter
    if note[0] = 0
    CopyArray note[0], count[0]
    elseif note[1] = 1
    CopyArray note[1], count[0]
    elseif note[2] = 2
    CopyArray note[2], count[0]
    elseif note[3] = 3
    CopyArray note[3], count[0]
    endif
    if note[0] = 0 and note[1] = 1
    CopyArray note[0], count[0]
    CopyArray note[1], count[1]
    elseif note[0] = 0 and note[2] = 2
    CopyArray note[0], count[0]
    CopyArray note[2], count[1]
    elseif note[0] = 0 and note[3] = 3
    CopyArray note[0], count[0]
    CopyArray note[3], count[1]
    endif

    if note[1] = 1 and note[3] = 3
    CopyArray note[1], count[0]
    CopyArray note[3], count[1]
    endif
    log {firstnote ➡️}, count[0] , { secondnote➡️}, count[1],{ thirdnote➡️}, count[2], { fortnote➡️}, count[3]
    @End

    After you sent me the script, I remembered that there is a script ( Latch and Switch ) by Mark Dammer, that can sort the notes in order in the pads. (Track the notes that are being held down and sort them lowest note to highest note.) , I had worked with this script, but I didn't remember that it could sort the notes .

    But unfortunately, I can't read this script to understand exactly how he did it.

    If you try this patch please set it to replace mode . With pressing shift and latch on/off pad (pad num 12 )

    https://patchstorage.com/latch-and-switch/?
    utm_source=discord&utm_medium=patchbot&utm_campaign=embed

    Just came across this discussion mentioning “Latch and Switch”:
    The sorting algorithm I am using in the script is called “Bubble Sort”. You can find an explanation here:
    https://en.wikipedia.org/wiki/Bubble_sort
    It can be found in the @ShowNotes subroutine.

  • @pejman said:
    Hi everyone.

    Is it possible to create specific channel output in the nodes which contains midi plug-in in aum , through aum itself ?

    It is possible to select a channel for each node's input, but there is no channel selection for its output.

    Is this an AUM question or Mozaic question?

  • @espiegel123 said:

    @pejman said:
    Hi everyone.

    Is it possible to create specific channel output in the nodes which contains midi plug-in in aum , through aum itself ?

    It is possible to select a channel for each node's input, but there is no channel selection for its output.

    Is this an AUM question or Mozaic question?

    Hi @espiegel123 ❤️.

    This is an AUM question .

  • @pejman said:

    @espiegel123 said:

    @pejman said:
    Hi everyone.

    Is it possible to create specific channel output in the nodes which contains midi plug-in in aum , through aum itself ?

    It is possible to select a channel for each node's input, but there is no channel selection for its output.

    Is this an AUM question or Mozaic question?

    Hi @espiegel123 ❤️.

    This is an AUM question .

    You might want to ask in an AUM related thread

  • Hi , @catherder
    Thanks for sort information , The topic is very interesting for me, I will definitely study it .

  • wimwim
    edited June 9

    @pejman, the answer is No. You cannot set the midi channel that is output from an AUM channel without other plugins. Atom itself can send on any channel you want, however.

  • Hi , @wim.

    Do you mean atom pianoroll 2 ?
    I use atom 1 .

  • edited June 9

    @wim.

    @wim said:

    @pejman said:
    @wim .

    I'm glad you understand what I mean.

    Here you go @pejman. This should work as far as I understand your request:

    @Description
    Track the notes that are being held down and sort them lowest note to highest note.
    NOTE: This is designed to only handle a SINGLE MIDI CHANNEL at a time.
    @End
    
    @OnLoad
      noteCount = 0
      FillArray heldNotes,-1
    @End
    
    @OnMidiNoteOn
      note = MIDINote
      Call @AddNote
      Call @SortNotes
      Call @LogNotes
    @End
    
    @OnMidiNoteOff
      note = MIDINote
      Call @RemoveNote
      Call @SortNotes
      Call @LogNotes
    @End
    
    @AddNote
      // Add a note to the stack
      heldNotes[noteCount] = note
      Inc noteCount
    @End
    
    @RemoveNote
      // Remove a note from the stack
      r = 0
      found = NO
      
      // Read through the stack until the note is found.
      // Once found, replace that with the next note in the stack
      // until there are no more notes (note = -1).
      repeat
        if heldNotes[r] = note
          found = YES
          Dec noteCount
        endif
        
        if found
          heldNotes[r] = heldNotes[r+1]
        endif
        Inc r  
      until heldNotes[r] = -1 or r = 1023
    @End
    
    @SortNotes
      // Sort the stack by copying the notes
      // in lowest-to highest order into a temporary array
      // then replace the active array with the temporary array
      
      // Exit if there are no notes left in the stack
      if noteCount = 0
        Exit
      endif
      
      FillArray tmp, -1
      sortCount = noteCount
      
      for s = 0 to (sortCount-1)
        Call @GetLowest
        tmp[s] = lowest
        note = lowest
        Call @RemoveNote
      endfor
      
      CopyArray tmp,heldNotes
      // noteCount has been decreasing as we remove already
      // copied notes, so we need to restore it here.
      noteCount = sortCount
    @End
    
    @GetLowest
      if noteCount = 0
        Exit
      endif
      
      lowest = 128
      for l = 0 to (noteCount - 1)
        if heldNotes[l] < lowest
          lowest = heldNotes[l]
        endif
      endfor
    @End
    
    @LogNotes
      if noteCount > 0
        Log {=== Start Note Array Contents ===}
        for l = 0 to (noteCount - 1)
          Log {[}, l, {] }, (NoteName heldNotes[l],YES), { (}, heldNotes[l], {)}
        endfor
        Log {===  End Note Array Contents  ===}
        Log { }
      else
        Log {No held notes.}
        Log { }
      endif
    @End
    

    Based on this script that you kindly wrote for me, I have two more requests from you. 🙏🙏.

    1, log only highest note in separate log .
    2 , sort notes in highest to lowest note ( mirroring ) . And log .

    I'm going to extract them from the script and send them to another plugin.

    I would be very grateful if you would do me this favor again.🙏.

  • @pejman said:
    Hi , @wim.

    Do you mean atom pianoroll 2 ?
    I use atom 1 .

    Yes, I meant Atom 2. I don't think Atom 1 can send on any other channel.

  • wimwim
    edited June 9

    @pejman said:
    Based on this script that you kindly wrote for me, I have two more requests from you. 🙏🙏.

    1, log only highest note in separate log .
    2 , sort notes in highest to lowest note ( mirroring ) . And log .

    I'm going to extract them from the script and send them to another plugin.

    I would be very grateful if you would do me this favor again.🙏.

    You really don't need much special to get these two different logs. Check the @LogNotes event.

    • Rather than for l = 0 to (notecount - 1), just count the opposite direction: for l = (notecount - 1) to 0
    • The highest note is: heldnotes[notecount - 1].

    I hope that helps.

  • @wim ,
    Very thanks . It works. ❤️🙏.

  • edited June 17

    @wim .
    Hi wim .
    I want to create one strummer ( like guitar ) patch with your chord tracking notes patch .

    I have added some code lines to your script , I marked them with this sign (🔺).

    There is problem ( overlapping start notes in octave with original notes ) with formula in delay send note for octave .
    SendMIDINoteOn 0, heldNotes[l]+12, ve[l] , l* delay + (l + 1 * delay)

    I try it with delay 50 for example .
    I play for first time note C1 , then add E1 and then add G1 .

    According to the above code, their octave have been add to them in the order that you can see them in the screenshot.

    I have tried many formulas in delay send note section , but none of them have been successful. Please help me to know what formula I should write to make what I expect to happen.

    Naturally, I expect that by increasing or decreasing the delay that I have created by knob No. 0, the delay of the notes relative to each other from the lowest note to the highest note , will decrease or increase in an equal proportion every time I play a chord or note to note. I add or subtract from the previous one.

    @Description
    Track the notes that are being held down and sort them lowest note to highest note.
    NOTE: This is designed to only handle a SINGLE MIDI CHANNEL at a time.
    @End

    @OnLoad
    noteCount = 0
    FillArray heldNotes,-1
    SetShortName {strumer}
    delay = 50
    @End

    @OnMidiNoteOn
    note = MIDINote
    ve = MIDIVelocity //🔺
    Call @AddNote
    Call @SortNotes
    Call @LogNotes
    @End

    @OnMidiNoteOff
    note = MIDINote
    Call @RemoveNote
    Call @SortNotes
    Call @LogNotes
    @End

    @OnKnobChange //🔺
    delay = Round TranslateScale (GetKnobValue 0), 0, 127, 0, 100
    LabelKnob 0, delay
    Call @LogNotes

    @End

    @AddNote
    // Add a note to the stack
    heldNotes[noteCount] = note
    Inc noteCount
    @End

    @RemoveNote
    // Remove a note from the stack
    r = 0
    found = NO

    // Read through the stack until the note is found.
    // Once found, replace that with the next note in the stack
    // until there are no more notes (note = -1).
    repeat
    if heldNotes[r] = note
    found = YES
    Dec noteCount
    endif

    if found
    heldNotes[r] = heldNotes[r+1]
    endif
    Inc r
    until heldNotes[r] = -1 or r = 1023
    @End

    @SortNotes
    // Sort the stack by copying the notes
    // in lowest-to highest order into a temporary array
    // then replace the active array with the temporary array

    // Exit if there are no notes left in the stack
    if noteCount = 0
    Exit
    endif

    FillArray tmp, -1
    sortCount = noteCount

    for s = 0 to (sortCount-1)
    Call @GetLowest
    tmp[s] = lowest
    note = lowest
    Call @RemoveNote
    endfor

    CopyArray tmp,heldNotes
    // noteCount has been decreasing as we remove already
    // copied notes, so we need to restore it here.
    noteCount = sortCount
    @End

    @GetLowest
    if noteCount = 0
    Exit
    endif

    lowest = 128
    for l = 0 to (noteCount - 1)
    if heldNotes[l] < lowest
    lowest = heldNotes[l]
    endif
    endfor
    @End

    @LogNotes
    if noteCount > 0
    Log {=== Start Note Array Contents ===}
    for l = 0 to (noteCount - 1)
    Log {[}, l, {] }, (NoteName heldNotes[l],YES), { (}, heldNotes[l], {)} //🔺🔺🔺
    SendMIDINoteOn 0, heldNotes[l], ve[l] ,l * delay
    SendMIDINoteOn 0, heldNotes[l]+12, ve[l] , l * delay + (l + 1 * delay)
    SendMIDINoteOff 0, heldNotes[l], 0 , l*delay +10
    SendMIDINoteOff 0, heldNotes[l]+12, 0 , l * delay + (l + 1 * delay)
    endfor
    Log {=== End Note Array Contents ===}
    else
    Log {No held notes.}
    endif
    @End

  • Is there anyone who can help me in this matter?

  • @pejman said:
    @wim .
    Hi wim .
    I want to create one strummer ( like guitar ) patch with your chord tracking notes patch .

    I was able to solve the problem .

  • @McD said:
    I have a question for the real programmers here that have created amazing tools using Mosaic as is but probably know where they'd like to see an extra feature or language construct.

    I would love to have access to a UI editor to make additional layouts, and add custom buttons. I created my ideal workflow for a step sequencer but hit a wall because I needed more controls, and ended up using the shift button to have 2 pages. An in app purchase for a UI template editor and the functionality to be able to create custom layouts and wire those controls up would be a dream for me.

  • @amatheu said:

    @McD said:
    I have a question for the real programmers here that have created amazing tools using Mosaic as is but probably know where they'd like to see an extra feature or language construct.

    I would love to have access to a UI editor to make additional layouts, and add custom buttons. I created my ideal workflow for a step sequencer but hit a wall because I needed more controls, and ended up using the shift button to have 2 pages. An in app purchase for a UI template editor and the functionality to be able to create custom layouts and wire those controls up would be a dream for me.

    I suspect Mozaic didn’t sell enough copies to justify @brambos putting in more time.
    The 1-2 punch of Surface Builder feeding Mozaic works really well to make better UI’s and get the
    MIDI processing of Mozaic.

  • edited July 24

    @McD said:

    @amatheu said:

    @McD said:
    I have a question for the real programmers here that have created amazing tools using Mosaic as is but probably know where they'd like to see an extra feature or language construct.

    I would love to have access to a UI editor to make additional layouts, and add custom buttons. I created my ideal workflow for a step sequencer but hit a wall because I needed more controls, and ended up using the shift button to have 2 pages. An in app purchase for a UI template editor and the functionality to be able to create custom layouts and wire those controls up would be a dream for me.

    I suspect Mozaic didn’t sell enough copies to justify @brambos putting in more time.
    The 1-2 punch of Surface Builder feeding Mozaic works really well to make better UI’s and get the
    MIDI processing of Mozaic.

    Brambos' philosophy has been made clear a number of times. He puts a lot of thought into the conception of each his plugin as a complete unit, implements that vision, makes some refinements shortly after release to fix bugs or address little user needs that align with the conception of the app and at that point the app is done and isn't revisited except to fix bugs with rare exception.

    Very early on, he made it clear that it was not intended for the large-scale applications many of us pursued with it. He made it clear pretty early that he would not be turning it into something other than it was. I don't thing the number of sales plays a big role in his thinking on this subject.

  • @McD said:

    The 1-2 punch of Surface Builder feeding Mozaic works really well to make better UI’s and get the
    MIDI processing of Mozaic.

    Hmm I don't have surface builder, but now I am intrigued, also now wondering if I could do what I want with Loopy Pro's UI tools feeding Mozaic as well

  • @amatheu said:

    @McD said:

    The 1-2 punch of Surface Builder feeding Mozaic works really well to make better UI’s and get the
    MIDI processing of Mozaic.

    Hmm I don't have surface builder, but now I am intrigued, also now wondering if I could do what I want with Loopy Pro's UI tools feeding Mozaic as well

    FWIW, that has tended to be my solution.

  • @espiegel123 said:
    FWIW, that has tended to be my solution.

    Thanks,

    My other solution will be a lot more time consuming, which would be to create an app that satisfies the workflow that I would like. That might be what I will end up doing for ease of use and collaboration with others. If I do embark on that path, wish me luck!

  • @amatheu said:

    @espiegel123 said:
    FWIW, that has tended to be my solution.

    Thanks,

    My other solution will be a lot more time consuming, which would be to create an app that satisfies the workflow that I would like. That might be what I will end up doing for ease of use and collaboration with others. If I do embark on that path, wish me luck!

    If you do create it, I am sure a lot of people would appreciate it -- (though by a "lot" I don't actually mean so many that you would earn more revenue than it would cost in time to develop it)

  • @espiegel123 said:
    If you do create it, I am sure a lot of people would appreciate it -- (though by a "lot" I don't actually mean so many that you would earn more revenue than it would cost in time to develop it)

    oh I don't mean creating the thing I would want in Mozaic, I mean creating the thing that I was creating in Mozaic as a proper app. Which is a step sequencer with a particular workflow. :smiley:

  • @amatheu said:

    @espiegel123 said:
    If you do create it, I am sure a lot of people would appreciate it -- (though by a "lot" I don't actually mean so many that you would earn more revenue than it would cost in time to develop it)

    oh I don't mean creating the thing I would want in Mozaic, I mean creating the thing that I was creating in Mozaic as a proper app. Which is a step sequencer with a particular workflow. :smiley:

    :)

  • Hi ,

    I want to send midi message after every 2 host bar .

    I used this code :

    @OnNewBar
    for i = 0 to HostBar
    if HostBar = i * 2
    log {🔺}, HostBar
    Send xxxx
    endif
    endfor
    @End

    But with increasing hostbar , DSP (CPU consumption) increases .

    What other solution is there?

  • I apologize, the solution was very simple, I found it.😅

    @onnewbar
    Inc count
    if count = 2
    log {🔺}, HostBar
    Send xxx
    x = 0
    endif
    @end

  • edited August 9

    @ki
    hi @ki. thanks for new patch .

    What is the exact name of this app, I can't find it no matter how much I search in the app store.

  • Hello @pejman

    thats the Xequence AU | Keys app. One can configure scales, add multiple CC sliders, the color and midi channel (nice if one uses several of these keys)

    The same dev also offers an Xequence AU | pads control surface.

  • @ki thanks for information ❤️.

  • Hello .
    Is it possible to use the app that we make ourselves through Swift or other coding programs, for example, for iPad, without registering it in the App Store?

  • wimwim
    edited November 20

    @pejman said:
    Hello .
    Is it possible to use the app that we make ourselves through Swift or other coding programs, for example, for iPad, without registering it in the App Store?

    You can do some things with Swift Playgrounds for your own use. What you can do is somewhat limited, but it's a great way to learn. Most people use Xcode on a Mac for iOS/iPadOS development.

    You can deploy a full program on your own devices with a free Apple Developer account. You can't distribute it to others though without a paid developer account. With a paid developer account you can have others test it using TestFlight once the test version is approved by Apple and eventually list it in the App Store.

    You can't just write any app and use it on devices without going through Apple in some way.

Sign In or Register to comment.