Precisely Defining Curves

Im not sure Im going about this the best way but I have an incrementing CC that goes 0,1,2,3,4 and wraps back around to 0

Using a curve on a single widget (button) and I only want it to give full output at a value x = Value(CC), is there a way to type that into the forumula field or numerically enter it?

In other words, the first button widget will turn on when the learn midi CC for example CC1 with a value of 1 and only 1 is received
Widget 2 will also use CC1 but will only ‘gate’ at a CC value of 2 and so on

Thanks

You want these widgets to control a plugin parameter that is full range (0…1)?

So for the ‘transfer curve’
Input of 0 = output 0
Input of 1 = output 100
Input of 2 to Max = output 0

If that makes sense

I can’t get my head around scale curve formulas. It’s more challenging because you’re needing to scale values that are 1 value different from each other.

Even if you got the scale curve to do what you want, I don’t think the widget LED will give you want you want.

Therefore I personally find scripting much simpler to convert those values to separate CC numbers and full range.

Yeah i was just trying to be widget centric, which is kind of the point of diff with GP and what I understood was the correct way…the only thing stopping is numeric entry really.
The x range is with a knob with no numeric input but y range seems to be easy ie y = 1…but how to plot that on x?

I have been really going over and over the manual, the forum, videos…Im not trying to do a very complicated thing at all…I thought?

You are right…I was able to do a test and while the plugin turns on and off with the closest values I could get, the widget is looking for 0/127 to display properly; the learn would have to have an edit to define the range its looking for

Ah well back to script…

EDIT:
I did find a part solution here thanks @djh …the title was worded a little differently but still doesnt let you enter the X numerically that I could see. I guess I could extrapolate the range out over 128…

https://community.gigperformer.com/t/button-to-recall-specific-value/6348/13?u=aurasphere

It seems you’re mixing the incoming and outgoing values. The incoming CC value will always move your widget to that value. What comes OUT can be controlled with the scaler.

Btw… if you click on the scaler and hold down the shift key while clicking on the “reset liearly” button you will get a chance to type in a number os steps to create a stepped “curve”.

See this link for the step function: Step function generator

Thanks

So the transfer function is that of widget input > ouput…ok; completely independent of the incoming cc range as that is absolutely mapped to the widget 0-100

But there is no modification allowed for incoming midi other than learn…was a bit confusing because I had thought if such a great tool was provided for the widget, its scope might have extended to the midi input as well…cleared that up

In the case of a cc range being typically 0-127: the x is actually (cc@127)/100 for output?

Then in the case if a typical incrementing incoming button cc of eg 0 - 4, as found standard in most controllers I use anyway

the widget will move 0 - (127/100) * cc? Is that correct

Let’s call that scaled x (sx)

Which still needs an input transform that looks like
Step 1 (x,y)
0,0
Step 2
1 x sx, 100
Step 3
2 x sx, 0

And so on…
Ie for a widget to send an on value for an incoming cc = 1?

I guess conceptually like this

Setting up another widget on same cc should create mutually exclusive on val @ cc = 2 and so on?

My point is to see if I can do a simple setup with the ui tools without scripting (to clearly see the crossover from ui to script)…any suggestions as to then best do that or is scripting the only way?

Cheers

I think this is not correct

This should be the correct formula
0 - (100/127)*cc

Sorry yes you are right. Factoring so I could understand dependencies was my main focus…I must be a bit dyslexic?
Thanks

As I did not get it:

What do you want to say in that post and what are you asking for?

The op explained it as best I could.

Here are the components

  1. 4 button widgets
  2. Incoming cc eg val 0, 1, 2, 3 (incremental)

Button 1 responds to only value 0
Button 2 responds to only value 1
Button 3 responds to only value 2
Button 4 responds to only value 3

All 4 buttons learn the same cc

Value of 0 turns on button 1 but the widget of 2,3,4 etc remain off
Value of 1 turns on button 2 but the widget of 1,3,4 etc are off and so on…

Its a very simple thing and I just wanted to see if it was possible using the UI
I think the main issue is that the incoming midi learn would have to have a filter to define min and max or also have a transfer graph with numeric input which would then make it easy to do this.

Scripting is great to establish and test stuff but once solid paradigms are established, would be nice to use ui, if that makes sense. Thanks for your code you posted too.

Ok, understood.

But a MIDI controller with different buttons and sending on the same control change number.
Does that really make sense?

Its just a simple way of doing mutually exclusive choices that may point to different outputs
ie group buttons using current UI widgets
Its more about using a single button to address logical grouping

Ok, scripting is your friend

I have your script as plan B…which seems now to be plan A???

As of now, yes :slight_smile:

1 Like

Im a bit torn though in regards to solutions…Im about to try using my old Pure Data stuff as plugins and it already has much of this baked in; then Im not troubling everyone with the details of learning. The thing is that spending the extra time refining it in PD makes it portable…can use it in most things eg Live etc and its so simple and logical (plus I know it reasonably well)
The issue is I haven’t tested it for just midi as yet…its not global scope and it doesnt contribute back into the community.

Anyway…see how it goes

Ok, PD as a plugin can and will work.
But for what you want scripting is very easy to implement.

And when you build a PD plugin it has to know about GP and what should that thing do for example in Live?

And remember: There is no GP than GP :wink:

This is ultimately true!
It does force an abstract solution either way.
Normally using max/pad etc, it presents an algorithmic output eg each event out would have a eg a different channel number on the same controller but GP lets me choose the input to keep the scoping down

So now you use the PD library (of increment on the incoming controller), add a channel, in GP each widget/learns this and is turned on/off as a group and the PD plugin can now be used drag and drop with consistent behaviour
ie CC in = CC out + chan number

I think it the scripting is great in GP and lets you do what would be impossible…time will teach the best outcome…hehe hopefully.

Thanks for your immense help

1 Like