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.

Request new Mozaic Scripts *HERE*

1373840424369

Comments

  • @Poppadocrock said:

    @wim said:
    @Poppadocrock - Why not simply midi learn the same note or cc to the knob 0 parameter of as many instances as you need? That seems like a more reasonable and scalable approach to me.

    Ok didn’t know that about the presets, thanks.

    Yea I made one for Mononoke, and I added the correct cc values inside the Mozaic script, and uploaded it, but I needed to use 2 instances of Mozaic to cover all the possible parameters. A lot of synths have even more things to be mapped then Mononoke, so I was hoping for a way to be able to map every synth parameter to one Mozaic, hit 1 button, and everything is randomized.

    You can do that? Good idea. But I’m a little Confused.… are you saying still use multiple instances of Mozaic, with the midi cc randomizer loaded up, midi learn the first knob of each to the same note or cc value, so all 3 randomize at the same time? I’ll still need multiple instances but one note or cc will randomize all 3, Correct? That will definitely help.

    You don’t have to do the script, I was just throwing it out there. Actually since this is something I would do in a separate AUM template, not in the middle of a session, I’m not as concerned about cpu usage. I was just hoping to have an all in one solution to basically create random patches on any app. Midi learn or map every possible parameter a synth has and create a random patch, with the press of one button. I know a lot have that feature but some don’t. OBXD, Tal, etc… if you do no rush, thanks for the help.

    I think since there's a good enough workaround I'll take a pass on that. Someone else might be interested in expanding on the original though.

  • @soundtemple said:
    @lukesleepwalker Not sure if this will help https://patchstorage.com/scene-master/
    You can send CH16 notes 0-15 to trigger the visible pads on the screen. So in scenes mode you would send Ch16 Notes 0-7 to change scene.
    It also sends a cc message 109-116 on scene change so if you turn off quantization then you can use it to switch patterns in Drambo or the like.

    Hey, thanks! This looks promising; will give it a whirl if wim’s script doesn’t work out.

  • @wim said:
    @lukesleepwalker - if my understanding of your question is correct, then the script below is a basic implementation.

    @Description
    Basic Demo - light up one of eight pads by white keys starting from note 32 (AUM C2).
    Edit notes and pad labels to suit.
    @End
    
    
    @OnLoad
      notes = [36,38,40,41,43,45,46,47]
      LabelPad 0,{Scene 1}
      LabelPad 1,{Scene 2}
      LabelPad 2,{Scene 3}
      LabelPad 3,{Scene 4}
      LabelPad 4,{Scene 5}
      LabelPad 5,{Scene 6}
      LabelPad 6,{Scene 7}
      LabelPad 7,{Scene 8}
      ShowLayout 2
    @End
    
    @OnMidiNoteOn
    
      idx = -1
      i = 0
      repeat 
        if MIDINote = notes[i]
          idx = i 
        else
          Inc i 
        endif
      until (idx <> -1) or i > 7
      
      if idx <> -1
        for pad = 0 to 7
          LatchPad pad,NO 
        endfor
        Latchpad idx, YES
      endif
    
    @End
    

    OK, gave this one a test drive and put my own data in the script and BOOM! It works perfectly! Thanks a bunch as this is going to make it so much easier for me to remember where I am in my musical noodlings.

  • @wim said:

    @Poppadocrock said:

    @wim said:
    @Poppadocrock - Why not simply midi learn the same note or cc to the knob 0 parameter of as many instances as you need? That seems like a more reasonable and scalable approach to me.

    Ok didn’t know that about the presets, thanks.

    Yea I made one for Mononoke, and I added the correct cc values inside the Mozaic script, and uploaded it, but I needed to use 2 instances of Mozaic to cover all the possible parameters. A lot of synths have even more things to be mapped then Mononoke, so I was hoping for a way to be able to map every synth parameter to one Mozaic, hit 1 button, and everything is randomized.

    You can do that? Good idea. But I’m a little Confused.… are you saying still use multiple instances of Mozaic, with the midi cc randomizer loaded up, midi learn the first knob of each to the same note or cc value, so all 3 randomize at the same time? I’ll still need multiple instances but one note or cc will randomize all 3, Correct? That will definitely help.

    You don’t have to do the script, I was just throwing it out there. Actually since this is something I would do in a separate AUM template, not in the middle of a session, I’m not as concerned about cpu usage. I was just hoping to have an all in one solution to basically create random patches on any app. Midi learn or map every possible parameter a synth has and create a random patch, with the press of one button. I know a lot have that feature but some don’t. OBXD, Tal, etc… if you do no rush, thanks for the help.

    I think since there's a good enough workaround I'll take a pass on that. Someone else might be interested in expanding on the original though.

    That’s cool. Thanks for listening.

  • edited June 2021

    @Ki I just got your email (replied). I certainly didn't mean to insult you by offering some kind of payment, I'm sure your skill and effort is worth far more than what I'd be able to offer. I'm just glad you find the challenge interesting enough to look into. Coffee and Beer whenever we might find ourselves in the same country! If you make it to Cleveland, Ohio let me know!

    I'm going to try and answer your questions and provide more direction. I'll shoot some new video of my updated iPad synth rig to make it more clear on how I use it on a gig.

    I use a Godin Multiac ACS guitar and I feed it's 13pin output into a Fishman Tripleplay via a home made adapter. Here's a link to an old video that I recorded when I first cobbled this system together (before adding Mosaic) This pedal board is normally on the floor, controlled by my feet. I just put it up on a stool for the video.

    Volume for each midi channel would ideally be like a volume knob on a guitar or a fader on a mixing board 0-100%. I wouldn't be changing the individual string volumes by hand while playing. AUM/Mosaic has the ability to save presets and I call them up via midi from my foot pedal as needed. I do this currently to call up presets that mute midi channels, this allows me to have bass on just the bottom 2 strings, then hit a foot switch and have bass on 4 strings etc... I would use the same system to call up different preset tunings, or call up a preset that has bass at 100% volume on the 6th string, 80%on the 5th, 60%on the 4th, 40% on the 3rd, 20% on the 2nd, 10% on the first....

    Today I'm grateful that this crazy world we live in still has people like you in it! I will get more info and updated video relevant to this situation up as soon as possible.

  • @_ki said:
    @erol Got some more questions:

    • Should the mute happen immediately when pressing a channel pad (like in MF&T) or wouldn‘t it be better if one could sustain a note, press the mute without ending the note and the next note on that channel will be muted ? This would free the player of pressing the mute at the correct time or when no note is played. The transpose and volume change also act on the next played note and not modify the current note.

    • Just having written down the previous sentence i had a new idea - wouldn’t it be cool if configuring transpose would act immediately ? IE if one plays a sustained guitar chord and holds a channel pad, turning the transpose knob would end the active note of that channel and change to the new transpose setting. In that way, tuning in a different chord would be super easy. Way better than having to replay the chord for each knob turn to check if the correct offset is found. But i have to check if that behavior is possible or if to many notes are ended/started while turning the knob. Maybe a throttle needs to be implemented, update the transpose only 10 times a sec or so - done in a timer. But in fact it could sound weird, as the other notes of the chord are sustained, but the changed one re-starts with its attack/decay phase.

    • Hmm, could volume also be updated immediately ? I suspect that one would need to retrigger the whole chordset with all active notes to get an impression if the current volume balance between the strings fits.

    • Again regarding the number of available configs. Its easy to expand from 8 to 16 or 32 using a bank knob. But i have no clue how many different tunings/volume settings or mutes makes the most sense. If you only need two or four, having 32 is way too many.

    I'm going to have to shoot some video showing how I use it. You don't have to worry about how many tuning or volume settings to incorporate, as that can all be handled by saving as a preset in AUM/Mosaic . So long as each mid channel can be set to transpose independently, and set to have have different volume (or velocity reduction) independently, then once I get a setting that I like, I can save it as a preset to be called up by my foot pedal. My Antares pedal does alternate tunings for the guitar, and I'd like the synth to match those tunings. One application would be if I hit a Gmajor tuning on the Antares pedal, it would send midi to AUM/Mosaic that would call up a preset matching that tuning on whatever synth I happened to be using.

  • _ki_ki
    edited June 2021

    @erol

    Loading different presets using AUMs midi control should work in the most cases - the only drawback i can imagine is that you never should change scripts/presets while a note is still active - otherwise you will produce hanging notes !

    I just tested this ‚problematic behavior’ with AUM / Mozaic / current version of the midi guitar helper script. The script manipulates the note-offs to match the transposition of corresponding note-on, but for a freshly loaded script there are no active notes, so a note-off on the input will be discarded.

    Switching between configurations handled inside the script doesn‘t have this problem. In the simplest form, there are 8 base presets are remotely switchable by assigning a command (note/CC) to the pad8 - pad15 AUv3 parameters.

    A different, brute-force solution could be to ‚spam‘ the output with all possible note-offs (128 * 6 channels) during the scripts initialization. But some synth don‘t like superfluous note-offs... so i don‘t want to implement this work-around.

  • edited June 2021

    A request to @_ki ... hi :) please could you have a look at your smart chord bass preset, so it state-saves? Kudos for that, thank you, all the best, ## ...

    edit: using it here with '2note: 3' in nanostudio2, greetings

  • _ki_ki
    edited June 2021

    @ccs2 🤪 Aaaaaaaa - i just had a look at the source and it‘s a simple typo. The „if Unasssigned“ statement in the OnLoad tested for a variable that was never assigned, therefore the test will always be true and the default settings are applied even if a state was stored. It should test for „extraWindow“ instead of „window“

    I just uploaded a fixed 1.2 version (after checking that state saving is working now). Thanks for reporting!

  • edited June 2021

    there you go
    thx (:

  • edited June 2021

    @ki

    • What kind of a midi guitar do you have, do other brands of midi guitar also send their strings on different midi channels (seems the obvious way to do it) ?

    I use a Godin Multiac ACS. It has a 13 pin output (Roland systems use) that carries the 6 individual analog string signals. I built an adapter to feed those signals into a Fishman Triple Play unit which does the pitch to midi conversion. Midi is sent the soft synths loaded into AUM on an iPad mini 4th gen iOS 14.6.

    • Regarding the volume, what makes more sense for guitar play - a percentage 1% to 200% or an absolute offset like -64 to +64 ? Both types react a bit different when playing. In CopyCat and MutatoR i decided to use offsets for velocity modification, but also used percentage for humanizations..

    A simple volume knob for each channel or a fader as on mixing console would be best, it could just go 0-100%.

    • Another handy feature could be ‚naming‘ these settings, which in my opinion would be better than labeling them config 1 to config 8. Is my assumption correct, that the scale name feature Mayor,Minor,Lydian, Dorian, etcof Mozaic could come into question ?
      Or is there another list of possible descriptive names for such a mute/transpose combinations ? Could you come up with a list of possible config names ? Or is this comfort feature too far away from what you really need during live play ?

    I don't think there's a need to pre-program the tunings. If the ability to adjust pitch and volume on each channel exists, I would just create the tuning and string volumes I need, and then save it as a preset in AUM/Mosaic. I would then trigger that preset via a midi message from my foot controller. I'm going to make a video of how I do it currently to clarify how I use this.

    THANKS A TON for taking a shot at this! You Rock!

    • Should the mute happen immediately when pressing a channel pad (like in MF&T) or wouldn‘t it be better if one could sustain a note, press the mute without ending the note and the next note on that channel will be muted ? This would free the player of pressing the mute at the correct time or when no note is played. The transpose and volume change also act on the next played note and not modify the current note.

    The mute is simply to filter out midi from the strings that I do not want to activate a synth. For example, using my foot controller, I would trigger a preset at the start of song where I only want midi notes sent from the 5th and 6th string to go to my bass synth in AUM. Mozaic currently does this. But it does not allow transposition of an individual midi channel, or to adjust volume of an individual midi channel. Currently transposition is global and effects all strings equally :(

    • Just having written down the previous sentence i had a new idea - wouldn’t it be cool if configuring transpose would act immediately ? IE if one plays a sustained guitar chord and holds a channel pad, turning the transpose knob would end the active note of that channel and change to the new transpose setting. In that way, tuning in a different chord would be super easy. Way better than having to replay the chord for each knob turn to check if the correct offset is found. But i have to check if that behavior is possible or if to many notes are ended/started while turning the knob. Maybe a throttle needs to be implemented, update the transpose only 10 times a sec or so - done in a timer. But in fact it could sound weird, as the other notes of the chord are sustained, but the changed one re-starts with its attack/decay phase.

    You lost me here. It sounds like a cool idea for automated electronic music, but I'm just in need of simple individual transposition and sensitivity settings that can be turned on or off via a foot controller.

    • Hmm, could volume also be updated immediately ? I suspect that one would need to retrigger the whole chordset with all active notes to get an impression if the current volume balance between the strings fits.

    In my case, I would just want to adjust the volume of each string for a given midi instrument. Probably click the desired preset at the beginning of a song and leave it there.

    • Again regarding the number of available configs. Its easy to expand from 8 to 16 or 32 using a bank knob. But i have no clue how many different tunings/volume settings or mutes makes the most sense. If you only need two or four, having 32 is way too many.

    >
    I don't see the need here? It seems I could save my presets within AUM/Mosaic and then assign them to be called up via midi from my foot controler. I'll make a video to show how I currently do this.

  • @ki
    Here's a video trying to clarify how I would like the Midi Filter and Transpose script to function. Allowing me to change guitar tunings quickly by calling up presets via my midi pedal. https://youtu.be/8xB8w9ZdwY4

  • Hi,
    I’m sure this has been answered, so excuse me in advance…
    How do you organize scripts presets in Mozaic?. All the one I download seem to end up in “User patches” and I’d like to reorganize them.
    Thanks!.

  • edited June 2021

    Alrighty. In an effort to streamline things, I want to see if I can make a Mozaic script for sending program changes to my Elektron boxes. I'm not sure, though, if what I want to do is possible.

    Each of the 16 pads in Layout 2 would be for patterns 1-16 in a respective bank (A-H). Banks are chosen via one of the 4 knobs on the layout. I can easily assign 16 pads to specific patterns, but is there a way to get them to scale with the knob?

    Example: Knob position 1 would let me choose banks A1-A16 from the pads, position 2 would give me banks B1-B16 from the pads, and so on. Here's what I've come up with so far, but it's obviously not working as I'd like or I wouldn't be here asking!

    Also, I know there's probably a way to condense all of this, but I still get hella-lost in this stuff (and I'm just copying and editing code from other scripts I've made or have).

    Oh, and for some reason, when I try and use this in AUM, it's sending everything out on channel 16, not 15. Can't figure out why.

    //SetPrgmchange to Ch15

    @OnLoad
    ShowLayout 2
    LabelPad 0, {01}
    LabelPad 1, {02}
    LabelPad 2, {03}
    LabelPad 3, {04}
    LabelPad 4, {05}
    LabelPad 5, {06}
    LabelPad 6, {07}
    LabelPad 7, {08}
    LabelPad 8, {09}
    LabelPad 9, {10}
    LabelPad 10, {11}
    LabelPad 11, {12}
    LabelPad 12, {13}
    LabelPad 13, {14}
    LabelPad 14, {15}
    LabelPad 15, {16}

    LabelKnob 0, {Bank}
    LabelKnob 1, { }
    LabelKnob 2, { }
    LabelKnob 3, { }

    LabelKnobs {Bank}

    LabelPads {Patterns}

    SetShortName {ElkPtrn}

    @End

    @OnLoad
    default_knob_channel = 15
    default_knob_value = 0
    default_pad_channel = 15

    default_long_press_time = 250

    Call @Init
    @End

    @OnKnobChange
    if LastKnob = 0
    val = GetKnobValue 1
    settings = Round TranslateScale val, 0,127, 0,7
    setting = GetKnobValue 1
    SendMIDIBankSelect 15, setting
    Endif

    if LastKnob = 1
    Endif

    if LastKnob = 2
    Endif

    if LastKnob = 3
    Endif

    @End

    @OnPadDown

    If LastPad = 0
    SendMIDIProgramChange 15, 0
    Endif

    If LastPad = 1
    SendMIDIProgramChange 15, 1
    Endif

    If LastPad = 2
    SendMIDIProgramChange 15, 2
    Endif

    If LastPad = 3
    SendMIDIProgramChange 15, 3
    Endif

    If LastPad = 4
    SendMIDIProgramChange 15, 4
    Endif

    If LastPad = 5
    SendMIDIProgramChange 15, 5
    Endif

    If LastPad = 6
    SendMIDIProgramChange 15, 6
    Endif

    If LastPad = 7
    SendMIDIProgramChange 15, 7
    Endif

    If LastPad = 8
    SendMIDIProgramChange 15, 8
    Endif

    If LastPad = 9
    SendMIDIProgramChange 15, 9
    Endif

    If LastPad = 10
    SendMIDIProgramChange 15, 10
    Endif

    If LastPad = 11
    SendMIDIProgramChange 15, 11
    Endif

    If LastPad = 12
    SendMIDIProgramChange 15, 12
    Endif

    If LastPad = 13
    SendMIDIProgramChange 15, 13
    Endif

    If LastPad = 14
    SendMIDIProgramChange 15, 14
    Endif

    If LastPad = 15
    SendMIDIProgramChange 15, 15
    Endif

    @end

    @OnPadUp

    If LastPad = 0
    SendMIDIProgramChange 15, 0
    Endif

    If LastPad = 1
    SendMIDIProgramChange 15, 1
    Endif

    If LastPad = 2
    SendMIDIProgramChange 15, 2
    Endif

    If LastPad = 3
    SendMIDIProgramChange 15, 3
    Endif

    If LastPad = 4
    SendMIDIProgramChange 15, 4
    Endif

    If LastPad = 5
    SendMIDIProgramChange 15, 5
    Endif

    If LastPad = 6
    SendMIDIProgramChange 15, 6
    Endif

    If LastPad = 7
    SendMIDIProgramChange 15, 7
    Endif

    If LastPad = 8
    SendMIDIProgramChange 15, 8
    Endif

    If LastPad = 9
    SendMIDIProgramChange 15, 9
    Endif

    If LastPad = 10
    SendMIDIProgramChange 15, 10
    Endif

    If LastPad = 11
    SendMIDIProgramChange 15, 11
    Endif

    If LastPad = 12
    SendMIDIProgramChange 15, 12
    Endif

    If LastPad = 13
    SendMIDIProgramChange 15, 13
    Endif

    If LastPad = 14
    SendMIDIProgramChange 15, 14
    Endif

    If LastPad = 15
    SendMIDIProgramChange 15, 15
    Endif

    @end

    @end

  • edited June 2021

    It’s sending on channel 16 because you’re telling it to. Midi channels 1-16 are referenced as 0-15 in Mozaic. Weren’t you trying to do this in TouchOSC?

  • @TheOriginalPaulB said:
    It’s sending on channel 16 because you’re telling it to. Midi channels 1-16 are referenced as 0-15 in Mozaic. Weren’t you trying to do this in TouchOSC?

    Riiiight. Good lord. I'm interested in learning this stuff, but I do it so rarely that I forget certain things, then don't realize I've forgotten them... kind of like my 6th grade students. Haha.

    I got it rocking in TouchOSC, and that's dope for certain things, but since TouchOSC isn't IAA or AU, it's causing some issues with AUM, which is processing some external audio. My 8th gen isn't quite up to par if I want good latency for live processing, it seems.

    Plus, I love having options :)

    Changing the MIDI channel to 14 worked, now I need to find a way to make the pads cycle through 16 values for each bank, somehow. The Elektron devices respond to normal PC 0-127.

  • Which elektron box(s) are you trying to do this with? I've found program change messages to hardware a bit unreliable in mozaic over sending the midi note or sysex needed. They seem to lag a bit, particularly in larger scripts.

  • @AlmostAnonymous said:
    Which elektron box(s) are you trying to do this with? I've found program change messages to hardware a bit unreliable in mozaic over sending the midi note or sysex needed. They seem to lag a bit, particularly in larger scripts.

    Digitone and Digitakt. I wouldn't need to both with all this extra hoohaa if Elektron could get it together to fix their PC bug. How they trying to have us buy and use multiple boxes together and they can't even PC at the same dang time?!

  • @slicetwo said:

    @AlmostAnonymous said:
    Which elektron box(s) are you trying to do this with? I've found program change messages to hardware a bit unreliable in mozaic over sending the midi note or sysex needed. They seem to lag a bit, particularly in larger scripts.

    Digitone and Digitakt. I wouldn't need to both with all this extra hoohaa if Elektron could get it together to fix their PC bug. How they trying to have us buy and use multiple boxes together and they can't even PC at the same dang time?!

    I gave up on elektron after they stopped making silver boxes :P

  • @AlmostAnonymous said:

    @slicetwo said:

    @AlmostAnonymous said:
    Which elektron box(s) are you trying to do this with? I've found program change messages to hardware a bit unreliable in mozaic over sending the midi note or sysex needed. They seem to lag a bit, particularly in larger scripts.

    Digitone and Digitakt. I wouldn't need to both with all this extra hoohaa if Elektron could get it together to fix their PC bug. How they trying to have us buy and use multiple boxes together and they can't even PC at the same dang time?!

    I gave up on elektron after they stopped making silver boxes :P

    Oh man, you're missing out. I've had everything except the Modal stuff and the Rytm, including the MM and OT both twice. I only have the Digi boxes left. The DN is absolutely wonderous, and the DT is pretty great.

  • edited June 2021

    @slicetwo said:

    @AlmostAnonymous said:

    @slicetwo said:

    @AlmostAnonymous said:
    Which elektron box(s) are you trying to do this with? I've found program change messages to hardware a bit unreliable in mozaic over sending the midi note or sysex needed. They seem to lag a bit, particularly in larger scripts.

    Digitone and Digitakt. I wouldn't need to both with all this extra hoohaa if Elektron could get it together to fix their PC bug. How they trying to have us buy and use multiple boxes together and they can't even PC at the same dang time?!

    I gave up on elektron after they stopped making silver boxes :P

    Oh man, you're missing out. I've had everything except the Modal stuff and the Rytm, including the MM and OT both twice. I only have the Digi boxes left. The DN is absolutely wonderous, and the DT is pretty great.

    I've had them all. Didn't care for the new gen stuff. OT was the last elektron in my book, but its just not my cup of tea.
    Either way, when using mozaic to send program changes to elektron boxes, I got mixed results/latency. I'm not sure how the DT/DN handles it, but my silver boxes faired much better sending the MIDI notes assigned to the patterns (or the sysex).

  • wimwim
    edited June 2021

    @slicetwo - you had some problems in the code, such as having two @init sections, and needing to enclose the TranslateScale and parameters in parenthesis. Here's a more streamlined version with a few enhancements as well. Only lightly tested, and not with any equipment, so there could be issues but it's a starting point anyway.

    Code removed due to change in requirement.
    See updated version ...

  • edited June 2021

    @wim said:
    @slicetwo - you had some problems in the code, such as having two @init sections, and needing to enclose the TranslateScale and parameters in parenthesis. Here's a more streamlined version with a few enhancements as well. Only lightly tested, and not with any equipment, so there could be issues but it's a starting point anyway.

    @Description
    Demo. Send Program Change 0-15 from the pads, Bank Select 0-3 from Knob 0
    @End
    
    
    @OnLoad
      default_channel = 15
      default_bank = 0
      default_program = 0
    
      if Unassigned init 
        // Only do this stuff on a new load so that the 
        // State is the same in saved sessions
        init = YES
        
        ch = default_channel
        bank = default_bank
        program = default_program
        
        SetKnobValue 0,bank 
        LabelKnob 0,{Bank }, bank
            
        Call @ClearPads
      endif
      
      LabelPad 0, {01}
      LabelPad 1, {02}
      LabelPad 2, {03}
      LabelPad 3, {04}
      LabelPad 4, {05}
      LabelPad 5, {06}
      LabelPad 6, {07}
      LabelPad 7, {08}
      LabelPad 8, {09}
      LabelPad 9, {10}
      LabelPad 10, {11}
      LabelPad 11, {12}
      LabelPad 12, {13}
      LabelPad 13, {14}
      LabelPad 14, {15}
      LabelPad 15, {16}
      
      LabelKnob 0, {Bank }, bank
      LabelKnob 1, { }
      LabelKnob 2, { }
      LabelKnob 3, { }
      
      LabelKnobs {Bank}
      LabelPads {Patterns}
      
      SetShortName {ElkPtrn}
      
      ShowLayout 2
        
    @End
    
    @OnKnobChange
    
      knob = LastKnob
      val = GetKnobValue LastKnob
    
      if knob = 0
        old_bank = bank
        bank = Round (TranslateScale val, 0,127, 0,7)
        
        if bank <> old_bank
          // No sense sending a bunch of bank selects as the knob is moved if it hasn't
          // actually changed the value yet due to scaling
          SendMIDIBankSelect ch,bank,0
          LabelKnob knob,{Bank }, bank
          Call @ClearPads
        endif
      endif
      
    @End
    
    @OnPadDown
      program = LastPad
      
      Call @ClearPads
      Latchpad program, YES 
      SendMIDIProgramChange ch,program
    
    @end
    
    @ClearPads
      // Blank all pads
      for idx = 0 to 15
        LatchPad idx,NO 
      endfor
    @End
    

    Unfortunately, it didn't work. It still keeps the pads at their original 0-15 instead of advancing them to the next set of 16 values. I appreciate the attempt. I'll try and read the manual more. Programming is one of those things I really struggle to wrap my head around. It's another language, essentially, and I've never been good with languages.

    @AlmostAnonymous to each their own! I do kind of wish I hadn't sold my MD, simply because it's so neat. It just never made it into any songs and I could use it to fund other gear that was more useful for my flow. I hated on both Digis when they were first released, and I only got the DT in a trade for an A4 (which I never really liked). The OT was amazing for what it is, but it didn't do things the way I needed them to be done in order to justify keeping it, and I ended up selling it for more than I paid :)

  • wimwim
    edited June 2021

    @slicetwo said:

    @wim said:

    Unfortunately, it didn't work. It still keeps the pads at their original 0-15 instead of advancing them to the next set of 16 values. I appreciate the attempt. I'll try and read the manual more. Programming is one of those things I really struggle to wrap my head around. It's another language, essentially, and I've never been good with languages.

    That's going to come down to the line SendMIDIBankSelect ch,bank,0 maybe try changing it to SendMIDIBankSelect ch,0,bank. Just guessing because I don't know what the Digi's need for bank select. Also, the script is sending on midi channel 16 (mozaic 15). You said something about changing it to 14 earlier? Maybe that has something to do with it.

    if you can capture a bank select and program change that works from something else and post it here I might be able to better pinpoint.

  • @wim said:

    @slicetwo said:

    @wim said:

    Unfortunately, it didn't work. It still keeps the pads at their original 0-15 instead of advancing them to the next set of 16 values. I appreciate the attempt. I'll try and read the manual more. Programming is one of those things I really struggle to wrap my head around. It's another language, essentially, and I've never been good with languages.

    That's going to come down to the line SendMIDIBankSelect ch,bank,0 maybe try changing it to SendMIDIBankSelect ch,0,bank. Just guessing because I don't know what the Digi's need for bank select. Also, the script is sending on midi channel 16 (mozaic 15). You said something about changing it to 14 earlier? Maybe that has something to do with it.

    if you can capture a bank select and program change that works from something else and post it here I might be able to better pinpoint.

    I changed the 15 to a 14 after I loaded it up. When I capture PC from the Digis, they're labeled as PC 0-127. No bank select at all.

  • Bankselect messages are in fact cc 0 and cc 32.

    Maybe have a look at my multiChannelProgramChanger script. It does divide the banks in groups of 16.

    https://patchstorage.com/multichannelprogramchanger/

  • @slicetwo said:

    When I capture PC from the Digis, they're labeled as PC 0-127. No bank select at all.
    OK, there's the problem. You don't need bank select at all. You need the knob to change the range of PC's sent from the pads. This should work.

    @Description
    Demo. Send Program Change 0-15 from the pads, Bank Select 0-3 from Knob 0
    @End
    
    
    @OnLoad
      default_channel = 15
      default_bank = 0
      default_program = 0
    
      if Unassigned init 
        // Only do this stuff on a new load so that the 
        // State is the same in saved sessions
        init = YES
    
        ch = default_channel
        bank = default_bank
        program = default_program
    
        SetKnobValue 0,bank 
        LabelKnob 0,{Bank }, (bank + 1)
    
        Call @ClearPads
      endif
    
      LabelPad 0, {01}
      LabelPad 1, {02}
      LabelPad 2, {03}
      LabelPad 3, {04}
      LabelPad 4, {05}
      LabelPad 5, {06}
      LabelPad 6, {07}
      LabelPad 7, {08}
      LabelPad 8, {09}
      LabelPad 9, {10}
      LabelPad 10, {11}
      LabelPad 11, {12}
      LabelPad 12, {13}
      LabelPad 13, {14}
      LabelPad 14, {15}
      LabelPad 15, {16}
    
      LabelKnob 0, {Bank }, (bank + 1)
      LabelKnob 1, { }
      LabelKnob 2, { }
      LabelKnob 3, { }
    
      LabelKnobs {Bank}
      LabelPads {Patterns}
    
      SetShortName {ElkPtrn}
    
      ShowLayout 2
    
    @End
    
    @OnKnobChange
    
      knob = LastKnob
      val = GetKnobValue LastKnob
    
      if knob = 0
      bank = Round (TranslateScale val, 0,127, 0,7)
        LabelKnob knob,{Bank }, (bank + 1)
        Call @ClearPads
      endif
    
    @End
    
    @OnPadDown
      program = LastPad
    
      Call @ClearPads
      Latchpad program, YES 
      SendMIDIProgramChange ch, (program + (bank*16))
    
    @end
    
    @ClearPads
    
      // Blank all pads
      for idx = 0 to 15
        LatchPad idx,NO 
      endfor
    
    @End 
    
  • @wim said:

    @slicetwo said:

    When I capture PC from the Digis, they're labeled as PC 0-127. No bank select at all.
    OK, there's the problem. You don't need bank select at all. You need the knob to change the range of PC's sent from the pads. This should work.

    @Description
    Demo. Send Program Change 0-15 from the pads, Bank Select 0-3 from Knob 0
    @End
    
    
    @OnLoad
      default_channel = 15
      default_bank = 0
      default_program = 0
    
      if Unassigned init 
        // Only do this stuff on a new load so that the 
        // State is the same in saved sessions
        init = YES
        
        ch = default_channel
        bank = default_bank
        program = default_program
        
        SetKnobValue 0,bank 
        LabelKnob 0,{Bank }, (bank + 1)
            
        Call @ClearPads
      endif
      
      LabelPad 0, {01}
      LabelPad 1, {02}
      LabelPad 2, {03}
      LabelPad 3, {04}
      LabelPad 4, {05}
      LabelPad 5, {06}
      LabelPad 6, {07}
      LabelPad 7, {08}
      LabelPad 8, {09}
      LabelPad 9, {10}
      LabelPad 10, {11}
      LabelPad 11, {12}
      LabelPad 12, {13}
      LabelPad 13, {14}
      LabelPad 14, {15}
      LabelPad 15, {16}
      
      LabelKnob 0, {Bank }, (bank + 1)
      LabelKnob 1, { }
      LabelKnob 2, { }
      LabelKnob 3, { }
      
      LabelKnobs {Bank}
      LabelPads {Patterns}
      
      SetShortName {ElkPtrn}
      
      ShowLayout 2
        
    @End
    
    @OnKnobChange
    
      knob = LastKnob
      val = GetKnobValue LastKnob
    
      if knob = 0
      bank = Round (TranslateScale val, 0,127, 0,7)
        LabelKnob knob,{Bank }, (bank + 1)
        Call @ClearPads
      endif
      
    @End
    
    @OnPadDown
      program = LastPad
      
      Call @ClearPads
      Latchpad program, YES 
      SendMIDIProgramChange ch, (program + (bank*16))
    
    @end
    
    @ClearPads
    
      // Blank all pads
      for idx = 0 to 15
        LatchPad idx,NO 
      endfor
      
    @End 
    

    Holy shnikees it worked! Last question, is there a way to change the visual to read Bank A-H instead of Bank 1-8? Can Mozaic display letters instead of numbers for changing parameters like that? You just changed my whole game.

  • _ki_ki
    edited June 2021

    @slicetwo

    With a trick ‚mis-using‘ the NoteName function, Moazic can display the letters A-G. To add the H, an extra IF was needed:

    .

    Exchange all 3 occurences of the line
    LabelKnob 0,{Bank }, (bank + 1) or LabelKnob knob,{Bank }, (bank + 1)
    with
    Call @RedrawBankKnob

    And add the following user-function

    @RedrawBankKnob
      if bank = 7
        LabelKnob 0,{Bank H}
      else
        ABCDEFG = [9,11,0,2,4,5,7]    
        LabelKnob 0,{Bank }, (NoteName ABCDEFG[bank], NO)
      endif
    @End
    

    BTW: The first occurence of the LabelKnob 0 inside the If Unassigned isn‘t needed, as the knob label is set afterwards

Sign In or Register to comment.