fm-celeste.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 celeste simulation.
wrapper
(fm-celeste plst dur [:vel][:arpeg][:pos][:vib][:vfrq][:vdelay]) An FM celeste simulation plst - list or flonum. List of MIDI key numbers to be played. Alternatively a single key number may be used. dur - flonum. Decay time in seconds. Default 2.50 :vib - flonum. Vibrato depth 0<= vib <128, Default 5.00 :vfrq - flonum. Vibrato frequency in Hertz. Default 5.00 :vdelay - flonum. Vibrato delay/attack time in seconds Default 0.333 :vel - flonum. Velocity 0 <= vel < 128. Default 64 :arpeg - flonum. Time interval between notes in plst Non-zero values produce arpeggio. Default 0 :pos - flonum. Pan position either as a fixed value in interval (0,1) or a control signal in the same interval. Default 0.5 return - vector. A 2 channel sounds
;; fm-celeste.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 celeste simulation. ;; (require 'envelope) (require 'fmop) (require 'dlfo) (require 'map) (require 'map-vel3) (require 'map-vibrato) (require 'definst) (provide 'fm-celeste) (current-file "fm-celeste") (setq fm-celeste:*v-mi-map* (map:linear 0.05 5.5)) (setq fm-celeste:*v-db-map* map:*vel3*) (defun fm-celeste:rack (pitch dur &key vibsig vel env1 env2 env3 env4) (let* ((hz (step-to-hz pitch)) (vibsig (or vibsig (s-rest dur))) (vscale (send fm-celeste:*v-mi-map* :get (or vel 64))) (genv (rgate dur)) (env1 (or env1 genv)) (env2 (or env2 genv)) (env3 (or env3 genv)) (env4 (or env4 genv)) (r1 1.405) (r2 7.005) (r3 1.005) (r4 1.735) (hz1 (* r1 hz)) (hz3 (* r3 hz)) (i2 (* vscale 0.50)) (i4 (* vscale 0.25))) ; (out "vel" vel " vscale" vscale " i2" i2 " i4" i4 "\n") ; DEBUG *** (sum (fmop:cc hz1 env1 (sum (fmop:mm hz1 r2 i2 env2 (scale r2 vibsig)) vibsig)) (fmop:cc hz3 env3 (sum (fmop:mm hz3 r4 i4 env4 (scale r4 vibsig)) vibsig)) ))) (definst fm-celeste:voice (vib vfrq vdelay vel) (let* ((hz (step-to-hz pitch)) (vibamp (map:vibrato hz (or vib 5))) (vfrq (or vfrq 5.00)) (vdelay (or vdelay 0.333)) (vibsig (scale vibamp (dlfo vfrq dur :phase t :delay vdelay :attack vdelay :tab *tri-table*))) (env1 (percussion dur)) (env2 (adsr 0.05 (* 0.75 dur) 0.00 0.00 0)) (env3 (percussion (* dur 0.50))) (env4 (adsr 0.01 (* 0.25 dur) 0.00 0.00 0))) (fm-celeste:rack pitch dur :vibsig vibsig :vel vel :env1 env1 :env2 env2 :env3 env3 :env4 env4))) ;; @doc wrapper fm-celeste ;; (fm-celeste plst dur [:vel][:arpeg][:pos][:vib][:vfrq][:vdelay]) ;; An FM celeste simulation ;; ;; plst - list or flonum. List of MIDI key numbers to be played. ;; Alternatively a single key number may be used. ;; ;; dur - flonum. Decay time in seconds. Default 2.50 ;; ;; :vib - flonum. Vibrato depth 0<= vib <128, Default 5.00 ;; ;; :vfrq - flonum. Vibrato frequency in Hertz. Default 5.00 ;; ;; :vdelay - flonum. Vibrato delay/attack time in seconds Default 0.333 ;; ;; :vel - flonum. Velocity 0 <= vel < 128. Default 64 ;; ;; :arpeg - flonum. Time interval between notes in plst ;; Non-zero values produce arpeggio. Default 0 ;; ;; :pos - flonum. Pan position either as a fixed value in interval (0,1) or ;; a control signal in the same interval. Default 0.5 ;; ;; return - vector. A 2 channel sounds ;; (defwrapper fm-celeste #'fm-celeste:voice #'(lambda (sig args) (scale-db (send fm-celeste:*v-db-map* :get (get-keyword-value ':VEL args 64)) sig)))