Forums > MaxMSP

Velocity affecting amplitude

Sep 27 2009 | 6:31 pm

I can’t for the life of me figure out the algorithm so i thought I would post. Can anyone give me a lead on the math if I want to affect a signal’s level based on a percentage of velocity? For example, on a lot of synths, like Ableton Operator, you can set a percentage that the oscillator’s level will be affected by the midi velocity. If set at 100%, a 127 would cause maximum volume, and a 1 would be barely audible. But if it is set to 50%, a 1 velocity would not necessarily cause an in-audible signal. Likewise, a -100% would cause a velocity of 127 to create an in-audible signal, but a velocity of 1 to cause maximum amplitude. I am aware one of the tutorial 19 sort of talk about this using an exponential expression, but it assumes you are always using the velocity to determine 100% of the amplitude. I want to be able to create a component that I could say the velocity affects the signal by say 80% (or -80%).

Sep 27 2009 | 6:32 pm

by the way, here is my miserable attempt, which works (but feels wrong) for positive percentage modifier amounts, but doesn’t have the inverse affect on negative percentage modifier amounts.

— Pasted Max Patch, click to expand. —
Sep 28 2009 | 9:41 pm

something like this?

— Pasted Max Patch, click to expand. —
Sep 28 2009 | 10:47 pm

…or like this?

going above 100% (or below -100%) will invert the velocity curve, so that higher velocity values will be more dynamic.
I’m not sure if you can literaly say percent thou…

— Pasted Max Patch, click to expand. —
Sep 29 2009 | 2:35 am

always break down things to a range of 0. 1. before you
calculate offsets and modulations, then you can work on
the linear layer.

velocity (input)
/127. (scaling)
* percentage/100 (mod amount)
+ current velocity (offset)

Sep 29 2009 | 3:03 am

thanks guys for the help, i tried both examples and they worked the exactly the way i was wanted, i am embarrassed to think how much time i sunk trying to figure this out, it appears i still don’t quite think in the max fashion of development, still trying to force programing paradigms from my day job where they don’t apply. it looks like from your examples i was sort of close in my latest attempts, but i was always trying to duplicate the signal, modify one by velocity then recombine the percentage of each vs. doing the math, then modifying the signal. I was always getting either the positive values to work, or the negative … not both. it seems sort of obvious now looking at your examples, that to get the inverse velocity affect, you just add 1!!!!!! doh

roman, thanks for the tip, i usually do do that outside of a given module in the ui or algorithm layer, always expecting something between 0 to 1 (or -1 to 1) in my re-usable component.

thanks again, i learned a lot in the process.

Viewing 6 posts - 1 through 6 (of 6 total)

Forums > MaxMSP