Main Page       Index


fm-celeste.lsp


 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

 (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


View the Sourcecode :



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


Main Page       Index