live.dial exponents are confusing

Roy Poonawala's icon

I want a slider to output the values of 0.25, 0.5, 1, 2, 4, 8 so that I can use it to tie modulation to BPM. Is this possible?

schlam's icon

Yes. One of the ways is to use a slider of (in your example) 6 steps, then to create a message with your 6 values and use zl.nth.

tyler mazaika's icon

I think your desired output values are powers of 2 (2^n), but the live.dial exponential scale is doing n^x. (Where n is dial position value.)

You can output integer range -3 to 3 from your live.dial to an [expr pow(2, $f1)] to produce mathematically the values you want.

When I do these I usually have some other remapping, because the integer range -3…3 is IMO less intuitive than, say, 1/8 1/4 1/2 1 2 4 8. So I use an enum display type and just offset the output index in the expr.

Nick Holmes's icon

In the inspector, set the live.dial Type to "enum", and "Range / Enum" to be "0.25 0.5 1 2 4 8" (without the quotes). The live.dial outputs the index of the selected value, so in this case, 0 to 5.

Then, use an expr just to map the index to the values you want (which is 0.25 * 2^n).

Max Patch
Copy patch and select New From Clipboard in Max.

As only the index of the list of values is used to calculate the final value, you could use other values - even text - in the enum. Doing so could be more meaningful to the user. So, if you wanted to show note subdivisions, maybe something like this;

Max Patch
Copy patch and select New From Clipboard in Max.