timpani.lsp Version 1.00 29 March 05 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 timpani simulation based on Sound On Sound Tutorials.
function
(sos:timpani [:step][:decay][:vel][:trem][:tfrq][:tdecay]) A timpani simulation based of Sound On Sound Tutorials. Uses 6 partial additive synthesis. :step - MIDI step number. default 50 :decay - MIDI CTRL. decay time, default 32 :vel - MIDI Velocity. default 64 :trem - MIDI CTRL. Tremolo depth, default 16 :tfrq - MIDI CTRL. Tremolo frequency, default 8 :tdecay - MIDI CTRL. Tremolo delay time, default 1 return - sound.
;; timpani.lsp
;; Version 1.00 29 March 05
;; 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 timpani simulation based on Sound On Sound Tutorials.
;;
(require 'map)
(require 'map-vel6)
(require 'dlfo)
(require 'saw-16)
(provide 'timpani)
(current-file "timpani")
;; @doc function sos:timpani
;; (sos:timpani [:step][:decay][:vel][:trem][:tfrq][:tdecay])
;; A timpani simulation based of Sound On Sound Tutorials.
;; Uses 6 partial additive synthesis.
;;
;; :step - MIDI step number. default 50
;; :decay - MIDI CTRL. decay time, default 32
;; :vel - MIDI Velocity. default 64
;; :trem - MIDI CTRL. Tremolo depth, default 16
;; :tfrq - MIDI CTRL. Tremolo frequency, default 8
;; :tdecay - MIDI CTRL. Tremolo delay time, default 1
;;
;; return - sound.
;;
(defun timpani (&key (step 50)(decay 32)(vel 64)(trem 16)(tfrq 8)(tdelay 1))
(let (frq rise cfrq mfrq tnefn nsecomp nseenv decay-time tremfrq tdelay-time)
(setf frq (step-to-hz step))
(setf decay-time (map:ctrl 16 decay 1))
(setf cfrq (* 0.58 frq))
(setf mfrq (* 0.75 frq))
(setf tremfrq (map:ctrl 20 tfrq 0.25))
(setf tdelay-time (map:ctrl 4 tdelay 0))
(setf tnefn #'(lambda (amp rfrq rdecay)
(mult (osc (hz-to-step (* rfrq frq)) decay-time)
(scale amp (percussion (* rdecay decay-time))))))
(setf nseenv (percussion (* 0.4 decay-time)))
(setf nsecomp
(reson (mult (highpass8 (mult (osc (hz-to-step cfrq) decay-time *saw-16*)
(osc (hz-to-step mfrq) decay-time *saw-16*))
(* frq 1.33))
nseenv)
(scale (* 3.33 frq) nseenv) 500 1))
(scale-db (send map:*vel6* :get vel)
(mult (sum
(funcall tnefn 1.00 1.00 0.45)
(funcall tnefn 0.80 1.50 0.73)
(funcall tnefn 0.60 1.98 0.91)
(funcall tnefn 0.20 2.44 0.84)
(scale (send (map:quad 0 1 0 128) :get vel)
(sum
(funcall tnefn 0.10 3.60 0.90)
(funcall tnefn 0.05 5.00 0.95)))
(scale .25 nsecomp)
)
(sum
(percussion decay-time)
(scale (map:ctrl 0.5 trem 0)
(dlfo tremfrq decay-time
:delay (* .75 tdelay-time)
:attack (* .25 tdelay-time))))))))