-- doppler (jmcc,rd) import Sound.OpenSoundControl import Sound.SC3 -- observer at origin, signal 's' at coordinates ('x','y') doppler :: (UGen,UGen) -> UGen -> UGen doppler (x,y) s = let d = hypot x y a = 40 / squared d maxd = 110 in delayL s (maxd / 344) (d / 344) * a -- straight line at x axis from (-y,y) over dt seconds line_x :: UGen -> UGen -> UGen -> (UGen,UGen) line_x x y dt = (x,line KR (-y) y dt RemoveSynth) -- ellipse centered at origin and interecting x at +-a and y at +-b. -- traversal is over dt seconds ellipse :: UGen -> UGen -> UGen -> (UGen,UGen) ellipse a b dt = let t = line KR (-pi/2) (pi * 3/2) dt RemoveSynth in (a * cos t,b * sin t) main :: IO () main = do let s = rlpf (fSinOsc AR 200 0 * lfPulse AR 31.3 0 0.4) 400 0.3 withSC3 (\fd -> do print "line_x" play fd (out 0 (doppler (line_x 10 100 6) s)) pauseThread 8 print "ellipse" play fd (out 0 (doppler (ellipse 10 75 12) s)))