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.

One More Time….(I Read the Manual) …. Mozaic Script; maybe Synth MIDI CC Issue?

OK - so….I play one single note on my violin
It gets converted to a MIDI note through A2M
Then the Mozaic Script below…..takes that one MIDI note and

  • Turns the one note into a chord (to be played on a synth like a string pad)
  • NEW and IMPROVED - it’s supposed oscillate the volume of note 3 and 5 of the chord
  • If I stop the host transporter - it sends a note off for all the notes
  • If I press a pad on the Mozaic plugin in - it sends a note off for all of the notes

HELP NEEDED - in order to oscillate the volume of ONLY the 3rd and 5th notes of the chord, I put them on separate MIDI channels. This allows me to send out a MIDI Volume Change (CC) message just to that specific channel - knowing that the notes on the other channels SHOULD NOT be affected.

PROBLEM - The MIDI CC Volume Change…..seems to affect or turn the volume off on even the root note. I don’t know why it should - the root note of the chord is on MIDI channel zero, and there are no MIDI CC Volume Change messages being sent on that channel

**?? **Is it possible that Moog’s Model 15 takes a MIDI CC message on any channel and applies it to notes that were sent over on a different channel?

T H A N K S~> Code Below

@onLoad
//script level variable that says NO notes have been played
notePlayed = 0

//set up metronome, and LFO to change the velocity

//the two LFOs are for the 3rd note of the chord and the 5th note
SetMetroPPQN 4
SetupLFO 0, 0, 10, no, 0.1 //volume 0 to 10
SetupLFO 1, 56, 82, no, 0.09 //volume 56 to 82

//for testing - I’ll bring the 3rd note of the chord down to almost no volume

@End

@OnHostStart
//script level variable that says NO notes have been played
//this allows me to reset the entire script with starting and stopping the transport
notePlayed = 0
@End

@onMIDINote
//check to see if any notes have been played
//if no notes have been played - play the MIDI note being sent
//along with the note being sent - play a related chord
if notePlayed = 0

    //assign variables for MIDINoteOn commands
    curNote = MIDINote 
    curChannel = 0
    maxVelocity = 127

    //for cello - add in 12 up
    //curNote = (curNote + 12)

    //sendMIDINOteOn for 1,3,5 and 8
    //each note get's its OWN MIDI channel for volume control purposes
    sendMIDINoteOn curChannel, curNote, maxVelocity //root note
    sendMIDINoteOn (curChannel +1), (curNote + 4), (maxVelocity - 20)
  //sendMIDINoteOn (curChannel + 2), (curNote + 7), (maxVelocity - 30)
  //sendMIDINoteOn (curChannel + 3), (curNote + 12),(maxVelocity - 40)

    //RESET logic notePlayed
    notePlayed = 1
else
   //if a note has already been played - then do nothing
endif 

@End

@OnHostStop
if notePlayed = 1
Call @ShutOffPad
endif

//reset the play script variable, so....
//so the pad can restart when I run the transport 
//WITHOUT restarting the session
notePlayed = 0

@End

@OnPadDown
//like a kill switch - it let’s me shut off the string pad manually if something goes wrong
Call @ShutOffPad
@End

@ShutOffPad
// send a Note Off Msg to the synth
// the variables curChannel, curNote were set above
SendMIDINoteOff curChannel, curNote, 0
SendMIDINoteOff (curChannel + 1), (curNote + 4), 0
//SendMIDINoteOff (curChannel + 2), (curNote + 7), 0
//SendMIDINoteOff (curChannel + 3), (curNote + 12), 0

@End

@OnMetroPulse
if notePlayed = 1
//get the value from the LFO and assign it to label
lfo0Value = GetLFOValue 0
lfo1Value = GetLFOValue 1

    //to test out the LFOs change the knob values to watch
    SetKnobValue 0, lfo0Value
    SetKnobValue 1, lfo1Value

    //send MIDI CC Change for the 3rd note
    SendMIDICC (curChannel + 1), 7, lfo0Value

    //send MIDI CC Change for the 5th note
    //SendMIDICC (curChannel + 2), 7, lfo1Value
else
    //do nothing; don't change volume
endif 

@End

Comments

  • @vmusic: what are you sending the volume change and notes to? if the notes are all on the same synth, the volume change is likely not per channel on that synth.

    do some testing of that outside the context of this script. It is generally useful to decouple debugging a script and figuring out what an instrument supports.

  • Yep, unless you are sending MPE, which you're not, then volume is universal, not per note. MPE scripting would be pretty complicated. To do what you want to do, you'd need one instance of Model 15 for each note.

    (Hint: if you place three "backtick" marks on a line by themselves (```) before and after your code, the forum won't mess with the formatting.)

  • Exactly. When a synth listens on multiple MIDI channels ("Omni"), it doesn't separate them into different voices. It just mixes the data into a single stream, then manages the voices in its own way. Using different MIDI channels lets you filter the data going to different apps, by having them listen on different channels. It does not give you any more control over an individual app.

  • Why not load 3 instances of Model 15 in different AUM audio lanes? It's really pretty lightweight, since there's only one copy of the code, with three copies of the data. You could set them to monophonic (one voice) to ensure minimum overhead. Route the script output to all 3 and use AUM's MIDI filtering to send one channel to each instance. You could probably use the LFO inside the synths to do the modulation, simplifying things even more. Remember, when you save an AUM Session, all the configuration will be saved, so you will restore this exactly how you ledt it.

  • Thank you everyone

    I “thought” (boy that gets me into trouble); that if you tell a synth play note A on channel 1, play note B on channel 2 and play note C on channel 3; under the hood the synth is managing 3 channels for you - - - and then any messages you send on a particular channel would ONLY affect that channel or the notes on that channel.

    HHhhhHHhhmmm

    @uncledave - I’ll try the 3 instances of AUM. I’ll have to look on how to set it or load it as monophonic rather than polyphonic to reduce the CPU usage

  • @Vmusic said:
    @uncledave - I’ll try the 3 instances of AUM. I’ll have to look on how to set it or load it as monophonic rather than polyphonic to reduce the CPU usage

    I hope you mean 3 instances of Model 15 in AUM, not 3 instances of AUM.

    Polyphonic is a switch on the "Controller Outputs" panel. Not sure if it would really make a difference, since you're only sending one note at a time, but may not hurt to let it know that in advance.

    Regarding MIDI concepts confusion, you need to remember that MIDI was designed in the '70s to allow daisy-chaining of hardware synths. The channel number lets different components pick commands out of a mixed message stream. Our virtual synth apps implement this same concept, even though we can now use "ports" to route specific streams directly to specific components. This could not have been imagined when MIDI was conceived.

  • OK…. I got it, I got it, I got it.
    I’ve attached an MP3 with my string pad….(uh, stringing you along), and then me noodling on top

    Enjoy - and THANK YOU!! All of you

Sign In or Register to comment.