stldrm.lsp Version 1.00 31 October 2004 Author Steven Jones Contact jones57@swbell.net include the word "nyquist" in subject line The contents of this file are released under the terms of the GNU General Public License. See the file LICENSE.txt A synthesized steel drum
wrapper
(stldrm plist dur :vel :arpeg :pos :vib :vfrq :vdelay :vtab :vphase :fm :r :mix) A steel drum plist - list or sound. List of MIDI key numbers. Alternatively a single key number may be specified. dur - flonum. Duration in seconds. :vel - flonum. velocity 0<= vel < 128, default 64 :arpeg - flonum. Arpeggio interval, default 0 :pos - flonum or SOUND. Pan position as either a fixed number in interval (0,5) or a control signal over the same interval. Default 0.5 :vib - flonum. Vibrato depth, default 0 :vdelay - flonum. Vibrato delay time, default 0. :vfrq - flonum. Vibrato frequency, default 7.00 Hz. :vtab - table. Vibrato wave table, default *tri-table* :vphase - any. Vibrato phase. See phase function in utilities.lsp Default 'RANDOM :fm - sound. Auxiliary FM modulator. Default nil :r - flonum. FM frequency ratio, default 1.00 :mix - flonum. Relative component mix. Default 0.5 return - sound vector.
;; stldrm.lsp ;; Version 1.00 31 October 2004 ;; Author Steven Jones ;; ;; Contact jones57@swbell.net include the word "nyquist" in subject line ;; ;; ;; The contents of this file are released under the terms of the GNU General ;; Public License. See the file LICENSE.txt ;; ;; A synthesized steel drum ;; (require 'definst ) (require 'dlfo) (require 'map) (provide 'stldrm) (current-file "stldrm") ;; Scale modulation index as function of velocity (setf stldrm:*vel-index-map* (map:linear 0.25 2.00)) ;; Scale hi frequency components as function of key number (setf stldrm:*key-hifrq-map* (map:quad 1 0.0625)) (definst stldrm:voice (vel vib vfrq vdelay vtab vphase fm r mix) (let* ((hz (step-to-hz pitch)) (vel (or vel 64)) (map1 (send stldrm:*vel-index-map* :get vel)) (map2 (send stldrm:*key-hifrq-map* :get pitch)) (vib (* (or vib 0) 0.001)) (vfrq (or vfrq 7.00)) (vtab (or vtab *tri-table*)) (vdelay (or vdelay 0)) (vphase (or vphase 'RANDOM)) (fm (or fm (s-rest))) (r (or r 1.001)) (mix (min (max (or mix 0.5)))) ; Carrier 1 (c1r 1.00) (c1hz (* c1r hz)) (c1amp mix) ; Modulator 1 (i1 (* 1.00 map1)) (m1r (* r 3.00)) (m1hz (* m1r hz)) (m1amp (* c1hz i1)) (decay1a dur) ; Carrier 2 (c2r 13.0) (c2hz (* hz c2r)) (c2amp (* map1 map2 (- 1 mix ) 0.250)) ; Modulator 2 (i2 (* map1 0.750)) (m2r (* 3.000 r)) (m2hz (* m2r hz)) (m2amp (* c2hz i2)) (decay2a (* dur 0.5)) (decay2b (* dur 0.3)) ; Vibrato Signal (vibsig (dlfo vfrq dur :tab vtab :delay (* vdelay 0.7) :attack (* vdelay 0.3) :phase vphase))) (sum (mult (fmosc (hz-to-step c1hz) (sum (scale (* vib c1hz) vibsig) (scale c1hz fm) (scale m1amp (mult (osc (hz-to-step m1hz) dur) (percussion decay1a))))) (scale c1amp (percussion decay1a))) (mult (fmosc (hz-to-step c2hz) (sum (scale (* vib c2hz) vibsig) (scale c2hz fm) (scale m2amp (mult (osc (hz-to-step m2hz) dur) (percussion decay2b))))) (scale c2amp (percussion decay2a)))))) ;; @doc wrapper stldrm ;; (stldrm plist dur :vel :arpeg :pos :vib :vfrq :vdelay :vtab :vphase :fm :r :mix) ;; A steel drum ;; ;; plist - list or sound. List of MIDI key numbers. Alternatively a ;; single key number may be specified. ;; ;; dur - flonum. Duration in seconds. ;; ;; :vel - flonum. velocity 0<= vel < 128, default 64 ;; ;; :arpeg - flonum. Arpeggio interval, default 0 ;; ;; :pos - flonum or SOUND. Pan position as either a fixed number in ;; interval (0,5) or a control signal over the same interval. ;; Default 0.5 ;; ;; :vib - flonum. Vibrato depth, default 0 ;; ;; :vdelay - flonum. Vibrato delay time, default 0. ;; ;; :vfrq - flonum. Vibrato frequency, default 7.00 Hz. ;; ;; :vtab - table. Vibrato wave table, default *tri-table* ;; ;; :vphase - any. Vibrato phase. See phase function in utilities.lsp ;; Default 'RANDOM ;; ;; :fm - sound. Auxiliary FM modulator. Default nil ;; ;; :r - flonum. FM frequency ratio, default 1.00 ;; ;; :mix - flonum. Relative component mix. Default 0.5 ;; ;; return - sound vector. ;; (defwrapper stldrm #'stldrm:voice)