[CM] OT?: Endless increasing pitch: How?

Kjetil S. Matheussen k.s.matheussen at notam02.no
Fri Dec 18 01:48:37 PST 2009



On Fri, 18 Dec 2009, meino.cramer at gmx.de wrote:

>
> Hi,
>
> long time ago I had an audio file, which I think it was
> generate via csound, which plays a tone pitch, which /seems/
> to increase endlessly. It was the audible counterpart of an
> optical illusion.
>
> I like to know, how this "trick" was constructed and how I
> can rebuild the effect ?
>
> Thank you very much in advance for your help!
>

Hi,

The instrument below implements a shephard tone in snd-rt.
(taken from rt-example.scm). I don't really
know very well what I'm doing when it comes
to signal processing, but by tweaking enough I got it to sound
quite nice. Hopefully someone will shout out if there's
something fundamentally wrong with it. :-)

Hopefully the code is somewhat understandable.


(definstrument (risset startpitch endpitch num-oscs loop-duration)
   (define starttime (+ 1 (rte-time))) ;; Ensure all starts simultaniously by scheduling one second into the future.
   (for-each (lambda (n)
 	      (let ((osc (make-oscil #:frequency 0))
 		    (e-p (make-env `(0 ,startpitch 1 ,endpitch     ) #:duration loop-duration #:base (expt 2 num-oscs)))
 		    (e-a (make-env `(0 0           1 0.25       2 0) #:duration loop-duration #:base 100)) ;; Linear amplitude-change didn't sound very nice.
 		    (start-location (* (/ (* (mus-srate) loop-duration)
 					  num-oscs)
 				       n)))
 		(set! (mus-location e-p) start-location)
 		(set! (mus-location e-a) start-location)
 		(<rt-play-abs> starttime
 			       (lambda ()
 				 (if (>= (mus-location e-p) (mus-length e-p))
 				     (begin
 				       (set! (mus-location e-p) 0)
 				       (set! (mus-location e-a) 0)))
 				 (out (* (env e-a)
 					 (oscil osc (hz->radians (env e-p)))))))))
 	    (iota num-oscs)))




More information about the Cmdist mailing list