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)