[CM] arpeggio in snd

Juan Reyes juanig at ccrma.Stanford.EDU
Sat Sep 16 12:59:40 PDT 2006


Now that we are in the mood for Snd's instruments here is an example of
Guile code for Risset's arpeggio documented on Dodge and Jerse's
Computer Music pages 98~102.

  --* Juan

(define arpeggio
  (lambda* (beg dur freq amp
                #:key
                (ampenv '(0 0 0.5 1 1 0))
                (offset 1.0))
      (let* ((start (floor (* beg (srate))))
             (end (+ start (floor (* dur (srate)))))
             (waveshbank (make-vector 12))
             (amp-env (make-env :envelope ampenv
                                :scaler (* amp .25)
                                :start start  
                                :end end))
             (output (make-vct end)))
        (do ((i 0 (1+ i)))
          ((= i 12))
          (vector-set! waveshbank i (make-waveshape
                :frequency (+ freq (* offset (1+ (* i 0.1))))
                :partials '(1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9))
                       ))
        (do ((i 0 (1+ i)))
            ((= i end))
          (let ((wvsum 0.0))
            (do ((j 0 (1+ j)))
                ((= j 12))
              (set! wvsum
               (+ wvsum (waveshape (vector-ref waveshbank j)))))
            (vct-set! output i (* (env amp-env) wvsum ))))
        (vct->channel output start end ))))

;;;  (load "arpeggio.scm")  
;;;
;;;  (arpeggio 0 10 400 0.5)
;;;  (arpeggio 0 10 400 0.5 :offset 1.25)
;;; 




More information about the Cmdist mailing list