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.

Any app or widget that will set/alter gate length?

2»

Comments

  • @_ki said:
    @MonkeyDrummer Another question regarding the bypass toggle, you said you wanted to use a blueboard sending out CCs.

    What exactly is send by the blueboard ?

    I'd send a CC#, set up AUM au/midi params to map to the "process=y/n" in Mozaic

    Is the toggling of CC value done by the bluebord (toggling between CC #id 0 and CC #id 123 with two knob presses) or does it kind of send its knob state (pressed => CC #id with value=13, released => CC #id with value = 0) or even responds in yet another way ?

    I'd just do it as use the toggle option in AUM. Midi controller (blueboard, behringer one, etc.) sends say CC20=127 on press. Every time AUM gets that CC, it just toggles the control in Mozaic...

    That would require different handling in the script if.

  • edited April 2023

    @wim said:
    Hey @MonkeyDrummer - you can use AUMs midi busses to get around the bypass routing problems.

    ~~Hmmm... I'll have to check that out... I've not really used the midi bussing in AUM since I kinda developed other processes before it was introduced and have never run into a a spot that made me dig into it. Maybe now I will! :)
    ~~

    OK, I tried it, and I don't see how it will work...

    I have as a midi path

    Midi channel
    Drums->InTheory (cem's app)->MidiBus A

    MidiBus A
    Moz running the note hold script->MidiRoute (App that sends midi to CH12 for my MC707's live/active midi channel)

    If I bypass Moz note hold, then signal just stops
    If I have a parallel route, that results in dup notes

    So I'm not seeing how midibussing helps?

  • _ki_ki
    edited April 2023

    @MonkeyDrummer I remember having seen that toggle option in AUM, but for CCs controlling Mozaics user 0 param or knob 0 or pad 0, i don‘t get that option. Also not when using notes as input event.
    It‘s probabbly only available for boolean parameters.

  • edited April 2023

    @MonkeyDrummer this is my naïve extension from what I understood. If the first knob is at zero then it processes, if it's higher than zero then it just passes messages through. If a note was left latched while processing, playing it again while not processing would still unlatch it because of the Note Off message:

    @OnLoad
      previousNote = -1
      bypass = false
      SetKnobValue 0, 0
      LabelKnob 0, {Bypass}
    @End 
    
    @OnKnobChange
      if GetKnobValue 0 > 0
        bypass = true
      else
        bypass = false
      endif 
    @End 
    
    @OnMidiNoteOn
      if bypass
        Exit
      endif
    
      SendMIDINoteOff MIDIChannel, previousNote
      if previousNote = MIDINote 
        previousNote = -1
      else
        previousNote = MIDINote
        SendMIDIThru
      endif 
    @End
    
    @OnMidiNote
      if bypass
        SendMIDIThru
      endif
    @End 
    
  • @_ki said:
    @MonkeyDrummer I remember having seen that toggle option in AUM, but for CCs controlling Mozaics user 0 param or knob 0 or pad 0, i don‘t get that option. Also not when using notes as input event.
    It‘s probabbly only available for boolean parameters.

    crap.. Yea, I've never bothered to map mozaic stuff... That could be a problem...

  • @Grandbear
    You should ‚guard‘ that SendMIDINoteOff MIDIChannel, previousNote with

    if previous_note >= 0
      SendMIDINoteOff MIDIChannel, previousNote
    endif
    

    Otherwise it will send out a NoteOff note 0 if previous note is inactive (ie -1) due to Mozaics internal parameter value clipping. That spurious NoteOff could disturb a synth/instrument.

    .

    Otherwise it seems fine. Changing to bypass mode should also ‚kill‘ an existing note, perhaps add an OnKnobChange reacting to knob 0 > 0 also with stopping the previous note.

  • @_ki said:
    @Grandbear
    You should ‚guard‘ that SendMIDINoteOff MIDIChannel, previousNote with

    if previous_note >= 0
      SendMIDINoteOff MIDIChannel, previousNote
    endif
    

    Otherwise it will send out a NoteOff note 0 if previous note is inactive (ie -1) due to Mozaics internal parameter value clipping. That spurious NoteOff could disturb a synth/instrument.

    .

    Otherwise it seems fine. Changing to bypass mode should also ‚kill‘ an existing note, perhaps add an OnKnobChange reacting to knob 0 > 0 also with stopping the previous note.

    Yeah I checked and it looks like Mozaic doesn't send anything if the note is out of range so I decided to simplify a bit. Agreed about bypassing, but I guess it's up to @MonkeyDrummer to decide what's the right behavior in this case

  • @Grandbear said:
    @MonkeyDrummer this is my naïve extension from what I understood. If the first knob is at zero then it processes, if it's higher than zero then it just passes messages through. If a note was left latched while processing, playing it again while not processing would still unlatch it because of the Note Off message:

    @OnLoad
      previousNote = -1
      bypass = false
      SetKnobValue 0, 0
      LabelKnob 0, {Bypass}
    @End 
    
    @OnKnobChange
      if GetKnobValue 0 > 0
        bypass = true
      else
        bypass = false
      endif 
    @End 
    
    @OnMidiNoteOn
      if bypass
        Exit
      endif
    
      SendMIDINoteOff MIDIChannel, previousNote
      if previousNote = MIDINote 
        previousNote = -1
      else
        previousNote = MIDINote
        SendMIDIThru
      endif 
    @End
    
    @OnMidiNote
      if bypass
        SendMIDIThru
      endif
    @End 
    

    works great! Now I just need to figure out a way to map a phyz control to the bypass... Maybe I'll have to just set it so one control is CCx=0 and one is CCx=!0

    One thing that needs a fix...

    If there's a note being held, doing a bypass should send a noteoff and reset the script to wait for a noteon once bypass is... bypassed.

  • @Grandbear said:

    @_ki said:
    @Grandbear
    You should ‚guard‘ that SendMIDINoteOff MIDIChannel, previousNote with

    if previous_note >= 0
      SendMIDINoteOff MIDIChannel, previousNote
    endif
    

    Otherwise it will send out a NoteOff note 0 if previous note is inactive (ie -1) due to Mozaics internal parameter value clipping. That spurious NoteOff could disturb a synth/instrument.

    .

    Otherwise it seems fine. Changing to bypass mode should also ‚kill‘ an existing note, perhaps add an OnKnobChange reacting to knob 0 > 0 also with stopping the previous note.

    Yeah I checked and it looks like Mozaic doesn't send anything if the note is out of range so I decided to simplify a bit. Agreed about bypassing, but I guess it's up to @MonkeyDrummer to decide what's the right behavior in this case

    where would that code block go?

  • @MonkeyDrummer I‘ve updated the @OnAUParameter of my script to toggle bypass on every user0 value > 0, so it should work even if the blueboard would send a CC 120 0 for its ‚knob up‘ state which are ignored.

  • @Grandbear said:
    Yeah I checked and it looks like Mozaic doesn't send anything if the note is out of range

    It looks like I was wrong :), so here's the version with the check, and with killing the latched note when bypass is engaged:

    @OnLoad
      previousNote = -1
      bypass = false
      SetKnobValue 0, 0
      LabelKnob 0, {Bypass}
    @End 
    
    @OnKnobChange
      if GetKnobValue 0 > 0
        Call @KillPreviousNote
        bypass = true
      else
        bypass = false
      endif 
    @End 
    
    @OnMidiNoteOn
      if bypass
        Exit
      endif
    
      Call @KillPreviousNote
    
      if previousNote = MIDINote
        previousNote = -1
      else
        previousNote = MIDINote
        SendMIDIThru
      endif 
    @End
    
    @OnMidiNote
      if bypass
        SendMIDIThru
      endif
    @End 
    
    @KillPreviousNote
      if previousNote > -1
        SendMIDINoteOff MIDIChannel, previousNote
      endif
    @End
    
    
  • And that's the end of my lunch break… from my coding job, so I'll let others take over and provide a better implementation of the button→bypass functionality. That was fun!

  • @_ki said:
    @MonkeyDrummer I‘ve updated the @OnAUParameter of my script to toggle bypass on every user0 value > 0, so it should work even if the blueboard would send a CC 120 0 for its ‚knob up‘ state which are ignored.

    Did you upload yours to PS? I don't see anything new there.

  • @Grandbear said:
    And that's the end of my lunch break… from my coding job, so I'll let others take over and provide a better implementation of the button→bypass functionality. That was fun!

    Thank you very much!

  • _ki_ki
    edited April 2023

    Parameter clipping happens for most of Mozaics function parameters. And missing parameters are mostly using the default value 0 and don‘t produce syntax errors as one might expect.


    Some useless facts:
    Using SendMidiNoteOn without any parameters therefor sends a NoteOn for note 0 on channel 0 and SetKnobValue without parameters sets knob 0 to 64.

  • Hopefully sometime soon I'll have a video up showing how I'm using this stuff along with @cem_olcay 's InTheory... I'm basically recreating something I built on the PC with Reaper. But forcing myself to use an ipad to limit the damage I can do. I need a system I can just switch on and play, otherwise I don't. I went WAYYYY too far down the Beardyman rabbit hole before... :)

  • wimwim
    edited April 2023

    @MonkeyDrummer said:

    @wim said:
    Hey @MonkeyDrummer - you can use AUMs midi busses to get around the bypass routing problems.

    ~~Hmmm... I'll have to check that out... I've not really used the midi bussing in AUM since I kinda developed other processes before it was introduced and have never run into a a spot that made me dig into it. Maybe now I will! :)
    ~~

    OK, I tried it, and I don't see how it will work...

    I have as a midi path

    Midi channel
    Drums->InTheory (cem's app)->MidiBus A

    MidiBus A
    Moz running the note hold script->MidiRoute (App that sends midi to CH12 for my MC707's live/active midi channel)

    If I bypass Moz note hold, then signal just stops
    If I have a parallel route, that results in dup notes

    So I'm not seeing how midibussing helps?

    Map an action that disables one bus and at the same time enables the other. Basically set up one midi message to toggle the busses in the opposite direction so that only one is active at a time.

    That said, bypassing in the plugin itself is better because that gives the possibility to deal with stuck-note scenarios.

  • @wim said:

    @MonkeyDrummer said:

    @wim said:
    Hey @MonkeyDrummer - you can use AUMs midi busses to get around the bypass routing problems.

    ~~Hmmm... I'll have to check that out... I've not really used the midi bussing in AUM since I kinda developed other processes before it was introduced and have never run into a a spot that made me dig into it. Maybe now I will! :)
    ~~

    OK, I tried it, and I don't see how it will work...

    I have as a midi path

    Midi channel
    Drums->InTheory (cem's app)->MidiBus A

    MidiBus A
    Moz running the note hold script->MidiRoute (App that sends midi to CH12 for my MC707's live/active midi channel)

    If I bypass Moz note hold, then signal just stops
    If I have a parallel route, that results in dup notes

    So I'm not seeing how midibussing helps?

    Map an action that disables one bus and at the same time enables the other. Basically set up one midi message to toggle the busses in the opposite direction so that only one is active at a time.

    Ahhh! Yea, i do that all the time with audio... Not sure why I brainfarted just because it's midi...

  • wimwim
    edited April 2023

    Here's what I came up with. I know you don't need it, but it'll handle multiple midi channels. Otherwise, a note from another channel would throw things off and cause stuck notes. I don't like to leave those kinds of loose ends. IMPORTANT: the script has no way of knowing when you've played the last note unless you tell it by tapping the "Press to End" pad or the "Bypass" pad.

    Those two pads can be controlled by mapping to the Pad 0 and Pad 1 AUv3 parameters. I already tested with the Blueboard in CC mode.

    @Description
    Monophonic sustain. The last note played will sustain until the next note comes in.
    WARNING: the last note will never shut off. Be sure to Tap the Stop or Bypass pad to stop when done!
    @End
    
    @OnLoad
      lastnote = -1
      lastchan = -1
      bypass = NO
      LabelPad 0,{Bypass: OFF}
      LabelPad 1,{Press to End}
      LabelKnobs {Monophonic Sustain}
      SetShortName {M-SUST}
    @End
    
    @OnMidiNote
      if bypass
        SendMIDIThru
      endif
    @End
    
    @OnMidiNoteOn
      if not bypass
        if lastnote > 0
          SendMIDINoteOff lastchan,lastnote, 0
        endif
        SendMIDIThru
        lastchan = MIDIChannel
        lastnote = MIDINote
      endif
    @End
    
    @OnPadDown
      pad = LastPad
      
      if pad = 0
        bypass = not bypass
        if bypass
          LabelPad 0, {Bypass: ON}
          Call @Stop
        else
          LabelPad 0, {Bypass: OFF}
        endif
      elseif pad = 1
        Call @Stop
      endif
    @End
    
    @Stop
      //Make sure we don't leave any stuck notes
      if lastnote > 0
        SendMIDINoteOff lastchan,lastnote,0
        lastchan = -1
        lastnote = -1
      endif
    @End
    
    @OnMidiInput
     // Pass all but notes through. Notes are handeled above.
      if MIDICommand <> 0x90 and MIDICommand <> 0x80
        SendMIDIThru
      endif
    @End
    
    @OnSysex
      // Send sysex through
      SendSysexThru
    @End
    
  • edited April 2023

    Not meant to be a joke, but Drambo can do it.
    There is the "gate" MIDI module where you can set the gate length related to beat length of the host clock. This looks exactly like what you want.
    I just had the same problem when I wanted decent gate lengths in the MIDI output of my modded Korg Volca Sample. This module did the trick.

  • edited May 2023

    Deleted

  • @Grandbear said:

    @Grandbear said:
    Yeah I checked and it looks like Mozaic doesn't send anything if the note is out of range

    It looks like I was wrong :), so here's the version with the check, and with killing the latched note when bypass is engaged:

    @OnLoad
      previousNote = -1
      bypass = false
      SetKnobValue 0, 0
      LabelKnob 0, {Bypass}
    @End 
    
    @OnKnobChange
      if GetKnobValue 0 > 0
        Call @KillPreviousNote
        bypass = true
      else
        bypass = false
      endif 
    @End 
    
    @OnMidiNoteOn
      if bypass
        Exit
      endif
      
      Call @KillPreviousNote
    
      if previousNote = MIDINote
        previousNote = -1
      else
        previousNote = MIDINote
        SendMIDIThru
      endif 
    @End
    
    @OnMidiNote
      if bypass
        SendMIDIThru
      endif
    @End 
    
    @KillPreviousNote
      if previousNote > -1
        SendMIDINoteOff MIDIChannel, previousNote
      endif
    @End
    
    

    Perhaps I can get a bit more help...?

    I'd like this to work so there's an option to repeat a note and NOT have it kill the sound, but sends a noteoff for lastnote and immediately send a new noteon so I can repeat notes, yet still sustain them.

    I tried to modify this so that knob2 is a toggle to set a variable I called "killer"

    I then modified the code to be:

    if previousNote = MIDINote and killer

    It sounds/works ok when playing live on my synth (MC-707) but when I record into the sequence, repeat notes seem to be recording with no length... I think with my modification it's sending a noteoff before it sends the repeated note on... or something...

    How would you modify this so there's an option to kill sound on repeat note or actually repeat the noteon (not just keep playing, because I want to restart the envelopes for the repeat notte)?

  • wimwim
    edited May 2023

    @MonkeyDrummer said:
    I'd like this to work so there's an option to repeat a note and NOT have it kill the sound, but sends a noteoff for lastnote and immediately send a new noteon so I can repeat notes, yet still sustain them.

    You can't do that with midi note messages. It the decay has to be implemented in whatever synth you're playing. A note off is a note off. There's no "sustain" information in a midi note message. You could send a sustain (cc 64) message as long as the target synth supports it.

    If you're triggering samples, and the sampler supports "one-shots" then that would work too.

  • @wim said:

    @MonkeyDrummer said:
    I'd like this to work so there's an option to repeat a note and NOT have it kill the sound, but sends a noteoff for lastnote and immediately send a new noteon so I can repeat notes, yet still sustain them.

    You can't do that with midi note messages. It the decay has to be implemented in whatever synth you're playing. A note off is a note off. There's no "sustain" information in a midi note message. You could send a sustain (cc 64) message as long as the target synth supports it.

    If you're triggering samples, and the sampler supports "one-shots" then that would work too.

    I don’t mean sustain in the midi spec sense… I mean just keep playing…

    Soooo… here’s the desired use case.

    Play c4, sends note on, does not send note off
    Play d4, sends c4 note off, sends d4 note on
    Play e4, sends d4 note off, sends e4 note on
    Play e4 (again), sends e4 note off (from above play), sends e4 note on
    Play c4, sends e4 note off, sends c4 note on
    Active “kill mode” so duplicate notes stop the note hold
    Play c4 (duplicate note to above), sends c4 note off, does not play new c4 because it’s duplicated
    At this point we have no notes playing
    Play c4 again, sends c4 note on, does not send note off because nothing was playing
    Deactivate “kill mode”
    Play c4, send c4 note off, play c4
    Etc…

    Like I said, I got this “working” by adding the killer thing, but it’s not sending “good” midi…. I f’d something up I think so it’s sending midi on/off in the wrong order, and while the synth is smart enough to figure it out because it sounds right as I play live, when I look at sequencer data, or even watch it in MIDISpy, something is wrong…

    This is what happens when a drummer gets a taste of being able to actually control things like note lengths! 😂

  • wimwim
    edited May 2023

    @MonkeyDrummer said:

    @wim said:

    @MonkeyDrummer said:
    I'd like this to work so there's an option to repeat a note and NOT have it kill the sound, but sends a noteoff for lastnote and immediately send a new noteon so I can repeat notes, yet still sustain them.

    You can't do that with midi note messages. It the decay has to be implemented in whatever synth you're playing. A note off is a note off. There's no "sustain" information in a midi note message. You could send a sustain (cc 64) message as long as the target synth supports it.

    If you're triggering samples, and the sampler supports "one-shots" then that would work too.

    I don’t mean sustain in the midi spec sense… I mean just keep playing…

    Soooo… here’s the desired use case.

    ✅ Play c4, sends note on, does not send note off
    ✅ Play d4, sends c4 note off, sends d4 note on
    ✅ Play e4, sends d4 note off, sends e4 note on
    ✅ Play e4 (again), sends e4 note off (from above play), sends e4 note on
    ✅ Play c4, sends e4 note off, sends c4 note on
    ❌ Active “kill mode” so duplicate notes stop the note hold
    ❌ Play c4 (duplicate note to above), sends c4 note off, does not play new c4 because it’s duplicated
    At this point we have no notes playing

    I see. The script I provided above does all but the last two. Wouldn't be hard to add, but you're already using a different script, so I'll leave that one be.

    Like I said, I got this “working” by adding the killer thing, but it’s not sending “good” midi…. I f’d something up I think so it’s sending midi on/off in the wrong order, and while the synth is smart enough to figure it out because it sounds right as I play live, when I look at sequencer data, or even watch it in MIDISpy, something is wrong…

    I just took a quick look. Maybe try correcting SendMIDINoteOff MIDIChannel, previousNote to include the mandatory third parameter for velocity: SendMIDINoteOff MIDIChannel, previousNote, 0 to see if that changes anything.

    This is what happens when a drummer gets a taste of being able to actually control things like note lengths! 😂

    Hey, I reckon anything that distracts you from trying to steal your bandmates' girlfriends for a little bit is a good thing. 😉

  • @wim said:

    I see. The script I provided above does all but the last two. Wouldn't be hard to add, but you're already using a different script, so I'll leave that one be.

    It won't hurt anyone's feelings if you modified your version to work like that... :p

  • @MonkeyDrummer said:

    @wim said:

    I see. The script I provided above does all but the last two. Wouldn't be hard to add, but you're already using a different script, so I'll leave that one be.

    It won't hurt anyone's feelings if you modified your version to work like that... :p

    What happens if you make the correction I suggested?

  • @wim said:

    @MonkeyDrummer said:

    @wim said:

    I see. The script I provided above does all but the last two. Wouldn't be hard to add, but you're already using a different script, so I'll leave that one be.

    It won't hurt anyone's feelings if you modified your version to work like that... :p

    What happens if you make the correction I suggested?

    You are a brilliant man!

    Your girlfriend is safe for the moment! B)

    It's weird that made the difference. Thank god there's a midi "standard"!

  • 👍

Sign In or Register to comment.