Convert CC to pitchbend, and other Q’s (Cobalt to Sirin project)

I’m new at midihub, and trying to create a set of pipes where I can use a Cobalt8 to control all of the parameters of a Moog Sirin

To do this, I need to remap all the CCs of the knobs and joystick of the Cobalt to match those of the Sirin and I’ve run into a couple of obstacles I can’t figure out

TRANSFORM CC INTO PITCHBEND

remapping CCs to different CC’s seems pretty straightforward, but I can’t figure out how to remap a CC to pitchbend

It seems that I need to use the Transform pipe to do this, but I don’t understand what all of the pipe parameters mean

The Joystick X+ CC is 116 and I want to turn that into pitch bend

So I have it set to:
MODE: replace
WHAT: Control Change
Into: Pitchbend

but then after that I have no idea what’s going on - there seems to be no parameter to let me define which CC# I want transformed into pitchbend.

What am I misunderstanding?

I have a transform pipe to turn aftertouch into filter cutoff CC and that let me input a CC value, but if I want CC to pitchbend the available setting are different.

REVERSE CC VALUES

I want to make the Joystick down (Y-) behaviour go from the current filter setting at the center position, down to zero at the downward extreme. To do this I need to reverse the CC values

If I do a rescale from input low-high 0-127 to 127-0 - will that accomplish what i’m trying to do?

IN/OUT

I have about 45 parameters to remap - is the correct way to do this to have 45 rows each starting with MIDI A in and ending in MIDI A out?

thank you!

This is correct.
You want just CC#116 to be picked up so set Work with CC Number in Range Low|High to 116
Pitchbend, like Song Position Pointer has “high resolution” values (128x128=16,384 values instead of 128) so it strictly needs two numbers to get full resolution.

(See diagram in this topic to get an idea.)

