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!

12930323435106

Comments

  • @wim said:
    Last thought on the arrays issue:

    How would I do something like count the number of assigned cells in an array without if Unassigned array[#]? I can’t check for zero because that might be a valid number in the array.

    I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.

    For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.

    FillArray notes, -1
    
    counter = 0
    for i = 0 to 127
      if notes[i] >= 0 
        Inc counter
      endif
    endfor
    
    Log {The number of used cells is: }, counter
    
  • @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:
    Interesting! I’d say that’s a bug, but perhaps one I should make official behavior? ;)

    I don’t see how it’s a bug. It makes total sense. So yeh, please don’t change it!

    The part that doesn’t make sense is you arbitrarily assign 0 to be returned when there’s in fact no value in a cell. Why 0? Why not 666? Or pi?

    If I don’t assign zero to a cell, I don’t expect to get zero back. Doesn’t make sense to me.

    That's completely true in conventional programming environments. But one of my design strategies was: Mozaic should never crash or stop. So whatever happens, a valid fallback is always provided. In this case it returns a 'safe' value when no value has been provided yet.

    The key reason for this is that Mozaic is a music application, and the last thing you want during a recording session or performance is a pedantic interpreter telling you that there's an error in your code, waiting for you to fix it. A small unexpected (and often unnoticeable) hickup is always preferable over a complete stop :)

    That's also why the script will alway keep running, in spite of 'syntax errors' etc. B)

    Yet, you have no problem throwing an error if a variable that isn’t an array is unassigned. Sorry, that’s inconsistent. But, that’s OK by me. Just saying is all.

    All variables are arrays. That's stated in the manual. There is no distinction between arrays and non-arrays and a variable can be used as both interchangeably. MyNumber simply maps to MyNumber[0]

    @brambos said:

    @wim said:
    Last thought on the arrays issue:

    How would I do something like count the number of assigned cells in an array without if Unassigned array[#]? I can’t check for zero because that might be a valid number in the array.

    I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.

    For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.

    FillArray notes, -1
    
    counter = 0
    for i = 0 to 127
      if notes[i] >= 0 
        Inc counter
      endif
    endfor
    
    Log {The number of used cells is: }, counter
    

    Ok. There are more lines of code needed for many of the things I do this way, but if that’s your design outlook then I had better not buck it.

  • @brambos Why do you think it's a bug that layouts (aka layouts[0]) is assigned but layouts[2] is unassigned?

  • @mojozart said:
    @brambos Why do you think it's a bug that layouts (aka layouts[0]) is assigned but layouts[2] is unassigned?

    Because I intended 'layouts' as a whole (all potentially 1000 cells) to be assigned as soon as the name 'layouts' becomes valid.
    Unassigned was supposed to test if a variable with that name already exists, and not if any of its cells has invalid contents.

  • @brambos said:
    Unassigned was supposed to test if a variable with that name already exists, and not if any of its cells has invalid contents.

    I see. un/assigned wasn't supposed to work with an array index.

  • @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:
    Interesting! I’d say that’s a bug, but perhaps one I should make official behavior? ;)

    I don’t see how it’s a bug. It makes total sense. So yeh, please don’t change it!

    The part that doesn’t make sense is you arbitrarily assign 0 to be returned when there’s in fact no value in a cell. Why 0? Why not 666? Or pi?

    If I don’t assign zero to a cell, I don’t expect to get zero back. Doesn’t make sense to me.

    That's completely true in conventional programming environments. But one of my design strategies was: Mozaic should never crash or stop. So whatever happens, a valid fallback is always provided. In this case it returns a 'safe' value when no value has been provided yet.

    The key reason for this is that Mozaic is a music application, and the last thing you want during a recording session or performance is a pedantic interpreter telling you that there's an error in your code, waiting for you to fix it. A small unexpected (and often unnoticeable) hickup is always preferable over a complete stop :)

    That's also why the script will alway keep running, in spite of 'syntax errors' etc. B)

    Yet, you have no problem throwing an error if a variable that isn’t an array is unassigned. Sorry, that’s inconsistent. But, that’s OK by me. Just saying is all.

    All variables are arrays. That's stated in the manual. There is no distinction between arrays and non-arrays and a variable can be used as both interchangeably. MyNumber simply maps to MyNumber[0]

    @brambos said:

    @wim said:
    Last thought on the arrays issue:

    How would I do something like count the number of assigned cells in an array without if Unassigned array[#]? I can’t check for zero because that might be a valid number in the array.

    I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.

    For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.

    FillArray notes, -1
    
    counter = 0
    for i = 0 to 127
      if notes[i] >= 0 
        Inc counter
      endif
    endfor
    
    Log {The number of used cells is: }, counter
    

    Ok. There are more lines of code needed for many of the things I do this way, but if that’s your design outlook then I had better not buck it.

    Why? I'm genuinely interested in learning how Unassigned makes this shorter/more robust. As I said, I am probably going to formalize the current behavior, but I'd like to know how it's currently being used/perceived.

    Testing for Unassigned is not different or shorter than testing for any other value?

  • wimwim
    edited June 2019

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:
    Interesting! I’d say that’s a bug, but perhaps one I should make official behavior? ;)

    I don’t see how it’s a bug. It makes total sense. So yeh, please don’t change it!

    The part that doesn’t make sense is you arbitrarily assign 0 to be returned when there’s in fact no value in a cell. Why 0? Why not 666? Or pi?

    If I don’t assign zero to a cell, I don’t expect to get zero back. Doesn’t make sense to me.

    That's completely true in conventional programming environments. But one of my design strategies was: Mozaic should never crash or stop. So whatever happens, a valid fallback is always provided. In this case it returns a 'safe' value when no value has been provided yet.

    The key reason for this is that Mozaic is a music application, and the last thing you want during a recording session or performance is a pedantic interpreter telling you that there's an error in your code, waiting for you to fix it. A small unexpected (and often unnoticeable) hickup is always preferable over a complete stop :)

    That's also why the script will alway keep running, in spite of 'syntax errors' etc. B)

    Yet, you have no problem throwing an error if a variable that isn’t an array is unassigned. Sorry, that’s inconsistent. But, that’s OK by me. Just saying is all.

    All variables are arrays. That's stated in the manual. There is no distinction between arrays and non-arrays and a variable can be used as both interchangeably. MyNumber simply maps to MyNumber[0]

    @brambos said:

    @wim said:
    Last thought on the arrays issue:

    How would I do something like count the number of assigned cells in an array without if Unassigned array[#]? I can’t check for zero because that might be a valid number in the array.

    I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.

    For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.

    FillArray notes, -1
    
    counter = 0
    for i = 0 to 127
      if notes[i] >= 0 
        Inc counter
      endif
    endfor
    
    Log {The number of used cells is: }, counter
    

    Ok. There are more lines of code needed for many of the things I do this way, but if that’s your design outlook then I had better not buck it.

    Why? I'm genuinely interested in learning how Unassigned makes this shorter/more robust. As I said, I am probably going to formalize the current behavior, but I'd like to know how it's currently being used/perceived.

    Testing for Unassigned is not different or shorter than testing for any other value?

    Mostly in smaller ways and for perceived (though it sounds like not actual) memory efficiency.

    Let’s say I have an array that I’m going to dump note on messages into, one after the other, until I flush them out and start over by copying an empty array into it. Maybe I’m only going to have at most a dozen. So I fill up a whole array with -1. It seems wasteful. Or maybe I don’t know for sure that -1 is safe. I could point out a few other examples, but they’re trivial code savings, and not worth quibbling about.

    It’s no big deal. It just seems conceptually wrong and inconsistent the way you’ve designed it. There is a difference between the number zero and nothing. A variable that has no value assigned to it is invalid. A cell within an array that has no value assigned to it is a zero. You don’t see the inconsistency in that? I don’t like it when I get back something when I didn’t put there, and I sure didn’t put a zero there. Also, since the first time I learned about Arrays (possibly before you were in elementary school ;) ), I’ve always thought of an array as a collection of variables, not as a variable busted up into little bits. To me a cell is a variable. But, I’m arguing semantics, not anything of practical import.

    As long as I know that’s how it works, I’m fine with it. Old dogs can learn new tricks.

    [edit ...] just read more carefully - that you may formalize that behavior. Sorry, didn’t read that at first. Please don’t change it on my behalf. And sorry if I sound argumentative. It’s past 3:00am and I should not be conversing with anyone in my present state!

  • @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:
    Interesting! I’d say that’s a bug, but perhaps one I should make official behavior? ;)

    I don’t see how it’s a bug. It makes total sense. So yeh, please don’t change it!

    The part that doesn’t make sense is you arbitrarily assign 0 to be returned when there’s in fact no value in a cell. Why 0? Why not 666? Or pi?

    If I don’t assign zero to a cell, I don’t expect to get zero back. Doesn’t make sense to me.

    That's completely true in conventional programming environments. But one of my design strategies was: Mozaic should never crash or stop. So whatever happens, a valid fallback is always provided. In this case it returns a 'safe' value when no value has been provided yet.

    The key reason for this is that Mozaic is a music application, and the last thing you want during a recording session or performance is a pedantic interpreter telling you that there's an error in your code, waiting for you to fix it. A small unexpected (and often unnoticeable) hickup is always preferable over a complete stop :)

    That's also why the script will alway keep running, in spite of 'syntax errors' etc. B)

    Yet, you have no problem throwing an error if a variable that isn’t an array is unassigned. Sorry, that’s inconsistent. But, that’s OK by me. Just saying is all.

    All variables are arrays. That's stated in the manual. There is no distinction between arrays and non-arrays and a variable can be used as both interchangeably. MyNumber simply maps to MyNumber[0]

    @brambos said:

    @wim said:
    Last thought on the arrays issue:

    How would I do something like count the number of assigned cells in an array without if Unassigned array[#]? I can’t check for zero because that might be a valid number in the array.

    I would really use Unassigned only for checking if a variable has been loaded from a saved state. Use another strategy for checking if a cell is taken.

    For example, I often use -1 to indicate if a slot is available when I know values are always in the 0-127 range.

    FillArray notes, -1
    
    counter = 0
    for i = 0 to 127
      if notes[i] >= 0 
        Inc counter
      endif
    endfor
    
    Log {The number of used cells is: }, counter
    

    Ok. There are more lines of code needed for many of the things I do this way, but if that’s your design outlook then I had better not buck it.

    Why? I'm genuinely interested in learning how Unassigned makes this shorter/more robust. As I said, I am probably going to formalize the current behavior, but I'd like to know how it's currently being used/perceived.

    Testing for Unassigned is not different or shorter than testing for any other value?

    Mostly in smaller ways and for perceived (though it sounds like not actual) memory efficiency.

    Let’s say I have an array that I’m going to dump note on messages into, one after the other, until I flush them out and start over by copying an empty array into it. Maybe I’m only going to have at most a dozen. So I fill up a whole array with -1. It seems wasteful. Or maybe I don’t know for sure that -1 is safe. I could point out a few other examples, but they’re trivial code savings, and not worth quibbling about.

    It’s no big deal. It just seems conceptually wrong and inconsistent the way you’ve designed it. There is a difference between the number zero and nothing. A variable that has no value assigned to it is invalid. A cell within an array that has no value assigned to it is a zero. You don’t see the inconsistency in that? I don’t like it when I get back something when I didn’t put there, and I sure didn’t put a zero there. Also, since the first time I learned about Arrays (possibly before you were in elementary school ;) ), I’ve always thought of an array as a collection of variables, not as a variable busted up into little bits. To me a cell is a variable. But, I’m arguing semantics, not anything of practical import.

    As long as I know that’s how it works, I’m fine with it. Old dogs can learn new tricks.

    [edit ...] just read more carefully - that you may formalize that behavior. Sorry, didn’t read that at first. Please don’t change it on my behalf. And sorry if I sound argumentative. It’s past 3:00am and I should not be conversing with anyone in my present state!

    This reminds me of the confusion I had (long time ago) with testing if a string existed (empty or not) in Pascal: you should use if mystr == NULL, in stead of if mystr == "".

  • The most confusing case would be:

    arr[2] = 1

    but:

    Unassigned arr => true (currently)

    Based on this I think it's a bug.

    The language should not allow Unassigned[*] and Unassigned should return false if the variable name has been used in any assignment.

  • Hi
    I post this bug again

    Bug mozaic
    Recently when i load one of the patch of mozaic in cubasis and touch the cubasis virtual keyboard, cubasis crashes. And when I restart cubasis again , this problem is fixed . There is no this problem with other midi plugins like Audio veek or fuge or atom pianoroll .
    There was no this problem before with 1.0.3 version. I think this problem issues 1.0.5 or later .

    IPad Air 2
    Cubasis 2.8
    Mozaic 1.0.8
    Ios 12.1.1

  • @pejman said:
    Hi
    I post this bug again

    Bug mozaic
    Recently when i load one of the patch of mozaic in cubasis and touch the cubasis virtual keyboard, cubasis crashes. And when I restart cubasis again , this problem is fixed . There is no this problem with other midi plugins like Audio veek or fuge or atom pianoroll .
    There was no this problem before with 1.0.3 version. I think this problem issues 1.0.5 or later .

    IPad Air 2
    Cubasis 2.8
    Mozaic 1.0.8
    Ios 12.1.1

    Is this with all scripts? I can’t reproduce this on my iPads and I’ve done some intensive testing in Cubasis the other day.

  • Help
    I need to write script for when i play note or notes on keyboard, mozaic holds them until I play another note or notes, and if new note or notes is / are same previous note or notes mozaic hold them again .

  • @pejman said:
    Help
    I need to write script for when i play note or notes on keyboard, mozaic holds them until I play another note or notes, and if new note or notes is / are same previous note or notes mozaic hold them again .

    @Synthi said:

    @pejman said:
    Hello guys. I have one idea about notes or chords holder ( latch and toggle ), with ( legato and retrig ) mode . Is anyone willing to build this idea? :)

    latch : that’s means, when i press one note or chord , That note is kept/hold automatically, when i press another notes or chord , Previous notes are released , and new notes is kept . Even if the new notes are same previous notes.

    toggle : that’s mean, when I press one note or chord, that notes is kept/ hold automatically, when i press another note or chords, the new notes or chords add to previous notes, and if i press each one of Notes that have already been kept /hold , will be released.

    latch + retrig : every time that press new notes , first , previous notes are released and then new notes are kept/ hold .

    latch + legato : every time that press new notes , first , new notes are hold and then previous notes are released. this option is useful for arpeggiators that ,Being legato or retrig is important to them , for example if i have arpeggiator app that has 32 steps and I change my chords , In the middle of the way 16t step , arpeggiator backs to the first step . But with latch + legato , arpeggiator continues on track .

    And with sustain pedal , can do releasing all the notes every time we need . Because if we use external midi keyboard, and mozaic is in background mode , or ipad is locked , We do not have to back to the screen mode or mozaic , for releasing notes.

    This patch needs to 4 pads : latch, toggle, retrig, legato, and possiblity combines latch with retrig and latch with legato.

    Please help for creating this patch .

    This IS really Usefull!!!! Releasing notes could be sustain pedal or better using a configurable CC

    Hope something like this show up!!

  • edited June 2019

    @brambos said:

    @pejman said:
    Hi
    I post this bug again

    Bug mozaic
    Recently when i load one of the patch of mozaic in cubasis and touch the cubasis virtual

    Is this with all scripts? I can’t reproduce this on my iPads and I’ve done some intensive testing in Cubasis the other day.

    It is complicated to explain.
    I did the test again to see where this happens , Because it does not happen in any situation , I noticed this myself recently too .
    If in one cubasis project that there is any midi plugin mozaic track , and we select one Mozaic Script for first time, there is no this problem.
    But if :
    Step by step:
    1, load cubasis and create new project
    2, create one midi track
    3, select one mozaic patch in cubasis midi effect. It’s ok .
    4, create another midi track ( second track ).
    5, when I select mozaic in cubasis midi effect, shows me this text , that i add screen shot in this post about it .
    6, but after cubasis midi effect warning , cubasis open mozaic GUI .but in cubasis midi plugin dashboard is empty , i add second screen shot about it . And I did not notice this before .
    7, anyway I select one mozaic patch and active cubasis virtual midi keyboard.
    Result: when I touch one of key on virtual keyboard, cubasis is crashes.
    8, close cubasis of ipad screen
    9, Reload cubasis again ,
    Result: in this time mozaic is appears in cubasis midi effect dashboard.and works ok .

    There is no this bug with other plugins . That's why I attributed this problem to mozaic.


  • @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:
    If you just downloaded that one and the view switching is messed up, re-download and reload. There was a space missing in an array assignment. I don’t know how that crept in since it worked fine just prior to uploading. The line layouts[0] = [1,2] should be layouts[0] = [1, 2]

    That space shouldn't make a difference. If so, that's a bug. I'll fix that asap.

    It’s odd because it had to have worked hundreds of times, but not when I just tried it out. Very strange things going on tonight. Sunspots maybe?

    No, I just tried, no space needed there. Just for aesthetic purposes perhaps :)

    And yet, it was working, then it wasn’t working for several tries, I added the space, and it started working again. Beats me!

    I tried this:

    layout[0] = [1,2]
    log layout[0]
    log layout[1]
    log layout[2]
    

    And it gives me the expected outcome ( 1 , 2 , 0 ). Now I'm confused...

    That’s what I was expecting but a few days ago I was getting random floating point values if I accessed something like layout[8] in a SetKnobLabel call. I changed all my array initializations to

    FillArray layout, 0, MaxLayouts
    layout = [5, 7]
    

    Which just feels wrong but worked. I’m guessing the second line is an element-by-element assignment rather than reassigning the layout variable to reference a new array?

  • @xor said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:

    @brambos said:

    @wim said:
    If you just downloaded that one and the view switching is messed up, re-download and reload. There was a space missing in an array assignment. I don’t know how that crept in since it worked fine just prior to uploading. The line layouts[0] = [1,2] should be layouts[0] = [1, 2]

    That space shouldn't make a difference. If so, that's a bug. I'll fix that asap.

    It’s odd because it had to have worked hundreds of times, but not when I just tried it out. Very strange things going on tonight. Sunspots maybe?

    No, I just tried, no space needed there. Just for aesthetic purposes perhaps :)

    And yet, it was working, then it wasn’t working for several tries, I added the space, and it started working again. Beats me!

    I tried this:

    layout[0] = [1,2]
    log layout[0]
    log layout[1]
    log layout[2]
    

    And it gives me the expected outcome ( 1 , 2 , 0 ). Now I'm confused...

    That’s what I was expecting but a few days ago I was getting random floating point values if I accessed something like layout[8] in a SetKnobLabel call. I changed all my array initializations to

    FillArray layout, 0, MaxLayouts
    layout = [5, 7]
    

    Which just feels wrong but worked. I’m guessing the second line is an element-by-element assignment rather than reassigning the layout variable to reference a new array?

    Correct :)

  • wimwim
    edited June 2019

    @pejman said:
    I want to have plugin for when i play chords through another app like ( suggester ) connect to cubasis for example, this plugin can play chords with different start notes and different velocity randomly, like humanizing .
    I need to control or change maximum value of time random from 0-500 and minimum and maximum values of velocity random each one from 0-127 through knobs. But I don’t know how can or write programs.

    @pejman said:

    @wim said:
    [edit] oops. I see you already found it and made the request for modification over on patchstorage.com. I think I could probably make a modified version but don’t know how soon I’ll have time

    Thank you wim for replay .your patch is very interesting for me. I am waiting for modified version.

    Hi @pejman,

    I started to work on this, thinking it would be a pretty straightforward modification. I’ve since discovered that it’s a bigger challenge than I thought. The Chordulator is simple because it only needs to track one note. But to act on chords requires detecting what is actually a chord based on how close together their note-on messages happen. That’s easy enough.

    But then the notes would be scrambled up into different voicings, timing, and probability. In the meantime, the original notes would be released at some point. The relative timing for the release of the notes would be different. Or a different chord might have been triggered, possibly overlapping timing and sharing some of the same notes. This is only one aspect of where things get complicated. It becomes a nightmare trying to track what is going on to assure there are no stuck notes.

    Sorry, I don’t think I’m up for the challenge. Maybe I’ll have a stroke of brilliance and understand how it can be done, but right now I don’t see much chance of success and am putting the idea aside.

    Sorry - I know that’s not what you were hoping to hear. :|

  • edited June 2019

    @wim said:

    Sorry - I know that’s not what you were hoping to hear. :|

    Thanks for informing. No problem. I myself guessed that this is very difficult.
    Because you had to change things from the base.
    But I now have almost the same thing I wanted , of course, thanks to the help of brambos .
    But i am waiting for new perfect patches.
    Thanks.

  • edited June 2019

    @pejman said:

    @brambos said:

    @pejman said:
    Hi
    I post this bug again

    Bug mozaic
    Recently when i load one of the patch of mozaic in cubasis and touch the cubasis virtual

    Is this with all scripts? I can’t reproduce this on my iPads and I’ve done some intensive testing in Cubasis the other day.

    It is complicated to explain.
    I did the test again to see where this happens , Because it does not happen in any situation , I noticed this myself recently too .
    If in one cubasis project that there is any midi plugin mozaic track , and we select one Mozaic Script for first time, there is no this problem.
    But if :
    Step by step:
    1, load cubasis and create new project
    2, create one midi track
    3, select one mozaic patch in cubasis midi effect. It’s ok .
    4, create another midi track ( second track ).
    5, when I select mozaic in cubasis midi effect, shows me this text , that i add screen shot in this post about it .
    6, but after cubasis midi effect warning , cubasis open mozaic GUI .but in cubasis midi plugin dashboard is empty , i add second screen shot about it . And I did not notice this before .
    7, anyway I select one mozaic patch and active cubasis virtual midi keyboard.
    Result: when I touch one of key on virtual keyboard, cubasis is crashes.
    8, close cubasis of ipad screen
    9, Reload cubasis again ,
    Result: in this time mozaic is appears in cubasis midi effect dashboard.and works ok .

    Hi brambos

    Today I discovered the problem .
    I have already created patches in mozaic through cubasis host .but don’t save them to mozaic, I have saved many patches in cubasis midi effect presets only , Because I wanted to write them as experiments and save them temporarily in cubasis midi effect preset.
    and i didn’t save within itself the mozaic presets . And use these presets in some of cubasis projects, but every time that I wanted add another tracks with mozaic plugin to the same project, issue this problem, even SOMETIMES in new cubasis projects , like the project I tested was carefully tested for you yesterday .
    Anyway , We conclude that , if we create mozaic patches in cubasis and save them only in cubasis midi effect presets, and not in mozaic presets, and use them in cubasis midi tracks, every time that open cubasis and open same project and add new midi track with mozaic ,happen this bug , even some times if we want use mozaic in new cubasis projects in second track, like exactly step by step report bug in my previous post , and sometimes doesn’t happen.

    Is this still a mozaic bug or cubasis bug or pejman bug ? :)

  • Wizards! The lot of you! 🧙‍♂️ 🧙‍♂️ 🧙‍♂️

  • edited June 2019

    Greetings!
    Here is a first version of a mozaic script i wrote for myself to use minilab mkII with relative knobs. I've mapped controller's knobs to send values on cc# 11-26 on channels 10-16.

    https://patchstorage.com/relativeccv0-1/

    Not sure if it will be comfortable to use because it require custom controller maps. But for me it works as expected. Finally i can use relative knobs with iOS.
    Here is the description of a script. Sorry for poor english :blush: .

    "
    ( Tested only in AUM )
    This script receives relative cc values from midi controller and outputs them as absolute.

    Input channels must be from 10 to 16
    and cc # must be from 11 to 26

    Script stores last values so when you load up session there will be no jumping values.

    Optionally there are three pads you can use with these functions :
    1) save - store default values for relative cc #11-26 on channels 10-16
    2) load - load stored default values when pressed.
    3) autoload - if this button is lit – script will autoload stored default values when session is loaded

    Example of midi routing setup is on a screenshot
    "
    Didn't had time yet to do a heavy testing with all channels. perhaps there are bugs. but i haven't noticed any yet.

  • wimwim
    edited June 2019

    Hi @brambos, I’m figuring it’s probably not possible for technical reasons, but if it were, being able to name the AU parameters for knobs would be super helpful. Being able to hide selected ones would be too.

  • @brambos; Adding to the feature requests; one thing I'd really like is the notion of a global timestamp, like CurrentTimeMillis in Java.

    I want to be able to do stuff in OnMidiNoteOn like
    SetNoteState 0, note, CurrentTimeMillis

    and then later save note duration on OnMidiNoteOff with something like
    duration = CurrentTimeMillis - (GetNoteState 0, note)

    This would be awesome for things like unquantized looping and similar stuff.

    I realize that this can be "hacked" using my own timers or high PPQN, but that doesn't feel right from a CPU usage perspective and I also have other uses for the Mozaic timer that it's better suited for (like measuring pad hold times using -ki's script).

  • Man I get a headache reading about all you coders!😅🤓🎹🤪❤️❤️❤️❤️☝️

    Loving it though❤️😇🤓

  • wimwim
    edited June 2019

    @Peblin said:
    @brambos; Adding to the feature requests; one thing I'd really like is the notion of a global timestamp, like CurrentTimeMillis in Java.

    I want to be able to do stuff in OnMidiNoteOn like
    SetNoteState 0, note, CurrentTimeMillis

    and then later save note duration on OnMidiNoteOff with something like
    duration = CurrentTimeMillis - (GetNoteState 0, note)

    This would be awesome for things like unquantized looping and similar stuff.

    I realize that this can be "hacked" using my own timers or high PPQN, but that doesn't feel right from a CPU usage perspective and I also have other uses for the Mozaic timer that it's better suited for (like measuring pad hold times using -ki's script).

    Sorry, could be my lack of programming training, but I don’t understand the advantage of this. You would still have to run a loop to check the time constantly to do things, so it seems much same as using the timer. Something like the below seems like it would be just as good, and as many timers as you like could be used.

    @OnLoad
      FillArray timers, 0
      ti = 1
      SetTimerInterval ti 
      //could be a performance problem if this low? set as high as practical.
      StartTimer
    @End
    
    @OnTimer
      timers[0] = timers[0] + ti
      timers[1] = timers[1] + ti
      timers[2] = timers[2] + ti
      if (timers[0]  = 1000)
        Log {Timer 0 did something.}
        timers[0] = 0
      endif
      if (timers[1]  = 5000)
        Log {Timer 1 did something else.}
        timers[1]  =  0
      endif
      if (timers[2] = 20000)
        Log {Timer 2 stopped the clock.}
        StopTimer
        timers[2] = 0
      endif
    @End
    
  • edited June 2019

    Why doesn’t this script work?

    This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.

        @OnShiftDown  
            for nn = 0 to 127
              SendMIDINoteOff 0, nn, 0
            endfor
        @End
    

    The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.

  • @Shabudua said:
    Why doesn’t this script work?

    This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.

        @OnShiftDown  
            for nn = 0 to 127
              SendMIDINoteOff 0, nn, 0
            endfor
        @End
    

    The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.

    Works in Audiobus at 127. Doesn’t work in AUM, just as you said. Maybe too many notes at once for AUM to handle?

  • @wim said:

    @Shabudua said:
    Why doesn’t this script work?

    This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.

        @OnShiftDown  
            for nn = 0 to 127
              SendMIDINoteOff 0, nn, 0
            endfor
        @End
    

    The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.

    Works in Audiobus at 127. Doesn’t work in AUM, just as you said. Maybe too many notes at once for AUM to handle?

    If you put a minuscule pause after each note does it work?

  • edited June 2019

    @espiegel123 said:

    @wim said:

    @Shabudua said:
    Why doesn’t this script work?

    This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.

        @OnShiftDown  
            for nn = 0 to 127
              SendMIDINoteOff 0, nn, 0
            endfor
        @End
    

    The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.

    Works in Audiobus at 127. Doesn’t work in AUM, just as you said. Maybe too many notes at once for AUM to handle?

    If you put a minuscule pause after each note does it work?

    I tried 1ms and it didnt work. I’ll try something higher.

    EDIT: even a pause of 1000ms doesn’t help, using the delay parameter in the SendMIDINoteOff command. Is there another way to implement a pause?

  • @Shabudua said:

    @espiegel123 said:

    @wim said:

    @Shabudua said:
    Why doesn’t this script work?

    This is a simple channel 0 panic button, from page 67 of the Mozaic manual. But when I run it, my ears (and MIDI monitor) say it does absolutely nothing.

        @OnShiftDown  
            for nn = 0 to 127
              SendMIDINoteOff 0, nn, 0
            endfor
        @End
    

    The strange part is, if I change the 127 to a smaller number, like 50, it works exactly as expected: press SHIFT and it sends note-off messages for notes 0 to 50 on channel 0, again as comfirmed by MIDI Monitor (and my ears). I can set it as high as 84 and it still works, but 85 or higher gives me nothing. Can anyone else confirm this? I’m hosting Mozaic in AUM.

    Works in Audiobus at 127. Doesn’t work in AUM, just as you said. Maybe too many notes at once for AUM to handle?

    If you put a minuscule pause after each note does it work?

    I tried 1ms and it didnt work. I’ll try something higher.

    @OnShiftDown
    for nn = 0 to 127
    SendMIDINoteOff 0, nn, 0, nn
    endfor
    @End

    Should work

Sign In or Register to comment.