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!

199100101102103105»

Comments

  • @espiegel123 said:

    @Gravitas said:

    @wim said:
    @Gravitas before resorting to coding, can you clarify why mfxConvert or MIDI Messanger aren’t suitable?

    I don't use or have mfxConvert or MIDI Messenger and I'm not a coder.
    I do have Mozaic and from my perspective it seemed the most suitable tool.

    FWIW, I suspect that an hour or two with Mozaic’s manual would have you most of the way to putting the mozaic script you want together and put you in a position to roll your own for lots of useful things in the future. Bram’s tutorials in the manual are straightforward and your task is pretty straightforward.

    That seems like the way forward for sure.
    I'm in no rush so I'll take some time to out to put it together during my Winter plans.
    Thanks for your assistance guys.

  • wimwim
    edited November 27

    @Gravitas said:
    However rs2000 has suggested a method using Streambyter which seems straightforward.

    Sure, if that's all you need - i.e. a straight PC to CC conversion that isn't configurable per message, something like that would work in either Streambyter or Mozaic.

    If you need to be able to configure which CC and Value is triggered by which PC, then that's more involved (but can still be done in either Mozaic or Streambyter). Also, the original post in the Drambo forum thread mentions bank select. That would complicate things further.

    The devil is in the details, and so far I'm not seeing enough in the way of details to say anything meaningful about the needed solution.

  • @wim said:

    @Gravitas said:
    However rs2000 has suggested a method using Streambyter which seems straightforward.

    Sure, if that's all you need - i.e. a straight PC to CC conversion that isn't configurable per message, something like that would work in either Streambyter or Mozaic.

    If you need to be able to configure which CC and Value is triggered by which PC, then that's more involved (but can still be done in either Mozaic or Streambyter). Also, the original post in the Drambo forum thread mentions bank select. That would complicate things further.

    The devil is in the details, and so far I'm not seeing enough in the way of details to say anything meaningful about the needed solution.

    No problem.

  • A Program Change message is comprised of 2 items:

    Channel, a Value (0-127)

    While a CC message contains 3:

    Channel, CC-number (0-127), Value (0-127)

    You can convert the PC value to the CC or Value (or both I suppose)

    How would you like to create the rules for this conversion? Should CC number be mapped to a Bank Select Value which uses a 7-bit+7-bit scheme (14-bits possible) so only the MSB or LSB should be used.

    Once these questions are clarified a potential approach can be shown and tested for usefulness.

  • @McD said:
    A Program Change message is comprised of 2 items:

    Channel, a Value (0-127)

    While a CC message contains 3:

    Channel, CC-number (0-127), Value (0-127)

    You can convert the PC value to the CC or Value (or both I suppose)

    How would you like to create the rules for this conversion? Should CC number be mapped to a Bank Select Value which uses a 7-bit+7-bit scheme (14-bits possible) so only the MSB or LSB should be used.

    I'm currently going through the Elektron manuals to see how they use PC messages.
    They have two ways of transmitting PC messages,
    one way is for Elektron device to Elektron device
    and the other is user definable per Pattern/Bank.
    I think it's the user definable one that takes up an extra Midi channel.
    I'm not clear on that point yet.

    The conversion process is to convert Elektron PC messages (which are standard PC messages it seems)
    to CC messages that dRambo can respond to.

    PC message X > CC message Y as dRambo can send PC messages
    (yup why doesn't the Elektron user just send PC messages from dRambo? I don't know....)
    anyway getting dRambo to receive PC messages is going to be useful especially when working with DAW's.

    https://elektron.se/wp-content/uploads/2024/10/Syntakt-User-Manual_ENG_OS1.30_241016.pdf

    The midi info is on Page 58 and it's not really that clear.

    "11.3.1 CHAN
    Channel sets the MIDI channel the track sends MIDI data to.
    If you set this parameter to OFF, it turns the MIDI track off.
    Please note that this parameter cannot be parameter locked.
    11.3.2 BANK
    Bank sends a bank change message on CC 0 MSB.
    11.3.3 SBNK
    Sub Bank sends a bank change message on CC 32 LSB.
    11.3.4 PROG
    Program Change sends a Program Change message.
    11.3.5 PB
    Pitch Bend controls the pitch bend data sent on the MIDI track.
    11.3.6 AT
    Aftertouch controls the aftertouch data sent on the MIDI track.
    11.3.7 MW
    Mod Wheel controls the modulation wheel data sent on the MIDI track.
    11.3.8 BC
    Breath controller controls the breath control data sent on the MIDI track."

    What isn't clear to me is whether "CC 0 MSB" and "CC 32 LSB"
    are fixed or variable? and what fixed PC messages are sent out from the Elektron devices.

    I found an explanation here from the Elektronauts forum

    https://www.elektronauts.com/t/understanding-program-change-messages/151587

    @rs2000 suggested this "CX = B0 XX 7F" using Streambyter.

    Once I understand how this works then I should be able to extrapolate it out in Mozaic.

    Once these questions are clarified a potential approach can be shown and tested for usefulness.

    Agreed, hence why I've started going through the manuals and the Elektronauts forum.

  • @McD

    "11.3.4 PROG
    Program Change sends a Program Change message"

    Does this mean that it can send a PC message of a user set value between 0-127?

  • @Gravitas : CC0 and CC32 are bank number selectors. It varies a little bit from device to device how they are interpreted. Theoretically, the "real" bank number CC0 value * 127 + CC32 value

    But some devices and software use only CC0 or CC32. Some use CCO as something like parent bank ID and CC32 as the ID of a sub-bank/folder of the parent.

  • @espiegel123 said:
    @Gravitas : CC0 and CC32 are bank number selectors. It varies a little bit from device to device how they are interpreted. Theoretically, the "real" bank number CC0 value * 127 + CC32 value

    Currently going through stuff online to find out the exact numbers.

    But some devices and software use only CC0 or CC32. Some use CCO as something like parent bank ID and CC32 as the ID of a sub-bank/folder of the parent.

    Thanks for this.

    Currently looking at Arrays in the Mozaic manual.

  • @Gravitas : if you have any array questions, let us know. Arrays is the subject most likely to be a source of confusion for people that haven’t done scripting/coding.

  • McDMcD
    edited November 28

    @Gravitas said:
    @McD

    "11.3.4 PROG
    Program Change sends a Program Change message"

    Does this mean that it can send a PC message of a user set value between 0-127?

    Yes. The Moziac manual provides details for every supported MIDI message type. Sending ProgramChange messages for example:

    SendMIDIProgramChange , [,]

    Description: Sends a MIDI Program Change (PC) message

    Parameters and output:
    The desired MIDI channel (0-15)
    Number of the patch
    Optional delay (in milliseconds) before the MIDI message is sent out. If left out or set to 0, the message is sent out immediately.

    Example:

    @OnLoad
       SendMIDIBankSelect 0, 1
       SendMIDIProgramChange 0, 24 // select patch 24 in bank 1
    @End 
    
  • @McD said:

    @Gravitas said:
    @McD

    "11.3.4 PROG
    Program Change sends a Program Change message"

    Does this mean that it can send a PC message of a user set value between 0-127?

    Yes. The Moziac manual provides details for every supported MIDI message type. Sending ProgramChange messages for example:

    SendMIDIProgramChange , [,]

    Description: Sends a MIDI Program Change (PC) message

    Parameters and output:
    The desired MIDI channel (0-15)
    Number of the patch
    Optional delay (in milliseconds) before the MIDI message is sent out. If left out or set to 0, the message is sent out immediately.

    Example:

    @OnLoad
       SendMIDIBankSelect 0, 1
       SendMIDIProgramChange 0, 24 // select patch 24 in bank 1
    @End
    

    So if I needed to select patch 38 in bank 3 on Midi Ch 9 it would be

    @OnLoad
    SendMIDIBankSelect 0, 3
    SendMIDIProgramChange 9, 38
    @End

    @espiegel123
    Thank you for your offer of assistance.
    Arrays may complicate things unnecessaily so at the moment.
    I think let's get a working version of PC messages > CC messages befoe getting into Array's.

  • edited November 28

    @espiegel123
    Still it looks I will need to learn about Arrays anyway so a quick question for the future,

    In this example from the manual the numbers are fixed,

    notenum = [49, 51, 54, 56, 58, 61, 63, 66]

    what happens if I needed those numbers to be user selectable or input by the user?

    Would that take some form of

    notenum = [a, b, c, d, e, f, g, h]

  • @Gravitas : I’ll get back to you about arrays. I just have a sec.

    I wanted to mention, what we call midi channel 1 is really 0. So midi channel 9 is 8!

  • @espiegel123 said:
    @Gravitas : I’ll get back to you about arrays. I just have a sec.

    No worries.

    I wanted to mention, what we call midi channel 1 is really 0. So midi channel 9 is 8!

    Opps, I forgot about that.

    1-128 is 0-127
    1-16 is 0-15

  • @Gravitas said:
    @espiegel123
    Still it looks I will need to learn about Arrays anyway so a quick question fpr the future,

    In this example from the manual the numbers are fixed,

    notenum = [49, 51, 54, 56, 58, 61, 63, 66]

    what happens if I needed those numbers to be user selectable or input by the user?

    Would that take some form of

    notenum = [a, b, c, d, e, f, g, h]

    Here is a little exercise that I hope will clarify.

    Write a little script that when it loads,

    • sets knob 0 to 60, knob 1 to 61...knob 7 to 67
    • then sets the notenum array so that it has the values of knobs 0 through 7 in slots 0 through 0.

    hint: notenum[0] = GetKnobValue 0

    Then add code so that when a knob is turned, the knob's value is stuffed into the right slot of the notenum array.

    Bonus points for rounding the value when you assign it to the notenum array.

  • edited 1:51AM

    @espiegel123

    Let me focus on PC>CC first.

    You posted this earlier which if I'm reading correctly converts a CC message to a PC message?

    "@OnMidiCC

    If midibyte2 = ccNumberICareAbout
    SendMIDIProgramChange midichannel, midiByte3
    Endif

    @End "

    How is that coded when it's the other way around as in CC message to PC message?

    I found this in regards to PC messages

    https://www.recordingblogs.com/wiki/midi-program-change-message

    it lists the hexidecimal numbers which if I'm not mistaken Mozaic uses

    So I was thinking that it should be something along the lines of

    @OnMidiInput

    whatever the code is for detecting a PC message the closest I found was this in the manual,

    MIDIByte1, MIDIByte2, MIDIByte3
    = MIDIByte1
    = MIDIByte2
    = MIDIByte3
    Description: return the raw data of the incoming MIDI messages.
    Regular (non-sysex) MIDI messages can either 1, 2 or 3 bytes long.
    Check the event type of the incoming MIDI (using MIDICommand)
    to make sure these bytes contain meaningful data.
    Parameters and output:
    Mozaic 1.3 of 62 90
    the raw value (ranging 0-255) of the incoming MIDI event data
    Example:
    @OnMidiNote
    vel = MIDIByte3 // the third byte contains velocity in note messages
    if vel = MIDIVelocity
    Log {That was to be expected}
    endif
    @End

    and then presumably the next bit we need is this to complete the conversion?

    SendMIDICC
    SendMIDICC , , [,]
    Description: Sends a MIDI CC message
    Parameters and output:
    The desired MIDI channel (0-15)
    The CC number you want to change (0-127)
    The value which needs to be sent to the Continuous Controller (0-127)
    Optional delay (in milliseconds) before the MIDI message is sent out. If left out or set
    to 0, the message is sent out immediately.
    Example:
    @OnMetroPulse
    v = GetLFOValue 0 // get the current value of LFO 0
    SendMIDICC 0, 15, v // send the value to MIDI CC 15
    @End

    I also found this whilst browsing which lists PC messages in hexidecimal
    which I think will be useful for creating static PC numbers.

    0x00 = 0
    0x7F = 127

    https://www.recordingblogs.com/wiki/midi-program-change-message

    ..........actually on reading your code would it be

    @OnMidiInput
    If midibyte3 = hexidecimal number
    SendMIDICC , , [,]
    @End

  • @Gravitas :

    To handle a pc event in onMidiInput

    If midiCommand = 192
    // do program change handling
    //midibyte2 has the program number

    endif

  • It can be a bit easier to remember working with with hexadecimal numbers when dealing with @MIDICommand. 0xC0 is the equivalent of 192. The MIDICommands in hex are as follows:

    • 0x80 Note Off
    • 0x90 Note On
    • 0xB0 Continuous Controller (CC)
    • 0xC0 Program Change
    • 0xD0 Aftertouch
    • 0xE0 Pitch Bend

    In my scripts, I prefer if MIDICommand = 0xC0 for program change detection.

  • @espiegel123 said:
    @Gravitas :

    To handle a pc event in onMidiInput

    If midiCommand = 192
    // do program change handling
    //midibyte2 has the program number

    endif

    So this should work no?

    @OnMidiInput
    If midiCommand = 192
    SendMIDICC 0, 1
    @End

    If so let's move on to arrays and then layout.

  • @espiegel123

    In regards to the
    "If MidiCommand = 192"

    Should that be "If MidiCommand = 0xC0, //and then whatever PC number it is"

    and then if we're to create an Array then would we be using MidiCommand like this

    MidiCommand 0xC0 [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]

    or like this?

    MidiCommand[0][1][2][3][4][5][6][7]

  • @Gravitas said:
    @espiegel123

    In regards to the
    "If MidiCommand = 192"

    Should that be "If MidiCommand = 0xC0, //and then whatever PC number it is"

    and then if we're to create an Array then would we be using MidiCommand like this

    MidiCommand 0xC0 [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]

    or like this?

    MidiCommand[0][1][2][3][4][5][6][7]

    "If MidiCommand = 192" And
    “ If MidiCommand = 0xC0” are equivalent. 192 is decimal and 0xC0 is hexadecimal for 192.

    I am not sure what you mean about the array and the rest.

    Can you describe in natural language what you want to store in the array?

    Also, don’t use a reserved word (words that have already defined meanings) like MIDICommand as a variable name.

    Something like the following isn’t legal syntax:

    MyVariable 0xC0 [0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07]

    If you explain what you are trying to do, I’ll advise

Sign In or Register to comment.