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!

18384868889108

Comments

  • @espiegel123 said:

    @electri_fire said:

    @hes said:

    This is a first stab at it. Untested, but I think it's close. I'm assuming you're wanting to control the AUM volume faders for each channel.

    Thanks hes,
    When testing, AUM fader1 snaps to maximum, fader2 and fader3 snap to zero, regardless of initial fader settings or Mozaic knob0 position.

    The Mozaic log displays:

    [OnKnobChange] Syntax Error: unknown or invalid argument "GETKNOBVAL"

    Try putting parenthesis around GetKnobValue and its parameter

    (GetKnobValue LastKnob)

    Same result, but now the log sais:

    [OnKnobChange] Syntax Error: unknown or invalid argument "(GETKNOBVAL LASTKNOB)"

  • @electri_fire said:

    @espiegel123 said:

    @electri_fire said:

    @hes said:

    This is a first stab at it. Untested, but I think it's close. I'm assuming you're wanting to control the AUM volume faders for each channel.

    Thanks hes,
    When testing, AUM fader1 snaps to maximum, fader2 and fader3 snap to zero, regardless of initial fader settings or Mozaic knob0 position.

    The Mozaic log displays:

    [OnKnobChange] Syntax Error: unknown or invalid argument "GETKNOBVAL"

    Try putting parenthesis around GetKnobValue and its parameter

    (GetKnobValue LastKnob)

    Same result, but now the log sais:

    [OnKnobChange] Syntax Error: unknown or invalid argument "(GETKNOBVAL LASTKNOB)"

    Try GetKnobValue instead :smile:

  • @brambos said:

    @electri_fire said:

    @espiegel123 said:

    @electri_fire said:

    @hes said:

    This is a first stab at it. Untested, but I think it's close. I'm assuming you're wanting to control the AUM volume faders for each channel.

    Thanks hes,
    When testing, AUM fader1 snaps to maximum, fader2 and fader3 snap to zero, regardless of initial fader settings or Mozaic knob0 position.

    The Mozaic log displays:

    [OnKnobChange] Syntax Error: unknown or invalid argument "GETKNOBVAL"

    Try putting parenthesis around GetKnobValue and its parameter

    (GetKnobValue LastKnob)

    Same result, but now the log sais:

    [OnKnobChange] Syntax Error: unknown or invalid argument "(GETKNOBVAL LASTKNOB)"

    Try GetKnobValue instead :smile:

    Maybe, I shouldn't read code before drinking coffee

  • Try GetKnobValue instead :smile:

    Awsome, now works exactly as I wanted it to, thank you so much all.

  • Hey (first post here)

    i was wondering if there is the possibility to have the knob values updated from, let’s say an AU.

    What I am trying to achieve is: have a 8 or (X) knob/fader controller in Mozaic. Which are mapped to a AU. Then, when I change one mapped value from this AU in the AU.

    I would like to have the knob value in Mozaic also updated.

    The main goal would be, to have a 8 knob controller and some pads, which send notes, so be able to control the 8 macros of an Ableton rack.
    I already got the 8 knobs controlling the 8 macros by a simple User Remote script for Ableton, which automatically controls the first 8 parameters. By switching the Racks (with notes/pads) the knobs in Ableton chance aswell. So it would be quite handy to have the values from the Ableton knobs updated within my Mozaic Controller :)

    I am 99,5% new to coding & already through the manual. I guess this could be done with the getknobvalue but I cannot figure out how to get/read the values from the AU.

    Would be great if someone could help me out a bit.

    Kind regards

    A

  • The knobs in the au would have to send midi out for mozaic to pick it up.
    If you control the au with an external controller then you could route the external controller through mozaic. But picking up what the mouse changed will be impossble if the au does not give midi feedback, wich most do not.

  • Hi
    Please help me .

    I don't know if this question has been asked before or not.
    Mozaic doesn’t save state of knobs faders, ... , in cubasis 2. As midi plugin AUV3 . For example i select one preset , and adjust or change some of knobs as desired . And then close cubasis 2 , When I open cubasis again , there is mozaic with same preset but it exists in default preset mode . There is no this problem in auriapro app . I always use other midi plugins auv3 in Cubasis 2. But they do not have such a problem . Where is the problem? Please help , Because this problem is really annoying .

    Pejman

  • _ki_ki
    edited October 2022

    @pejman

    Mozaic‘s state saving depends on the script.

    In general Moazic saves all faders, knobs, labels etc in the session - but some scripts don‘t ‚guard‘ their variable intialization with an if unassigned xxx and therefore overwrite everything with their own defaults in the OnLoad

  • @_ki said:
    @pejman

    Mozaic‘s state saving depends on the script.

    In general Moazic saves all faders, knobs, labels etc in the session - but some scripts don‘t ‚guard‘ their variable intialization with an if unassigned xxx and therefore overwrite everything with their own defaults in the OnLoad

    Hi ki

    Thank you for your quick reply.

    You are right, But one question remains. Why state saving is the same preset that does not work in cubasis. In auria pro, it saves the situations correctly.?

  • If for the same script state-saving works in Auria Pro, but not in Cubasis that would be weird. Is that script published on patchstorage ?

    Maybe i find the time to have a look - i have both AuriaPro and Cubasis 2/3

  • I just loaded one of my Mozaic scripts (that implement state-save) into the MidiEffects slot of the default midi track of a fresh project, setup some internal settings (knobs, states etc) and closed Cubasis 3. Upon restart of Cubasis, the correct settings were restored.

    Also checked that they were restored when loading another project and then switching back to my MozaicTest project.

  • @_ki said:
    I just loaded one of my Mozaic scripts (that implement state-save) into the MidiEffects slot of the default midi track of a fresh project, setup some internal settings (knobs, states etc) and closed Cubasis 3. Upon restart of Cubasis, the correct settings were restored.

    Also checked that they were restored when loading another project and then switching back to my MozaicTest project.

    I apologize for the delay .

    Yes, I made a mistake somewhere.
    My preset hasn’t ( if unassigned xxx ) and for some of knobs has ( SetKnobValue ) and for some of knobs hasn’t it . Therefore, those knobs that don’t have ( setknobvalue ) are kept in their position ( state saving ) in both cubasis an auria pro . That is, my preset works exactly the same in both cubase and auriapro .
    I’m not a coder . Does adding this ( if unassigned ) in my preset require many changes?
    For having both options ( setknobvalue ) on load and ( if unassigned ) . This preset is for humanizing note delay and random velocity.

    Humaniz with control knobs
    via cc’s

    @Onload

    // change these to the cc's you want to use
    mintimecc = 13
    maxtimecc = 14
    minvelcc = 15
    maxvelcc = 16
    minvaluecc = 17
    maxvaluecc = 18

    ShowLayout 0

    LabelKnobs {humaniz}
    LabelKnob 0, {min time}
    LabelKnob 1, {max time}
    LabelKnob 2, {min vel}
    LabelKnob 3, {max vel}
    LabelKnob 5, {set min value}
    LabelKnob 6, {set max value}

    SetKnobValue 0, 0
    SetKnobValue 5, 0
    SetKnobValue 6, 64
    SetKnobValue 3, 100

    @End

    @OnMidiCC
    if MIDIByte2 = mintimecc
    SetKnobValue 0, MIDIByte3
    elseif MIDIByte2 = maxtimecc
    SetKnobValue 1, MIDIByte3
    elseif MIDIByte2 = minvelcc
    SetKnobValue 2, MIDIByte3
    elseif MIDIByte2 = maxvelcc
    SetKnobValue 3, MIDIByte3
    elseif MIDIByte2 = minvaluecc
    SetKnobValue 5, MIDIByte3
    elseif MIDIByte2 = maxvaluecc
    SetKnobValue 6, MIDIByte3
    else
    // comment this out if you don’t want other cc’s to pass thru
    SendMIDIThru
    endif
    @End

    @OnMIDINoteOn
    Maxval = TranslateScale ( GetKnobValue 6 ), 0, 127, 0, 500
    Minval = TranslateScale ( GetKnobValue 5 ), 0, 127, 0, 500
    delayMax = TranslateScale (GetKnobValue 1), 0, 127, 0, Maxval
    delayMin = TranslateScale (GetKnobValue 0), 0, 127, 0, Minval
    delay = Random delayMin, delayMax
    vel = Random (GetKnobValue 2), (GetKnobValue 3)
    SendMIDINoteOn MIDIChannel, MIDINote, vel, delay

    // remember the delay we're using for Note Off
    SetNoteState MIDIChannel, MIDINote, delay

    @End

    @OnMIDINoteOff
    // get the delay we used for this note
    delay = GetNoteState MIDIChannel, MIDINote
    SendMIDINoteOff MIDIChannel, MIDINote, 0, delay
    @End

  • Hi @pejman - Normally I wouldn't answer a question directed at someone else, but it's been some time since your post, so I expect it's probably late in @_ki 's timezone.

    What you need to do is check the @OnLoad and add something to check whether this is a new load of the script or not. In your case:

      SetKnobValue 0, 0
      SetKnobValue 5, 0
      SetKnobValue 6, 64
      SetKnobValue 3, 100
    

    Should be changed to:

    if Unassigned init
      init = YES
      SetKnobValue 0, 0
      SetKnobValue 5, 0
      SetKnobValue 6, 64
      SetKnobValue 3, 100
    endif
    

    The purpose of this is to make it so those knobs are only set on a brand new load of the script. I chose the name init for the variable we will check to do that, but you can call it anything you like. init has no value when the script is first loaded. It is Unassigned because until that if statement, we haven't assigned it any value.

    Once we drop into the statements inside the if block, we set a value for this variable: init = YES. Now, whenever the script reloads from a saved session, the if block will be skipped and the knobs won't be set to their default value.

    I hope that helps. The manual, page 12, does a much better job of explaining than I can.

  • @wim said:
    Hi @pejman - Normally I wouldn't answer a question directed at someone else, but it's been some time since your post, so I expect it's probably late in @_ki 's timezone.

    Hi @wim .
    Very very thanks for help and useful information 🙏🙏🙏🙏🙏.

  • @wim Thanks for answering/jumping in. I‘m still at work now, so an analysis and answer from my side would have taken some more hours 😀

  • @_ki said:
    @wim Thanks for answering/jumping in. I‘m still at work now, so an analysis and answer from my side would have taken some more hours 😀

    you are the best 🙏🙏🙏🙏

  • Hello friends.

    I have a problem with midiflow forum .

    I have successfully completed the register twice, in midiflow forum, But I can't use the new topic section.

    Every time I press New Topic, this box opens for me

    I can't communicate with them through email either.
    Because their email refers me to their forum, automatically.

    Are there any of you in this forum? that I can communicate with them through you.

    or someone who is related to the developer of midiflow app. ( Johannes ) .
    Please help me .🙏

  • edited February 2023

    Hello,
    I'm I right in thinking that the current event flow is OnNewBeat -> OnMetroPulse -> OnMidiInput ?

    I'm trying to read a note "on the beat" and based on the note, play the note out right away, however because the "pulse" event happens before, I'm getting the note information on pulse late... Is there a different event I should use?

    Thanks

    Edit: seems a way around this is to set a higher PPQN and (re-)trigger the note on the second pulse

  • wimwim
    edited February 2023

    The midi events @OnMidiInput, @OnMidiNote, etc. are completely independent of @OnNewBeat, etc.

    I don't know what you're trying to do, but if all you're trying to do is check a note and send it out under certain conditions, you don't need to involve the metronome at all. Something like this is sufficient.

    Note, examples below were not tested and were typed directly on the forum, so could have syntax and other errors.

    @OnMidiNote
      if MIDINote = <some condition>
        SendMIDIThru
      endif
    @Endif
    

    You only need to involve the metronome if you're trying to detect where the note is in relation to the beat. For this I suggest capturing the system time to a variable when the beat happens and when the note happens, then comparing them.

    @OnLoad
      tolerance = 60  //our tolerance for lateness
    @End
    
    @OnNewBeat
      lastBeat = SystemTime
    @End
    
    @OnMidiNoteOn
      noteOnTime = SystemTime
      if noteOnTime - lastBeat < tolerance
        SendMidiThru
      else
        Log {Sorry bud! Too late.}
      endif
    @End
    

    The script Live Quantize deals with metronome and note timing. It might be worth looking at.

    Oh, and in the comments for that one someone referenced another "accuracy" based script that could be even better. I haven't looked at it myself yet, but ... https://patchstorage.com/midiq/

  • McDMcD
    edited February 2023

    @pejman said:
    Hello friends.

    I have a problem with midiflow forum .

    I have successfully completed the register twice, in midiflow forum, But I can't use the new topic section.

    Every time I press New Topic, this box opens for me

    I can't communicate with them through email either.
    Because their email refers me to their forum, automatically.

    Are there any of you in this forum? that I can communicate with them through you.

    or someone who is related to the developer of midiflow app. ( Johannes ) .
    Please help me .🙏

    It looks like that Forum was mothballed in Nov, 2021. No new posts after that date.
    You should post in this as a new thread here to reach the widest audience of "experts" possible.

    Mozaic lovers are a small group compared to forum.audiob.us members.

  • @wim said:
    The midi events @OnMidiInput, @OnMidiNote, etc. are completely independent of @OnNewBeat, etc.

    I don't know what you're trying to do, but if all you're trying to do is check a note and send it out under certain conditions, you don't need to involve the metronome at all. Something like this is sufficient.

    Note, examples below were not tested and were typed directly on the forum, so could have syntax and other errors.

    @OnMidiNote
      if MIDINote = <some condition>
        SendMIDIThru
      endif
    @Endif
    

    You only need to involve the metronome if you're trying to detect where the note is in relation to the beat. For this I suggest capturing the system time to a variable when the beat happens and when the note happens, then comparing them.

    @OnLoad
      tolerance = 60  //our tolerance for lateness
    @End
    
    @OnNewBeat
      lastBeat = SystemTime
    @End
    
    @OnMidiNoteOn
      noteOnTime = SystemTime
      if noteOnTime - lastBeat < tolerance
        SendMidiThru
      else
        Log {Sorry bud! Too late.}
      endif
    @End
    

    The script Live Quantize deals with metronome and note timing. It might be worth looking at.

    Oh, and in the comments for that one someone referenced another "accuracy" based script that could be even better. I haven't looked at it myself yet, but ... https://patchstorage.com/midiq/

    O love this type of reply... it builds a database of useful clues.

  • edited February 2023

    @wim said:
    The script Live Quantize deals with metronome and note timing. It might be worth looking at.

    Oh, and in the comments for that one someone referenced another "accuracy" based script that could be even better. I haven't looked at it myself yet, but ... https://patchstorage.com/midiq/

    Many thanks @wim

    I'll have to check those examples with a fresh mind, but I really appreciate the detailed answer!

    The solution I came up with seems to work for my use case, but happy to change it if it can be improved. I'll share the script once I finish it.

  • Hey @brambos - fyi there's an error in the documentation and the in-app syntax description for the SendMIDIBankSelect action. They state that the syntax is SendMIDIBankSelect <chan>, <value> [,<delay>] when actually it's SendMIDIBankSelect <chan>, <MSB> ,<LSB>. LSB may be optional, I don't know for sure.

    Took me a couple of hours to figure out what was causing an issue for someone in the Basic MIDI Controls v1.2 script. It turns out that I must have figured this out back when I wrote the script since I was always sending 0 for the MSB, but after all this time I had forgotten.

    So ... posting here for anyone else that might run into this, and so that hopefully it can be corrected if you push an update to the app and docs.

  • _ki_ki
    edited March 2023

    @wim Good find that the Mozaic manual shows a different/wrong definition. The in-app syntax list shows the correct version SendMIDIBankSelect <chan>, <MSB>, <LSB> [,<delay_in_milliseconds>]

    I immediately checked my Mozaic Language Support package: Both the syntax checker and code completion use the in-app definition.

    .

    LSB isn‘t marked as [ optional ]. In case of missing trailing parameters, Mozaic doesn’t produce a syntax error but uses a default value for the parameter - in most cases a zero.

  • @_ki said:
    @wim Good find that the Mozaic manual shows a different/wrong definition. The in-app syntax list shows the correct version SendMIDIBankSelect <chan>, <MSB>, <LSB> [,<delay_in_milliseconds>]

    I immediately checked my Mozaic Language Support package: Both the syntax checker and code completion use the in-app definition.

    .

    LSB isn‘t marked as [ optional ]. In case of missing trailing parameters, Mozaic doesn’t produce a syntax error but uses a default value for the parameter - in most cases a zero.

    Thanks, that clears up a lot! You're right about the in-app syntax checker, I checked it too quickly since I never use it since I edit in Textastic. At the time I did notice your Textastic language support didn't like there not being at least three parameters, so supplied zero there, further confusing my troubleshooting.

    Anyway, thankfully it's all sorted now, and it's only a documentation bug, nothing to worry about in the app.

  • @wim said:

    @_ki said:
    @wim Good find that the Mozaic manual shows a different/wrong definition. The in-app syntax list shows the correct version SendMIDIBankSelect <chan>, <MSB>, <LSB> [,<delay_in_milliseconds>]

    Guys… what apps support “Bank Select”. I recall trying to use the MSB, LSB values for iSymphonic using an update for Xequence(1) that @SevenSystems was so kind to create quickly for me. I couldn’t get it to work but I’d like to try it with Mozaic
    Since I have scripts that I’d like to dial in the right sounds for “Instant Orchestra” purposes.

    @_Ki’s “ MULTI-DIVISI v1.2 ” Mozaic script (which implies splitting a chord across multiple channels/instruments) is perfect in the processing chain to do this. I begged the developer of “Suggester” to add divisi as an output option but he didn’t see a large base for the use case. So, Suggester output into @_Ki’s MULTI-DIVISI v1.2 script routed in Cubasis for creating a multi-channel MIDI file. In AUM you can just route the MULTI-DIVISI v1.2 output to instruments set to focus on specific MIDI channels. Good for any orchestral ensemble you like.

  • wimwim
    edited March 2023

    @McD said:

    @wim said:

    @_ki said:
    @wim Good find that the Mozaic manual shows a different/wrong definition. The in-app syntax list shows the correct version SendMIDIBankSelect <chan>, <MSB>, <LSB> [,<delay_in_milliseconds>]

    Guys… what apps support “Bank Select”. I recall trying to use the MSB, LSB values for iSymphonic using an update for Xequence(1) that @SevenSystems was so kind to create quickly for me. I couldn’t get it to work but I’d like to try it with Mozaic
    Since I have scripts that I’d like to dial in the right sounds for “Instant Orchestra” purposes.

    I don't know which apps specifically make use of MSB but there is a thread about Bank Select support in general. I wearied of looking through it before finding that out.

    The one that I now know does make use of the MSB is DrumJam - sort of. DrumJam actually requires the MSB to select between only setting the kit (MSB=0), Factory Presets (MSB=1), and User Presets (MSB=2). Those high level categories can then have banks within them which are selected with the LSB. Program Change selects presets within the sub-banks.

  • @wim said:
    The one that I now know does make use of the MSB is DrumJam - sort of. DrumJam actually requires the MSB to select between only setting the kit (MSB=0), Factory Presets (MSB=1), and User Presets (MSB=2). Those high level categories can then have banks within them which are selected with the LSB. Program Change selects presets within the sub-banks.

    Nice.I love DrumJam and I bought a lot of these instrument packs down on the bottom left. It will be fun to dial though those instruments to build a nice rhythmic track.

  • I think LayR uses msb and/or lsb

  • @espiegel123 said:
    I think LayR uses msb and/or lsb

    Really. Never clicked with that one but I appreciate the heads up to use it as a shooting target.

Sign In or Register to comment.