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!

1100101103105106108

Comments

  • wimwim
    edited June 2024

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

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

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

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

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

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

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

  • @wim thanks for reply and help .
    Is it possible to make for example an arpeggiator with AUV3 support with swift playground that can connect with other apps that support midi and midi clock option support?

    You said :
    “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.”

    This means that I have to write the codes by xcode for example and then by apple developers I can use it on my device but only for myself if I don't want to pay money to apple ?

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

    It means that the designed app must be registered at least in apple developer so that we can use it personally on our device ?

  • wimwim
    edited November 2024

    @pejman said:
    It means that the designed app must be registered at least in apple developer so that we can use it personally on our device ?

    Yes. Unless you build it in Swift Playgrounds, then you can run it from within the Playgrounds app.

  • @pejman said:
    Is it possible to make for example an arpeggiator with AUV3 support with swift playground that can connect with other apps that support midi and midi clock option support?

    You can do quite a lot with Mozaic. And it already has all those tedious real-time features built-in. It feeds you MIDI messages one at a time, you can send messages as desired, and you can just focus on the algorithm. You can share your project on PatchStorage, or simply by email. No messing with developer accounts, test codes, and so forth.

  • @pejman said:
    @wim thanks for reply and help .
    Is it possible to make for example an arpeggiator with AUV3 support with swift playground that can connect with other apps that support midi and midi clock option support?

    That would be a huge stretch to do with Swift Playgrounds. I wouldn't waste my time looking into that personally.

  • edited November 2024

    @uncledave said:

    @pejman said:
    Is it possible to make for example an arpeggiator with AUV3 support with swift playground that can connect with other apps that support midi and midi clock option support?

    You can do quite a lot with Mozaic. And it already has all those tedious real-time features built-in. It feeds you MIDI messages one at a time, you can send messages as desired, and you can just focus on the algorithm. You can share your project on PatchStorage, or simply by email. No messing with developer accounts, test codes, and so forth.

    @uncledave
    Hello .Thank you for your guidance. I have been teaching mozaic coding through my good friends @espiegel123 @wim @_ki @McD for a long time and so far I have written 23 patches which is extremely valuable to me, but for some reason I have not uploaded them to patch storage until now .

    But what I mean by making an arpeggiator is a professional arpeggiator, with ability note programming and shift notes earlier than the orginal time. This is impossible in mozaic.

Sign In or Register to comment.