Main Page       Index


stldrm.lsp


 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

 (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.


View the Sourcecode :



;; 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)


Main Page       Index