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 StoreLoopy Pro is your all-in-one musical toolkit. Try it for free today.
Comments
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.
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.
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.
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.
Currently going through stuff online to find out the exact numbers.
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.
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:
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.
@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!
No worries.
Opps, I forgot about that.
1-128 is 0-127
1-16 is 0-15
Here is a little exercise that I hope will clarify.
Write a little script that when it loads,
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.
@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:In my scripts, I prefer
if MIDICommand = 0xC0
for program change detection.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]
"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