Tempered Pitch Ratios with Groove

Danger Raven's icon

I would like to use groove as a real time sampler, kind of like the casio keyboards of old, where you can record a note and then get a couple of octaves of pitch appropriate equal tempered tuning from it. Obviously .5 playback speed is an octave down, and 2 times play back speed is an octave up. To make an equal tuning, is it as simple as dividing the distances by 12? from 1 to .5, and then from 1 to 2? I have the feeling I need some kind of equation with a log function or something. Would be great to use the kslider somehow with this as well... Any suggestions?

Thanks!

kthozoid's icon
Max Patch
Copy patch and select New From Clipboard in Max.

there's probably a better way, but this is what you need:

seejayjames's icon

not at Max here so I don't see the patch, but the twelfth root of 2 is approx:

1.0594631

written as 2 ^ (1/12)

if you take A=440 for example, multiply 440 by the above number to get B flat...multiply that by the above number again to get B... etc. It's just like compound interest.

so you can see that if you multiply any starting number by that number twelve times, you'll get double the number = 12 steps = one octave.

Emmanuel Jourdan's icon

Feel free to use the transratio abstraction which is somewhere in the examples folder.

Roman Thilenius's icon

"To make an equal tuning, is it as simple as dividing the distances by 12?"

you dont even need to do that, because your input (midi notes 60, 61,62)
has that already, isnt it?

"from 1 to .5, and then from 1 to 2? I have the feeling I need some kind
of equation with a log function or something"

exactly, and what you need is [mtof] - converting note numbers to frequency
in hertz.

then you add an offset, which is your base note.

i have chosen middle C to be the base note, at which the playspeed is 1. :

[expr exp(0.057762265*($f1-60.))]

that will work with 12-tone temperament as well as with any other scale ...

-110

Luke Hall's icon
Max Patch
Copy patch and select New From Clipboard in Max.

Much easier to use pow() inside [expr] because you don't need to worry about an equation with all those extra decimal places. You can also change it to different ET scales, want 6 notes per octave? Or 15? Just change the value in the [expr].