Hi everyone, i would like to know if it is possible to get the midihub to transform a cc value of 0 to 63. i use pads of akai midi controller to send momentary control changes. the pads are velocity sensitive, sending an output value linked to velocity when pressed. when the pad is released, it sends out a value of zero. i would like to transform that 0 to 63, to match my sampler needs, without affecting values between 1 and 127. i am trying with tranform, with no success. any suggestion accepted. thanks.
Hi, I’m not sure if I understand your question:
- the pads transmit cc vals 1-127 when hit, 0 when released? (or is it NoteOn hit, NoteOff release?)
- you want to map that to 1-127 when hit, 63 when released?
IF it’s a cc->cc, then try this:
cc0to63.mhp (332 Bytes)
the patch:
- takes incoming cc#107 & Transforms to cc#100 but only in range {0,0}
- Rescales cc#100 {0,0}->{63,63}
- Transforms cc#100 back to cc#107
Now only cc#107value0 is changed to cc#107value63.
Is that what you’re after?
The NoteOn/Off scenario is slightly simpler.
thank you very much for your answer, you cracked it, that is what i need. cc messages, not note off messages. thanks again.
@Qhr33k glad to have got you started!
(Useful for me too to explore the fuller capabilities of Transform CC->CC; not played with “Work in Range…” before)
have fun with your Midihub & hit that heart button!
Hi there !
I’m late to the battle but found this thread with a google search:)
Your project file inspired me to use the “Rescale” module to convert some CC value to another value of same CC.
However, “Rescale” does not seem to work as I expected: the “In” boundries seem to have no effect, meaning it converts all values to the defined values (as opposed to converting 1 single CC value, as defined in “In” range)
For instance:
- I want to convert CC value 1 to CC value 110
- But we can see that CC value 0 is also converted to CC value 110, despite the “In Low” and “In High” reduced to value 1 only
What am I doing wrong ?
Regards
You’re not doing anything wrong @imacactus, it’s just the way Rescale
works:
First incoming values are clipped at the In range, then they get linearly rescaled to the Out range.
Although In|Out Low|High
ranges makes the Rescale
and the Remap
pipes look simialar, they work differently
Any … messages that are outside of input range will get discarded.
This diagram summarises
So say you have [32,63] → [95,64]:
- then all of [0,32] will be treated as 32 (and so → 95)
- whilst all of [63,127] will be treated as 63 (so → 64)
So in your case everything gets treated as the value 1.
What do you want to do with [0,0] and [2,127]?
These two Transforms, for example…
Drop
every CC from every CC# if the value is Outside Range
[1,1]
then
Replace
with Arg1 =110 if the value is Inside Range
:
(Or I could have used your Rescale cos now you’ve only got the value 1 remaining!)
Ah okay ! That makes sense, thank you for explaining
What I need is transform all CC 94 to CC 7, from channels 1-8 only, and change the initial values - which can only be 0 or 1 - to 0 or 110.
I managed to do that using:
- “Filter” module: to take only CC messages
- “Range” filter module: to take only CC 94
- “CC Remap” module: to convert CC 94 to CC 7
- “Transform” module: to convert value 1 to value 110 (and keep 0 to be 0)
I configured Transform more with trial/error process rather than clear understanding but I got it working:
DTloopback.mhp (1.1 KB)
Do you see any thing that could be optimized in this pipeline? I was under the impression that the “Range” and/or “CC Remap” module could be removed if the CC number conversion happens in “Transform” but I couldn’t get it to work
You can leave out the range filter and cc remap. Maybe you can do all that in 1 transform pipe.
Set CC number to 7
Work with CC number 94.
There’s a way to toggle a value with virtual mapping in the same pipeline. I forgot the exactly the setup but I believe you’ll map to the value argument and then it’ll flip from 0 to X value when you trigger the mapping. There’s a thread and a patch that Resonotter or Giedrius did that you may find with a search.
If that doesn’t work exactly how you envision, 2 transform pipes will get it done a bit more economically the remapping and rescaling.
Agree with @JoeyButters about CC Range Filter
because CC Remap
does the discarding (ie filtering) for you.
If you’ve only got [0,1] incoming then you can replace Transform with Rescale:
(Those 0’s make all the difference!)
PS
Depends what you’re Transforming. You could use an extra Transform to Drop
a range of CCs.
I would advise against this as, later on, you’re less likely to scratch your head and ask “what’s this doing that a CC Remap/Filter wouldn’t?”
FYI, the Virtual mapping thing that Joey mentioned was to give a “momentary” button a toggling state.
If your CC94 is a true toggle, the options above are more economical (no need for a Virtual Out).
Let us know if you do need that & I’ll dig it out
Tried it:
It does not work as expected, we get:
- CC 94 1 > CC 7 110
- CC 94 0 > CC 94 0
Wheras we need:
- CC 94 1 > CC 7 1
- CC 94 0 > CC 7 110
Appologies @JoeyButters @resonotter , I release my previous post was misleading, as we need:
- 1 > 1 /// or /// 1 > 0
- 0 > 110
Almost expected result, with that we get:
CC 7 1 > CC 7 110
CC 7 0 > CC 7 0
But by inverting “Out Low” from 0 to 110 and “Out High” from 110 to 0 then we get expected result !
Meaning now pipeline is simplified:
- “Filter” module: to take only CC messages
- “CC Remap” module: to convert CC 94 to CC 7
- “Rescale” module: to convert value 0 to value 110 /and/ value 1 to 0
Let me know if tyou see any other optimization possible, current result looks good to me
Thanks a lot for your help both of you !
Good! and you have a toggling button so successive presses do…
- #94=1 → #7=110
- #94=0 → #7=0
- #94=1 → #7=110
- …etc
…without any need for any self-mapping?
- #94=1 → #7=0
- #94=0 → #7=110
- #94=1 → #7=0
Actually :d
But yeah that works perfectly without anything else ! \o/
I love my Midihub more than my grooveboxes now ^^