atan2 arctangent

BinaryOperator

atan2(y, x)

y atan2: x

y.atan2(x)

Returns the arctangent of y/x.

See also hypot.

OK, now we can add a pan to the hypot doppler examples by using atan2 to find the azimuth,

or direction angle, of the sound source.

Assume speakers at +/- 45 degrees and clip the direction to between those.

(

{

var x, y, distance, velocity, pitchRatio, amplitude, azimuth, panValue;

// object travels 200 meters in 6 secs (=120kph) passing 10 meters

// from the listener

x = 10;

y = LFSaw.kr(1/6, 0, 100);

distance = hypot(x, y);

velocity = Slope.kr(distance);

pitchRatio = (344 - velocity) / 344; // speed of sound is 344 meters/sec

amplitude = 10 / distance.squared;

azimuth = atan2(y, x); // azimuth in radians

panValue = (azimuth / 0.5pi).clip2(1);

Pan2.ar(FSinOsc.ar(1000 * pitchRatio), panValue, amplitude)

}.play)

(

{

var x, y, distance, velocity, pitchRatio, amplitude, motorSound,

azimuth, panValue;

// object travels 200 meters in 6 secs (=120kph) passing 10 meters

// from the listener

x = 10;

y = LFSaw.kr(1/6, 0, 100);

distance = hypot(x, y);

amplitude = 40 / distance.squared;

motorSound = RLPF.ar(FSinOsc.ar(200, 0, LFPulse.ar(31.3, 0, 0.4)), 400, 0.3);

azimuth = atan2(y, x); // azimuth in radians

panValue = (azimuth / 0.5pi).clip2(1); // make a value for Pan2 from azimuth

Pan2.ar(DelayL.ar(motorSound, 110/344, distance/344), panValue, amplitude)

}.play)