TGrains family Ugen and pitch

First of all thanks a lot for providing the TGrain UGen, it is a lot of fun working with them.

As my maths are gone a long time ago, I was wondering if someone could explain me how to set the pitch of a grain to the nearest pitch value in in a scale. Maybe clearer :
A potentiometer is sending a value in [0,1],
(Pot_Value * 4) - 2 brings the interval to [-2,2] so with Tgrain, its means the value applied to “rate” can shift the pitch of the grain from “reversed” 2 octaves higher to 2 octaves higher.
Now, I would like to round these values to the nearest semi-tone, how can I achieve this ( if values is for example 1.2456… what is the nearest note pitch)?

Thank you for help ( I am sure the anser is trivial but I can’t get it )

A useful thing for modulating “rate” style parameters to musically sensible intervals is the midiratio method. This converts a MIDI interval in semitones to a ratio that can be used directly to change the rate of playback to produce this interval:
    // ...
    rate: -3.midiratio // pitch down by 3 semitones

modulator =;
    // ...
    rate: modulator.range(-10, 10).round(3).midiratio // scale to +-10 semitones, and round

Thank you a lot for your help. I am not sure I understand well ; The rate in TGrain Ugen is not very clear to me. My understanding is :
1 = Actual value of the pitch,
0.5 = 1 octave lower
2 = 1 Octave higher ( this is what the helpfile says)

So I suppose that 0.25 is 2 octaves lower and 0.125 is 3 octaves lower ( somehow , this is also what I hear). In that case how can “midiratio” apply as the intervals are not linear but a power of 2 ?

Or am I totally wrong ?

x.midiratio = 2 ** (x/12)

Edit: rate is a multiplier for frequency – so the exponential conversion is appropriate.


1 Like