BUT, (as I found out later in same topic) many pitch bend controllers are actually not that fine (they just send 0 for the “LSB”.

SO, setting Set Pitch Bend MSB to the CC value will give you a good approximation:
Screen Shot 2023-04-11 at 18.31.34

1 Like

Yes (as long as you’re talking straight CC input to CC output, not some mapping)
Make sure you unset Any Id to do the Rescale only for the joystick CC

PS. you may also want to Rescale your CC116 before it gets to the PB Transform to get the right PB range…

IN/OUT

I have about 45 parameters to remap - is the correct way to do this to have 45 rows each starting with MIDI A in and ending in MIDI A out?

Not if you’re remapping with Transform; you can set each to only respond to just what you want and thus keep them in the same line

As an extra thought, if you’ve got ranges of CCs in and CCs out you might be able to get clever with CC Remaps to save some time and effort†. You can get nice results with using Scale Remap too, if you’ve got a batch of CCs which are evenly spaced and you want change the order (12 remaps with abt 4 pipes).
Lemme know if you want to go there and need more detail.

(Always worth sketching out your full remap list and looking for sub-patterns)
† can always pluck out anomalies with Transform too




just had a glance at Sirin_Manual_2_1.
Quite a few Hi-res/14-bit/NRPN/MSB&LSB controls there. Are you trying to map to any of them?

thank you for getting into the weeds of this with me!

ah i see, the fact that it was a range of CC’s confused me - when are people working with ranges of CCs? that also initially confused me about the CC remap pipe…

i tested my joystick for pitchbend and it does give 16384 values - but what are the LSB and MSB for pitchbend? i don’t just put zero and 16384?

And i don’t understand what Arg 1 and Arg 1 are or MSB to value … the transform pipe is largely gibberish to me!

Rescale it to what? you mean from 0-127 to 0-16384?

no, i’m remapping them all with the CCremap pipe

so that means the correct way is in fact for 45 pipes that start with MIDI IN and end with MIDI out?

from what i understand midihub pipes don’t yet MSB/LSB so i’ve just been using the low res CC’s. is it possible to do high res remaps? how?

just a quickie (might get more time later)

when are people working with ranges of CCs? that also initially confused me about the CC remap pipe

Lots of uses but maybe not obvious. Will try ping a couple over later.
All part of Transform Power!


i tested my joystick for pitchbend and it does give 16384 values - but what are the LSB and MSB for pitchbend?

check out my pic in above link: PB takes 128 tiny steps (LSB) for every big (MSB) one.
But as you’re going CC → PB you’re gonna lose your fine steps.

don’t understand what Arg 1 and Arg 1 are or MSB to value … the transform pipe is largely gibberish to me!

Transform can set your new message’s properties to aspects of the Incoming (say CC# of CC value) OR whatever numbers are in the Arg1/2 fields.
Super powerful & flexible (means eg you can have just note G8 Transformed to Prog Chg 5 )
but takes a time for most of us to click just how much all this flexibiliy can do.
(That’s why I’m trying to write a guide on it!)

Stick with it; it will Transform your Midihub usage!


Rescale it to what? you mean from 0-127

If your CC → PB is like in my snap above (CC val → PB MSB) you might not want the full range of the CC val → full range of PB MSB. to get a smaller range you might Rescale CC say [0;127] → [32;95] to get less extreme bending


is it possible to do high res remaps? how?

Short answer, don’t try!
Easiest way is to use a controller with endless encoders that churns out NRPNs.




PS. I thought you were going CC → PB (ie. losing res).
Let me know if you’ve got 16384 vals coming out of Cobalt, cos you can do stuff with that!

1 Like

i’m not sure i understand - right now i have the pitchbend range on the cobalt and sirin to 2 steps up and down, but i can change it to up to 24 in either direction.

and yes it turns out that the joystick X+ (cc 116) on the cobalt has a full 0-16384 range for PB and so does the X- (cc 117) has 0-16384 in the other direction.

so for Cobalt’s X+ / cc116 to be mapped to Sirin’s pitchbend - if i want the joystick to give me whatever range i choose on the cobalt and sirin - what exactly do i put in the transform pipe for all the values?

but then it can’t be just CC116. to send out 128 x 128 values it must be sending two (‘Coarse’/‘Fine’) CCs.
If instead X± are sending PB on difft channels, then you’re in business.

post up a MIDI monitor snap or two (Filter out any chaff like Clock/Active Sense etc (Incoming Filters) and I’ll take a look after I’ve eaten!

1 Like

If you can change PB range in Sirin then Rescale in Midihub is unnecessary

1 Like

hmm - well maybe the midi implementation chart is misleading - when i bend the joystick on the x axis this is what it reads as - no CC just pitchbend - even though it’s not routed to anything in the patch i was using

so is it Ch1 in both directions?

Hey, just noticed how big the PB changes are:
can you try and see how small you can make the PB changes?

If you put thro MidiHub’s monitor (View → MIDI Monitor if it’s not already visible ) instead of MIDI Wrench, you can save the output:

Screen Shot 2023-04-11 at 22.14.54
(quite like to do some calcs on it)

1 Like

Of course, one would be a version of your task:

Let’s say…
… you had a bunch of CCs 60-70…
…and you want to send out CCs 30-40 but their order is completely different.
…so a CC Remap’s no use and CC has no pipe than can do that

…but Note on does!

So you Transform just that range to Notes…
…use Scale Remap to reshuffle 60-70
…Transpose them down to 30-40
…and Transform them back.

Doubtless many other uses which other readers might chip in with - that one’s in my head right now cos just been using a variation of it.

1 Like

the MIDI monitor isn’t working on the midihub app for some reason and i don’t have time to figure out why, but here’s what it looks like when i gave the joystick the tiniest bump in the X+ direction - and yes CH1 for both directions. The earlier screenshot i posted has be switching directions at the end - same result if I route the joystick to a low res parameter.

I still don’t understand what to put in the transform pipe for
Set Pitch Bend LSB to:
Set Pitch Bend MSB to:
Argument 1:
Argument 2:

but why would i want to send out ten consecutive CCs all together?

Aah, this is interesting!
Work with CC Number in Range Low|High means “which CCs is this pipe going to respond to?”
So in my example, when you turn CC#60 or #64 or #67 etc,
they will be Transformed into notes
but CC#59 or #72 or #93 will be ignored

No matter how you set your Ranges, either one event is Transformed or the incoming message is ignored and just passes through.
ie. Transform never creates more than one message!




PS. There are creative scenarios where you might want 1 CC → Many , just as Harmonizer gives you one Note → Many

1 Like

Here’s the more important bit.

I don’t get why your PitchBend values are jumping around all over the place
(64 → 5696 is over 40 “coarse” jumps – in about 1/60 second!)

This is the output from a low-res PitchBender:


it’s moving one “coarse” jump (128) for each slight leftward movement.

If yours is behaving properly and gentle pressure is applied the changes should be less than 128 for each movement.

Upshot is : Transforming these PBs to CCs is just gonna give crazy results



When you’ve sorted this lemme know and I’ll sketch you

  1. PB → CC
  2. PB → NRPN (eg Sirin Resonance: CC#21 & #53)
1 Like

i don’t know what you’re asking/saying?

but if it’s actually just transmitting pitch bend messages already, then i don’t need to transform it into anything, because the sirin will understand it as pitchbend.

But again, just assuming that the X+ joystick is in fact CC116 like it says in the manual, I still don’t understand what to put in the transform pipe for
Set Pitch Bend LSB to:
Set Pitch Bend MSB to:
Argument 1:
Argument 2:

but if it’s actually just transmitting pitch bend messages already, then i don’t need to transform it into anything,

oh, I thought you were saying you wanted PB → some high-res Sirin param (of which there are many!)

I still don’t understand what to put in the transform pipe for…

I showed you in post 2:
Screen Shot 2023-04-11 at 18.31.34




all properties:
Screen Shot 2023-04-12 at 15.01.37

1 Like

Pitch Bend Out: Enables / disables the joystick X axes from transmitting MIDI Pitch Bend messages to MIDI-out. You may want to disable this behaviour if the COBALT8 is connected to other synthesisers that responds to MIDI Pitch Bend messages. Please note that if this is disabled the joystick X axes will instead transmit CC messages for MODALapp communication.

?

oooh ok i see - it’s funny i was looking for something like that in the manual but couldn’t find it - i must have been searching for “pitchbend” which is how they spell it a bunch of the time…

I remember trying the same experiment with a MIDI Event Processor Plus and I think the pitchbend worked correctly - i’ll see what happens when I try it with the midihub

and to be clear - the CC implementation chart lists the X axis joystick as CC 117 - so what I was trying to do was transform CC 117 into pitchbend - which is what I wanted to use the transform pipe for

but then i discovered via the midi monitor that the X axis joystick actually transmits pitchbend, not CC

so now eveything makes sense - it’s only CC 117 if you disable pitchbend out

except for one thing still doesn’t click in my mind

Screen Shot 2023-04-12 at 15.01.37

What is argument 1? and why is it 3?
And why is MSB linked to value?

Not used in this set up:

  • With some Transforms (eg. Note_on → always CC#76 value=63) you’d use both Arguments
  • With others (eg. Note_on → always CC#=NoteNumber value=Note Velocity) you’d use neither of the Arguments

In this case, I could’ve set LSB to Arg2, point is we’re setting LSB to a “fixed” number…

And why is MSB linked to value?

…cos MSB is the “Coarse” setting…
… so sweeping the CC 0 → 127 will also sweep your PB from min to max
(set Sirin to give the tonal range you want)
if you set LSB to value instead, you’d barely hear a difference
(like comparing a distance of “99 metres” (MSB) vs “99 centimetres” (LSB))

Again:

1 Like