syndrum.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 Synthetic percussion instruments.
function
(syndrum:kick [:hz][:decay][:phase][:pb][:cf][:nse]) :hz - flonum. Default 40 :decay - flonum. Default 0.333 :phase - flonum. Default 90 degrees :pb - flonum. Pitch bend, default 16 :cf - flonum. Noise center frequency, default 100 :nse - flonum. Noise mix, default 8.0 return - sound.
function
(syndrum:snare [args...]) return - sound.
function
(syndrum:tom [args...]) return - sound.
function
(syndrum:finger-cymbal [:CF][:MF][:BW][:MI][:DECAY][:ATTACK]) cf >-------|----------------------- mi >------[*]------------- | | | [noise]--->[filter]--->[amp]--->[fmosc]--->[amp]---> out ^ ^ | | mf >--------| | | | bw >----------- | | decay >----[envelope]-------------------------
function
(syndrum:chh [:decay][:cutoff]) Closed hi hat return - sound.
function
(syndrum:ohh [:decay][:cutoff]) Open hi hat return - sound.
function
(syndrum:shaker [:decay][:c1][c2][:bw]) Shaker sound return - sound.
function
(syndrum:clave [:hz][:decay]) A clave sound return - sound.
function
(syndrum:block [:hz][:decay]) return - sound.
;; syndrum.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 ;; ;; Synthetic percussion instruments. ;; (require 'rdrum ) ;;; (require cluster "cluster") (provide 'syndrum) (current-file "syndrum") ;; @doc function syndrum:kick ;; (syndrum:kick [:hz][:decay][:phase][:pb][:cf][:nse]) ;; ;; :hz - flonum. Default 40 ;; :decay - flonum. Default 0.333 ;; :phase - flonum. Default 90 degrees ;; :pb - flonum. Pitch bend, default 16 ;; :cf - flonum. Noise center frequency, default 100 ;; :nse - flonum. Noise mix, default 8.0 ;; return - sound. ;; (defun syndrum:kick (&rest args) (let* ((hz (get-keyword-value ':HZ args 40)) (decay (get-keyword-value ':DECAY args 0.333)) (phase 90) (pb (* (get-keyword-value ':PB args 16) 0.1 )) (cf (get-keyword-value ':CF args 100)) (nse (* (get-keyword-value ':NSE args 8.0) 1.0))) (mult (fmosc (hz-to-step hz) (sim (scale (* hz pb)(percussion decay)) (scale (* hz nse)(eq-band (noise decay) cf +9 1))) *sine-table* phase) (percussion decay)))) ;; @doc function syndrum:snare ;; (syndrum:snare [args...]) ;; ;; return - sound. ;; (defun syndrum:snare (&rest args) (syndrum:kick :hz (get-keyword-value ':HZ args 60) :decay (get-keyword-value ':DECAY args 0.333) :pb (get-keyword-value ':PB args 16) :cf (get-keyword-value ':CF args 1000) :nse (get-keyword-value ':NSE args 127))) ;; @doc function syndrum:tom ;; (syndrum:tom [args...]) ;; ;; return - sound. ;; (defun syndrum:tom (&rest args) (let* ((hz (get-keyword-value ':HZ args 60)) (decay (get-keyword-value ':DECAY args 2.00)) (pb (* (get-keyword-value ':PB args 000) 0.0001)) (accent (* (get-keyword-value ':ACCENT args 64) .01)) (pbsig (scale (* hz pb)(percussion decay)))) (rdrum2 :frq hz :dur decay :fmod pbsig :inmod pbsig :inharm accent :noise (* accent 0.1) :nmod pbsig))) ;; (setf syndrum:*cym1* (cluster 1000 3 :n 12)) ;; ;; ISSUE: NEEDS work to make it more realistic. ;; xxxdoc function syndrum:cymbal ;; (syndrum:cymbal [args...]) ;; ;; return - sound. ;; ;;(defun syndrum:cymbal (&rest args) ;; (let* ((decay (get-keyword-value ':DECAY args 3)) ;; (depth (+ 300 (* (get-keyword-value ':ACCENT args 64) 77)))) ;; (lp syndrum:*cym1* (scale depth (percussion decay))))) ;; ;; ISSUE: Better then syndrum:cymbal but stil not very realistic ;; (defun syndrum:ride (&rest args) (let* ( ; Ping (cf1 (get-keyword-value ':CF1 args 8000 )) (mf1 (get-keyword-value ':MF1 args 1600 )) (i1 (get-keyword-value ':I1 args 0.500 )) (m1amp (* cf1 i1)) (db1 (get-keyword-value ':DB1 args -9 )) (decay1 (get-keyword-value ':DECAY1 args 0.3)) ; Low Noise (cf2 (get-keyword-value ':CF2 args 2700 )) (bw2 (get-keyword-value ':BW2 args 750 )) (a2 (get-keyword-value ':A2 args 0.10 )) (db2 (get-keyword-value ':DB2 args 0 )) (decay2 (get-keyword-value ':DECAY2 args 5.0)) ; Mid Noise (cf3 (get-keyword-value ':CF3 args 4800 )) (mf3 (get-keyword-value ':MF3 args 100 )) (mi3 (get-keyword-value ':MI3 args 1.00 )) (map3 (* cf3 mi3)) (a3 (get-keyword-value ':A3 args 0.07 )) (db3 (get-keyword-value ':DB3 args 0 )) (decay3 (get-keyword-value ':DECAY3 args 4.0)) ) (sum (scale-db db1 (mult (fmosc (hz-to-step cf1) (mult (osc (hz-to-step mf1) decay1) (scale m1amp (asd 0.1 (- decay1 0.5) 0.4)))) (percussion decay1))) (scale-db db2 (mult (lp (reson (noise decay2) cf2 bw2 1) (segment decay2 (* 2 cf2) (/ cf2 2))) (mult (percussion decay2) (asd a2 decay2 0)))) (scale-db db3 (mult (fmosc (hz-to-step cf3) (scale map3 (reson (noise decay3) mf3 500 1))) (mult (percussion decay3) (asd a3 decay3 0)))) ))) ;; @doc function syndrum:finger-cymbal ;; (syndrum:finger-cymbal [:CF][:MF][:BW][:MI][:DECAY][:ATTACK]) ;; ;; cf >-------|----------------------- ;; mi >------[*]------------- | ;; | | ;; [noise]--->[filter]--->[amp]--->[fmosc]--->[amp]---> out ;; ^ ^ | | ;; mf >--------| | | | ;; bw >----------- | | ;; decay >----[envelope]------------------------- ;; (defun syndrum:finger-cymbal (&rest args) (let* ((cf (get-keyword-value ':CF args 8000)) (mf (get-keyword-value ':MF args 1000)) (bw (get-keyword-value ':BW args 500)) (mi (get-keyword-value ':MI args 2.0)) (mamp (* cf mi)) (decay (get-keyword-value ':DECAY args 0.6 )) (attack (get-keyword-value ':ATTACK args 0)) (envsig (mult (percussion decay) (asd attack (* 0.90 decay)(* 0.1 decay))))) (mult (fmosc (hz-to-step cf) (mult (reson (noise decay) mf bw 1) (scale mamp envsig))) envsig))) ;; @doc function syndrum:chh ;; (syndrum:chh [:decay][:cutoff]) ;; Closed hi hat ;; return - sound. ;; (defun syndrum:chh (&rest args) (let ((decay (get-keyword-value ':DECAY args 0.15)) (cutoff (* (get-keyword-value ':ACCENT args 64) 77))) (mult (mult (highpass2 (noise decay) cutoff) (percussion decay)) (asd 0 (* decay 0.75)(* decay 0.25))))) ;; @doc function syndrum:ohh ;; (syndrum:ohh [:decay][:cutoff]) ;; Open hi hat ;; return - sound. ;; (defun syndrum:ohh (&rest args) (syndrum:chh :decay 0.5 :accent 100)) ;; @doc function syndrum:shaker ;; (syndrum:shaker [:decay][:c1][c2][:bw]) ;; Shaker sound ;; return - sound. ;; (defun syndrum:shaker (&rest args) (let ((decay (get-keyword-value ':DECAY args 0.33)) (c1 (get-keyword-value ':c1 args 4000)) (c2 (get-keyword-value ':c2 args 1000)) (bw (get-keyword-value ':bw args 600))) (mult (mult (hp (noise decay)(segment decay c1 c2)) (percussion decay)) (asd 0.05 (* decay 0.75)(* decay 0.25))))) ;; @doc function syndrum:clave ;; (syndrum:clave [:hz][:decay]) ;; A clave sound ;; return - sound. ;; (defun syndrum:clave (&rest args) (let ((hz (get-keyword-value ':HZ args 3520)) (decay (get-keyword-value ':DECAY args 0.20))) (mult (osc (hz-to-step hz) decay *sine-table* 90) (percussion decay)))) ;; @doc function syndrum:block ;; (syndrum:block [:hz][:decay]) ;; ;; return - sound. ;; (defun syndrum:block (&rest args) (rdrum :frq (get-keyword-value ':HZ args 440) :dur (get-keyword-value ':DECAY args 0.125) :noise 1))