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!

17576788081108

Comments

  • @Krupa said:
    This tells I’m going to do everything in my power to label my knobs as little as possible 😬

    I rest my case. :)

  • @TheOriginalPaulB Sorry, i didn‘t want to offend you. And i understood you wrongly, thought it was meant as another general alternative to the if-cascade labeling topic.

    .

    I myself like to add such complex labels - and for most of the scripts i‘m probably the only user :)

  • _ki_ki
    edited August 2020

    BTW, here the visual results of the above MutatoR code snippets:

    First code snippet was for CHANNEL View:

    Pads summarize the mutations done to each channel, their mode (Apply, Mute, Thu) or output redirection (Apply >> CH) - listing only the active mutations for note drops, velocity or transpose. Thats why there are at least 9 variants. But indeed there are two different layouts for note drops and transposes, resulting in the above number of variants in the if-cascade.

    And the second snippet was for the CONFIG View:


    Configs are either default blank, un-named but different to default or use one of the 18 type descriptions as label.

    There are 13 other views, mostly in 22 knob mode.

    .

    Channel Mode page:

    3 Note Drop pages (animated gif)

    The second of them (Drop Pattern Editor) featuring an visualizer on the righ hand knobs:

    with pattern animation if the hosts timeline is running:

    Two pages for note velocity mutations

    Four pages for note transpose mutations

    SWAP/COPY with different blinking pattern in CONFIG View and in CHANNEL View

    And a Help view

    .

    For many of the ‚visual‘ FX i needed to use unicode (for instance the underlining in the Pattern Editor / VIsualizer, the different fonts in the titles and several special chars like » all over the place)

    .

    All in all thats 64 configs for 16 channels with 12 setups per channel (and several config specific things) - around 12000 possible parameters in total , dialed in with the 22 knobs.
    A script complex as this one is only usable (and maybe even user friendly) with complex labeling.

    .

    And yes - i know i‘m quite crazy :p

    .

    Developing such a moster script for such a norrow use-case (needing a multi channel midi setup with pattern generators and sequencers as input). But i use it myself and enjoy the labeling - thats enough reason to script it.

    Since multi-channel midi setups are not commonly used, i will provide a long documentation for the scripts release. And also an AudioBus session containing such a setup to experience what the script can offer. And after trying out, maybe, maybe there will one or two other musicians using MutatoR it in their live jams or sessions.

    Otherwise i just use it myself

  • @_ki said:
    @TheOriginalPaulB Sorry, i didn‘t want to offend you.

    Not a problem.

    And i understood you wrongly, thought it was meant as another general alternative to the if-cascade labeling topic.

    It kinda was... just for the 99% of scripters not coding something as complex as MutatoR. I imagine most scripts only use 1 layout, maybe 2.

  • _ki_ki
    edited August 2020

    I know its a monster script - but hope that for the ‚end-user‘ the MutatoR script is still simple to use and has a clear structure regardless of the more than 12000 possible parameters.

    The CHANNEL View shown above nicely summarizes 192 parameters for each config and since one can ‚name‘ each config (musical part from the given list plus „letter - number“) , it can be easiliy identified and issued on the CONFIG View. Its simple to copy a config, do some further modifications, change the name etc, to extend the jam session. And stuff (configs, channels) can be re-arranged via SWAP operations.

    .

    All these views (ie the summary or swap/copy) originated from using the script and trying to make it more accessible (to myself). I added what i found was lacking.

    There are also tons of ‚shortcuts‘ that are all listed in the documentation. So instead of turning the chan/CONF knob you can double tap it, or double-tap the shift button. There is one thing shown visually on the knob labels (or in the title label), but a different and maybe faster interaction for the experienced user (aehmm, me)

  • @_Ki is what happens when you apply your complete attention to a skill over a period of 10,000 hours.
    What I like is that like "MIDI recordings" of chopin I can copy his techniques without ever mastering
    all the required skills to create it in short order.

    When I want to add some labeling feature or data management trick I "read the masters":

    @_Ki (he's usually working beyond my reading level)
    @Wim often writes and comments his techniques clearly
    and any other script that I use that works like magic

    Any "patch" you download and install in Mozaic is immediately readable. Downloading it on
    a laptop is also an easy way to read it and with @_Ki syntax high-lighting for Textastic you can
    get extra enlightenment. THere's a Textastic app for MacOS from the Mac App Store. You just have to
    change the file extension to .moz from .mozaic. It looks like this in Textastic:

  • _ki_ki
    edited August 2020

    Your SetTimer (just before the @End) seems to miss a parameter, that‘s why the next available line is highlighted in error red .

    And the ... are not allowed chars for starting a line. So the first . is error highlighted and the rest of the line ‚invalidated‘ in purple.

  • _ki_ki
    edited August 2020

    The highlighter follows the Mozaic language very tightly and in several cases i managed to sneak in some error messages: Just place the cursor on the first red character and (in textastic) press shift control P (in Sublime use the Show Context command) to list the current contexts.

    • The ... case it will show ‚_SYNTAX_ERROR:_unexpected_character“ as one of the contexts.

    • For the case with the missing SetTimer parameter, there‘s no such extra handling as the error is detected too late, ie when reaching the end of line or a comment character - maybe in a future version :)

  • BTW: A .mozic file is binary and will contain several chunks of dada blocks in addition to the readable script text, that might be problematic for the text-editor. Its better to load the script into Mozaic, open the script editor, press ‚Select All‘ and then ‚Copy‘ and paste the whole lot into the external text editor.

  • @_ki said:
    Its better to load the script into Mozaic

    I like to download and read scripts on my Mac using your text highlighting for Textastic. The graphic
    above was an example of highlighting from somebodies "Chord Detect" script as displayed in Textastic
    on my Mac.

  • _ki_ki
    edited August 2020

    Just published a single view script:

    Apply Swing applies swing to all midi-streams. Notes around odd 1/16 or 1/8 are shifted to a later beat division:

    Its patchstorage page also contains a link to an AUM session to experiment with this multi channel midi script.

    Look, only 4 knobs with minimal labeling....... but i did smuggle in an optional graph in the log window :)

  • Hiya @brambos - I hope you don’t mind yet another loose thought triggered enhancement suggestion: ability to “inject” midi into the app. We have the nice delayed midi message commands. It would be totally fantastic if Mozaic had a way to internally loop a midi command back into the script. There would be hundreds of uses for this and much code could be saved, particularly where timers are now used.

    Or, or maybe additionally, being able to make a delayed call to an event: Call @Myevent [, <optionaldelay>].

    I can think of sooooo many ways this would cut down on complex code.

  • I finally (yeah!) posted MutatoR :)

    find more information and links to the scripts, its documentation and the demo session in its own thread

    .

    It's my it's my longest and most comprehensive script yet, its near Mozaic's max-script-size limit due to its complex UI featuring 14 different views which hopefully are still easy to use and distinguish.

  • @_ki said:
    I finally (yeah!) posted MutatoR :)

    Can you add a RotatuM mode?

    I'll bet this is going to be a real workhorse controller/generator for a lot of styles.

    Demos! Demos! Demos!
    As always "Free Cookies" are on me for anyone willing to contribute.

    @_ki I put your free cookie at https://www.reddit.com/r/iOSProgramming/
    Bon appetite.

  • Hello everybody,
    maybe someone can help me on this.
    I use an MPE controller, the Seaboard Rise, and I can't get all the expressive dimensions (e.g. slide, glide) when I use the following script:

    @OnMidiInput
    if MIDICommand = 0x90 or MIDICommand = 0x80
    SendMIDIOut MIDIByte1, MIDIByte2 + x, MIDIByte3
    endif
    @End

    The variable x in MIDIByte2 increments the incoming note but for some reason slide and glide don't work.

    Thanks for any suggestion or clarification.

  • _ki_ki
    edited October 2020

    @Darwin Mozaic doesn‘t forward any midi messages by itself and your script snippet only sends out notes info - thereby removing the CCs and other things needed for MPE.

    @OnMidiInput
      if MIDICommand = 0x90 or MIDICommand = 0x80
        SendMIDIOut MIDIByte1, MIDIByte2 + x, MIDIByte3
      else
        SendMIDIThru
      endif
    @End 
    

    The above ‚else‘ part forwarding all other events than NoteOn and NoteOff should help

  • @_ki said:
    @Darwin Mozaic doesn‘t forward any midi messages by itself and your script snippet only sends out notes info - thereby rmoving the CCs and other things needed for MPE.

    @OnMidiInput
      if MIDICommand = 0x90 or MIDICommand = 0x80
        SendMIDIOut MIDIByte1, MIDIByte2 + x, MIDIByte3
      else
        SendMIDIThru
      endif
    @End 
    

    The above ‚else‘ part forwarding all other events than NoteOn and NoteOff should help

    Yes!!! It work now.
    Thank you!

  • Has someone written a Mozaic script that simply records a series of incoming notes (with no timing info) and then sends those notes out in sequence (one per trigger) when a specified trigger is received? The sequence would start again from the beginning when the last in the series is sent out.

  • Sounds simple - but i didn‘t find it in the script list

  • @_ki said:
    Sounds simple - but i didn‘t find it in the script list

    I’m off to write it now.

  • McDMcD
    edited October 2020

    @espiegel123 said:
    Has someone written a Mozaic script that simply records a series of incoming notes (with no timing info) and then sends those notes out in sequence (one per trigger) when a specified trigger is received? The sequence would start again from the beginning when the last in the series is sent out.

    @hypnopad requested this type of triggered sequencer and I think @wim built it. It's called "Hypno Sequence".

  • wimwim
    edited October 2020

    @McD said:

    @espiegel123 said:
    Has someone written a Mozaic script that simply records a series of incoming notes (with no timing info) and then sends those notes out in sequence (one per trigger) when a specified trigger is received? The sequence would start again from the beginning when the last in the series is sent out.

    @hypnopad requested this type of triggered sequencer and I think @wim built it. It's called "Hypno Sequence".

    HypnoSequence is close to this, but missing the sequential recording aspect. You have to tap each step of the sequence then input a note.

  • @wim said:

    @hypnopad requested this type of triggered sequencer and I think @wim built it. It's called "Hypno Sequence".

    HypnoSequence is close to this, but missing the sequential recording aspect. You have to tap each step of the sequence then input a note.

    If your bored that would be a nice enhancement to add a "RECORD START", "RECORD STOP"
    function. I suspect you could pull it off in a few hours if there is room to move about the GUI.
    You might pull it off with a single toggling PAD. But only if you're bored. :^)

  • @espiegel123 - As an alternative, here's a really simple non-coding approach using miRack with the Write-Seq-64 sequencer, replacing the clock input with a midi-trigger in. Disengage Run 1-4 and send on channel 1 to record the sequence. Engage Run 1-4 and send C2 on channel 2 to play back step-wise.

  • @wim Cool idea 👍🏼 and sorry i forgot about the Hypno Sequence. It also was missing on the Mozaic script list on the wiki, so i just added it.

  • wimwim
    edited October 2020

    @_ki said:
    @wim Cool idea 👍🏼 and sorry i forgot about the Hypno Sequence. It also was missing on the Mozaic script list on the wiki, so i just added it.

    Thanks for adding it.

    Do you prefer we update the list ourselves when we post a script, or to maintain the page yourself? Either way is fine with me. B)

  • Same - either way is fine.

    The super-long table is a bit ugly to edit - but breaking it up into sections results in tables with different width columns which look quite bad and disturb reading the entries. I already tried several tricks, but none worked

  • I've added my uber-simple 'TrigSeq' sequencer on patchstorage.

    https://patchstorage.com/trigseq/

    This is an UBERsimple 'sequencer' that lets you have a sequence up to 13 'notes' long. The sequencer has no timing information -- it listens for the MIDI trigger of your choice (CC or Note) and advances the step when the trigger comes in. There is also an optional trigger (currently a MIDI Note) to play the current step without advancing the sequencer.

    For simplicity, this currently just has one page that handles configuration pads and the sequence. I may put some more work in and allow sequences up to 128 steps.

    I use it to send notes to ChordPad (an AUv3 that comes with Tonality) to trigger chords. I play the sequence of notes on my keyboard or guitar -- and then use my Blueboard buttons to advance or repeat steps.

    I tried to be write this to make it easily customizable. I optimized for readability rather than coding efficiency.

  • @drewinnit said:
    @_ki you're a gentleman and a scholar. I really appreciate the time you've taken to help me.

    Your latest code was 99% there, I made two small changes - I inverted the led on and off values, so that the button is lit when it is unmuted, and I also shifted the index value up by 16 - like you mentioned it was affecting the wrong row of buttons. Full code pasted below as reference

    My only remaining question is whether you have a Paypal? I’d love to buy you some beer/coffee to show my appreciation. you've saved me hours of head scratching!

    @OnLoad
      SetShortName {LPLEDS} 
      ShowLayout 2
      LabelPads {Update Launchpad XL LEDs from CC#3  v1}
      LabelKnobs { }
      for knob = 0 to 3
        SetKnobValue knob, 0  
        LabelKnob knob, { }
      endfor  
    
      // LED Sysex 
      //       F0h    00h  20h  29h  02h  11h  78h Tmpl Idx  Val   F7h  
      sysButton[] = [0x00,0x20,0x29,0x02,0x11,0x78,0x00,0x00,0x00]
    
      // LED Color constants (see Launchcontrol XL Midi manual, top of page 4)
      LED_OFF = 62
      LED_ON  = 12   // YELLOW FULL  
    @End
    
    @OnMidiCC
      if MIDIByte2 = 3
        LatchPad MIDIChannel, (MIDIByte3 = 0)
        if MIDIByte3 = 0
          LabelPad MIDIChannel,{Muted}
        else
          LabelPad MIDIChannel, { } 
        endif      
    
        for template = 0 to 2
          sysButton[6] = template
          sysButton[7] = 24 + MIDIChannel // Button index with offset
          if MIDIByte3 = 0
            sysButton[8] = LED_ON
          else
            sysButton[8] = LED_OFF
          endif      
          SendSysex sysButton, 9
        endfor
      endif
    @End
    

    Any chance someone could put this on patchstorage as like "launch control" button LED or something? I am utter crap at coding and sysex takes it to another level of WTF for me. But I'd really like to play with this and get my leds to light up on my launch control in iOS.

  • _ki_ki
    edited October 2020

    @honkimon

    To run the above script, use double tap and mark it all text in the code box by adjusting the selections start and end marker. The choose ‚Copy‘ to store it in the clipboard.

    Now open Mozaic (standalone, in AUM etc) , open the CODE view , double tap to start selecting and then select all the existing code by moving the markers. Choose ‚Paste‘ to insert the copied launch control code.

    Lastly press upload and then save the script using Mozaics save system.

Sign In or Register to comment.