;; (v-osc3 rate bufpos freq1 freq2 freq3) ;; Three variable wavetable oscillators. ;; A wavetable lookup oscillator which can be swept smoothly across ;; wavetables. All the wavetables must be allocated to the same ;; size. Fractional values of table will interpolate between two ;; adjacent tables. This unit generator contains three oscillators at ;; different frequencies, mixed together. ;; This oscillator requires a buffer to be filled with a wavetable ;; format signal. This preprocesses the Signal into a form which can ;; be used efficiently by the oscillator. The buffer size must be a ;; power of 2. ;; This can be acheived by creating a Buffer object and sending it one ;; of the "b_gen" messages ( sine1, sine2, sine3 ) with the wavetable ;; flag set to true. ;; Note about wavetables: Vosc3 requires the b_gen sine1 wavetable ;; flag to be ON. ;; Allocate and fill tables 0 to 7 with a generated list of harmonic ;; amplitudes. (with-sc3 (lambda (fd) (let* ((square (lambda (a) (* a a))) (nth (lambda (i) (async fd (b-alloc i 1024 1)) (let* ((n (expt (+ i 1) 2)) (a (map (lambda (j) (square (/ (- n j) n))) (enum-from-to 0 (- n 1))))) (async fd (b-gen1 i "sine1" (cons 7 a))))))) (for-each nth (enum-from-to 0 7))))) ;; oscillator at buffers 0 through 7. (let ((p (mouse-x kr 0 7 0 0.1)) (f1 (mce2 240 241)) (f2 (mce2 240.27 241.1)) (f3 (mce2 240.43 239.71))) (audition (out 0 (mul (v-osc3 ar p f1 f2 f3) 0.2)))) ;; Reallocate buffers while oscillator is running. (with-sc3 (lambda (fd) (for-each (lambda (i) (async fd (b-gen1 i "sine1" (cons 7 (replicate-m 16 (random 0 1)))))) (enum-from-to 0 7))))