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.

The Unofficial Mozaic User Helpline

12357

Comments

  • I just added an "Output Fixed Point Values in Labels" sub chapter to the Mozaic Tips & Tricks wiki page that also covers output of negative values with a single digit of precision.

  • edited August 2021

    Hey all, thanks for helping.
    I’m trying to write an array of random numbers within a range where no number is repeated.
    I tried to make one array with sequential numbers and then assign that to another arrays random slot. It’s mostly working but some slots are skipped. I feel like I need to check if a slot is not assigned and repeat the process but I keep getting myself in infinite loops. Here’s what I have so far… ( 15 slots for example )

    `
    @OnLoad
    for i = 0 to 15
    seq[i] = i
    endfor

    FillArray rnd, -1, 15

    for c = 0 to 15
    r = Random 0, 15
    rnd[r] = seq[c]
    endfor

    for i = 0 to 15
    Log seq[i], {:}, rnd[i]
    endfor
    @
    `

  • xorxor
    edited August 2021

    @FunksMaName said:
    Hey all, thanks for helping.
    I’m trying to write an array of random numbers within a range where no number is repeated.
    I tried to make one array with sequential numbers and then assign that to another arrays random slot. It’s mostly working but some slots are skipped. I feel like I need to check if a slot is not assigned and repeat the process but I keep getting myself in infinite loops. Here’s what I have so far… ( 15 slots for example )

    @OnLoad for i = 0 to 15 seq[i] = i endfor FillArray rnd, -1, 15 for c = 0 to 15 r = Random 0, 15 rnd[r] = seq[c] endfor for i = 0 to 15 Log seq[i], {:}, rnd[i] endfor @

    Here are two different approaches

    @OnLoad
        NumEntries = 16
        LastEntry = 15
    
        // This version uses a bunch of array copies but is guaranteed to complete in knowable time
        for i = 0 to LastEntry
            t[i] = i
        endfor
    
        FillArray r, -1, NumEntries
    
        for i = LastEntry to 1
            x = Random 0, i
            r[i] = t[x]
            if x < i
                CopyArray t[x+1], t[x], i - x
            endif
            // Log {t: }, t[0], {, }, t[1], {, }, t[2], {, }, t[3], {, }, t[4], {, }, t[5], {, }, t[6], {, }, t[7], {, }, t[8], {, }, t[9], {, }, t[10], {, }, t[11], {, }, t[12], {, }, t[13], {, }, t[14], {, }, t[15]
            // Log {r: }, r[0], {, }, r[1], {, }, r[2], {, }, r[3], {, }, r[4], {, }, r[5], {, }, r[6], {, }, r[7], {, }, r[8], {, }, r[9], {, }, r[10], {, }, r[11], {, }, r[12], {, }, r[13], {, }, r[14], {, }, r[15]
    
        endfor
        r[0] = t[0]
    
        Log {r: }, r[0], {, }, r[1], {, }, r[2], {, }, r[3], {, }, r[4], {, }, r[5], {, }, r[6], {, }, r[7], {, }, r[8], {, }, r[9], {, }, r[10], {, }, r[11], {, }, r[12], {, }, r[13], {, }, r[14], {, }, r[15]
    
        // Another way using nested loops that, in theory, might never complete
        FillArray r, -1, NumEntries
        FillArray t, -1, NumEntries
        for i = 0 to LastEntry
            repeat
                x = Random 0, LastEntry
            until t[x] = -1
            r[i] = x
            t[x] = 1
        endfor
    
        Log {r: }, r[0], {, }, r[1], {, }, r[2], {, }, r[3], {, }, r[4], {, }, r[5], {, }, r[6], {, }, r[7], {, }, r[8], {, }, r[9], {, }, r[10], {, }, r[11], {, }, r[12], {, }, r[13], {, }, r[14], {, }, r[15]
    
    
    @End
    
  • @xor thanks heaps! B) o:)

  • Facepalm alert.
    This question may the the midi equivalent to ‘how do I use a spoon?’
    I bought Mozaic as I’d like to play sustained notes in Ravenscroft using the onscreen keyboard in AUM.
    I downloaded the ‘sustain’ patch from patchstorage but cannot figure out how to get any notes to sustain.
    Any pointers would be appreciated.
    Ta 🙃

  • edited November 2021

    On the aum keyboard you can use the infinity button to send sustain.
    For sostenuto I wrote a mozaic script.

  • Hello and thanks @Alfred, if I use the infinity control in AUM then I cannot ‘play’ the notes as I would if I was at my piano at home as I have to deselect a held note before I can play it again.
    I have used touchscaper to play piano and have used the CC64 in the midi setup in order to hold notes, I have also achieved it using 4pockets midimixer by setting one of the user controls to CC64. I was just hoping to find a simple mozaic patch whereby I could load a patch, route it to Ravenscroft and play.
    I know that having sustain on all the time is frowned upon (by my music teacher when I was at school) but that’s all I need.
    I admit that I am not knowledgeable in terms of midi/programming and bought Mozaic based on the generosity of fellow users who kindly upload their creations to patchstorage.
    As always, any suggestions from the forum are greatly appreciated.
    ✌🏻

  • Might I suggest the velocity keyboard au.

  • @rud, first let's check midi routing.
    AUM keyboard should be routed to Mozaic, not to Ravenscroft.
    Mozaic should be routed to Ravenscroft.

    The midi from the AUM keyboard needs to pass through Mozaic before it gets to Ravenscroft.

    If routing is OK and it still doesn't work then we can take it from there.

  • Hello @wim and thank you. Your ‘basic MIDI controls’ patch allowed me to control various features of Rymdigare today and that alone makes buying Mozaic worthwhile for me.
    I tried routing as you suggested but am still unable to sustain notes.
    I have tried different patches, ‘note on sustain’, ‘sustain CC to note’, ‘sustain pedal 1.4’ etc.
    I chose to take a punt on an app that is centred around programming/scripting and I’m totally fine with not understanding, if anything I was curious to explore and see how you folks think and create. In the hours I have spent trying to get sustained notes I could have loaded up midimixer in minutes and spent the rest of the day playing and recording, sometimes I just get carried away with the desire to conquer software.

  • @rud said:
    Hello @wim and thank you. Your ‘basic MIDI controls’ patch allowed me to control various features of Rymdigare today and that alone makes buying Mozaic worthwhile for me.
    I tried routing as you suggested but am still unable to sustain notes.
    I have tried different patches, ‘note on sustain’, ‘sustain CC to note’, ‘sustain pedal 1.4’ etc.
    I chose to take a punt on an app that is centred around programming/scripting and I’m totally fine with not understanding, if anything I was curious to explore and see how you folks think and create. In the hours I have spent trying to get sustained notes I could have loaded up midimixer in minutes and spent the rest of the day playing and recording, sometimes I just get carried away with the desire to conquer software.

    Ok, can you describe your setup then? You mention the AUM keyboard, but not a anything about a sustain pedal. Are you saying that you aren’t using one? If so, then how are you planning to switch sustain on and off?

  • Hello @wim I am not using a sustain pedal as I like to record long, sustained piano sounds. I’ve always preferred it that way, and with playing the harp I’m used to notes ringing out. What I needed was just a way to have CC64 on permanently, which I can do with MidiMixer, but I thought it might be simpler with mozaic. Here’s a screenshot of MidiMixer doing it.
    I hope to use mozaic more for controlling fx parameters (such as rymdigare so that I’m not scrolling from page to page in the app) and your patch was great for this. I will never get the most out of mozaic but that’s ok, like I say, I was just curious to see what it was.
    Thanks, as always, for your knowledge and contributions to the forum.

  • @rud: the script below will do what you want. you will need to change a couple of assignments in the script. I've tried to make it clear what you need to do:

    @OnLoad
      ShowLayout 0
    
      //setup
      defaultChan = 0 //the midi channel to send on -- 0 is midi channel 1
      SetShortName {TOGGLES} //Name that appears in the host for the this plugin
    
      //Label pads to your liking
      LabelPads {Toggles} //this gives a name to the pads area
      // Enter the text to appear in the pad between the curly brackets
      LabelPad 0, {cc49: cab toggle}
      LabelPad 1, {unassigned}
      LabelPad 2, {unassigned}
      LabelPad 3, {unassigned}
    
      //Set up CCs to be associated with the pads
      // between the brackets, enter the number of the pad 
      // on the right side enter the CC number
      padcc[0] = 49 //the first pad sends CC49
      padChan[0]=defaultChan //the channel the message is sent on
      //pad[1]=50
      //padChan[1] = defaultChan //the channel you want to send this cc on
      //pad[2]=51
      //padChan[2] = defaultChan
      //pad[3]=52
      //padChan[3] = defaultChan 
    @End
    
    @OnPadDown
    if LastPad = 0 //currently only pad 0 is looked at. change this if other pads are used
    
     LatchPad 0, not PadState LastPad 
     if padState LastPad
       SendMIDICC padChan[0], padcc[lastPad], 127
     else  
       SendMIDICC padChan[0], padcc[lastPad], 0 
     endif
    endif
    @End 
    
  • Thanks @espiegel123 i always use your Loopy/AUM/Audiobus preset that you shared and now this. The generosity of this forum always makes me grateful to be here.

  • @rud said:
    Thanks @espiegel123 i always use your Loopy/AUM/Audiobus preset that you shared and now this. The generosity of this forum always makes me grateful to be here.

    No problem.I am glad to hear they were useful.

  • edited December 2021

    Is there a easy routine to find what position in an array a value is?
    For example, I'm attempting to LatchPad based on last MIDINote received

    midinotes = [21, 22, 23, 24, 25, 26, 27, 28, 11, 12, 13, 14, 15, 16, 17, 18]

    the above is the same order of labeling the pads 0-15
    the above note array will change throughout the script so later it could be:

    midinotes = [81, 82, 83, 84, 85, 86, 87, 88, 71, 72, 73, 74, 75, 76, 77, 78]
    

    Excuse the greatly simplified code, but I'm looking to do something like:

    if MIDInote = 76
      n = some routine to find its position in the array
      Latchpad n, false
    

    So the result of the above is pad 13 is latched

    The arrays will always be in groups of 16 with the higher numbers on the top row of pads, so a simple i + 1 type routine wont work for the entire array (or at least what my tiny brain is compreneding).

    I can do this with a bunch of if/elseif's, but I was curious if theres a leaner way.

  • @AlmostAnonymous said:
    Is there a easy routine to find what position in an array a value is?
    For example, I'm attempting to LatchPad based on last MIDINote received

    midinotes = [21, 22, 23, 24, 25, 26, 27, 28, 11, 12, 13, 14, 15, 16, 17, 18]

    the above is the same order of labeling the pads 0-15
    the above note array will change throughout the script so later it could be:

    midinotes = [81, 82, 83, 84, 85, 86, 87, 88, 71, 72, 73, 74, 75, 76, 77, 78]
    

    Excuse the greatly simplified code, but I'm looking to do something like:

    if MIDInote = 76
      n = some routine to find its position in the array
      Latchpad n, false
    

    So the result of the above is pad 13 is latched

    The arrays will always be in groups of 16 with the higher numbers on the top row of pads, so a simple i + 1 type routine wont work for the entire array (or at least what my tiny brain is comprehending).

    I can do this with a bunch of if/elseif's, but I was curious if theres a leaner way.

  • wimwim
    edited December 2021

    One way that isn't the most efficient but should be no problem unless your script is doing extremely heavy operations:

    note = 76
    for pad = 0 to 15
      if midinotes[pad] = note
        LatchPad pad,YES
      else
        // Assuming you want other pads unlatched. If not omit the else clause.
        LatchPad pad,NO
      endif
    endfor 
    

    I'm not sure it's "legal" in Mozaic terms, but I think it works to condense this even further if I remember correctly.

    note = 76
    for pad = 0 to 15
      LatchPad pad, (midinotes[pad] = note)
    endfor
    
  • @AlmostAnonymous : scanning the array as wim showed with a for or while is the simplest way

    Another technique is to create a reverse lookup table where the index is the note number and value is the array slot. When you a note to your array, you could add its position in the array to the reverse lookup array. And if a note gets removed from the array, you could assign -1 to its value in the reverse lookup. You would also initialize the reverse lookup’s values to -1

  • Ty gentlemen. I'll give it a whirl.

  • Hello friendly folks,
    I‘m trying to access the faders section of the Launchpad Pro MK3, but so far I‘ve had no luck. I found this old thread and tried to toggle daw mode on and off, which works flawless. But when I try to send the same sysex message from the programmer‘s reference manual, thats supposed to set up fader, nothing happens.

    Disclaimer: I‘m no programmer and hardly understand what all this sysex stuff does.

    Here‘s what I tried:

    @OnLoad
      Log {Welcome to Mozaic}
      ShowLayout 0
      LabelPad 0, {DAW on} 
      LabelPad 1, {Faders} 
      LabelPad 2, {DAW off}  
    
      //DAW Mode
      daw_on = [0x00, 0x20, 0x29, 0x02, 0x0E, 0x10, 0x01]
      daw_off = [0x00, 0x20, 0x29, 0x02, 0x0E, 0x10, 0x00]
      //Faders
      data = [0x00, 0x20, 0x29, 0x02, 0x0E, 0x01, 0x00, 0x00, 0x00, 0x00, 0x07, 0x25, 0x01, 0x01, 0x08, 0x15]   
    
    @End
    
    @OnPadDown
      if (LastPad = 0)
        SendSysex daw_on, 7
      elseif LastPad = 1
        SendSysex  data, 16
      elseif LastPad = 2
        SendSysex daw_off, 7
      endif
    @End 
    

    Do I always have to send the size with the sysex data?
    Is it even possible to access the additional functions via Mozaic?

    Since the advanced LPPMK3 functions for Loopy Pro seem to have a rather low priority on the roadmap, I thought I could hack this in. LK seems to be the only app that gives access to the additional pages of the LPPMk3 at the moment.

  • edited April 2022

    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

  • @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

  • @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    You might contact Novation support...it is possible there is a typo in the manual. Also make sure the firmware is up to date.

  • @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    Did you press the Session button after sending the fader configuration? It looks like sending the sysex for Fader mode sends the mixer config info but doesn't switch to the mixer.

  • @espiegel123 said:

    @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    Did you press the Session button after sending the fader configuration? It looks like sending the sysex for Fader mode sends the mixer config info but doesn't switch to the mixer.

    I was in session mode and I‘m almost certain I switched back and forth between session and custom/sequencer/whatnot. But I‘ll try again tonight.
    I assume that the light for volume at the bottom should light up, but that wasn’t the case.

    Should I open a new thread for this issue?

  • @Artvarg said:

    @espiegel123 said:

    @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    Did you press the Session button after sending the fader configuration? It looks like sending the sysex for Fader mode sends the mixer config info but doesn't switch to the mixer.

    I was in session mode and I‘m almost certain I switched back and forth between session and custom/sequencer/whatnot. But I‘ll try again tonight.
    I assume that the light for volume at the bottom should light up, but that wasn’t the case.

    Should I open a new thread for this issue?

    According to the manual, LPP has 3 MIDI interfaces (ports). Are you sending the fader command to the DAW (third) port? You might be able to send all your commands to both ports 1 and 3. That would avoid tedious stuff on your end.

  • @uncledave said:

    @Artvarg said:

    @espiegel123 said:

    @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    Did you press the Session button after sending the fader configuration? It looks like sending the sysex for Fader mode sends the mixer config info but doesn't switch to the mixer.

    I was in session mode and I‘m almost certain I switched back and forth between session and custom/sequencer/whatnot. But I‘ll try again tonight.
    I assume that the light for volume at the bottom should light up, but that wasn’t the case.

    Should I open a new thread for this issue?

    According to the manual, LPP has 3 MIDI interfaces (ports). Are you sending the fader command to the DAW (third) port? You might be able to send all your commands to both ports 1 and 3. That would avoid tedious stuff on your end.

    Yes, I used the DAW port. I‘ll make sure to use the MIDI port too from now on.

  • @Artvarg said:

    @espiegel123 said:

    @Artvarg said:

    @uncledave said:
    Hi @Artvarg . Yes, you have to specify the size in the SendSysex call, to tell the program how many bytes to send. The size can be a variable, if that helps.

    Mozaic can send any SysEx message, there's no limitation. So you should be able to access any device function. But what the message does is entirely up to the receiver, it has nothing to do with Mozaic at all. If your Faders message doesn't work, it could be that the LPPMK3 needs to be in a different mode.

    Edit: I looked in the LPP manual and your fader message looks correct to me. I assume you are sending it after enabling DAW mode.

    Yes, I‘m sending it when the LPP is in DAW mode.

    Did you press the Session button after sending the fader configuration? It looks like sending the sysex for Fader mode sends the mixer config info but doesn't switch to the mixer.

    I was in session mode and I‘m almost certain I switched back and forth between session and custom/sequencer/whatnot. But I‘ll try again tonight.
    I assume that the light for volume at the bottom should light up, but that wasn’t the case.

    Should I open a new thread for this issue?

    A new thread would make sense.

    Re the fader mode. The manual makes it sound like you the session mode button becomes a toggle after sending the fader sysex. If the button is Green, you are on the clips page. If you press Session again , the button should turn orange to indicate fader mode.

  • @Artvarg : I've started a new thread -- and it has the answer to your problem:

    https://forum.audiob.us/discussion/49989/launchpad-programming/p1?new=1

Sign In or Register to comment.