marimba.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 marimba like instrument
wrapper
(marimba plist dur [:vel][:arpeg][:pos][:r][:mix])
A marimba simulation composed of two percussive elements; a quickly
decaying transient and a longer "body" tone.
plist - list or flonum. List of MIDI key numbers. Alternatively a single
key number may be specified.
dur - flonum. Duration in seconds.
:vel - integer. MIDI velocity controls lowpass filter, 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
:r - flonum. Relative frequency of the two components. Default 1.00
:mix - flonum. Relative mix of the two components, default 0.5
return - sound vector.
;; marimba.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 marimba like instrument
;;
(require 'envelope)
(require 'wtab)
(require 'map)
(require 'definst)
(provide 'marimba)
(current-file "marimba")
(setq marimba:*tab1* (wtab:make '((1 1.000)
(2 0.010)
(3 0.010)
(4 0.080)
(5 0.024)
(9 0.012))))
(setq marimba:*tab2* (wtab:make '(( 1 1.000)
( 4 0.500)
( 5 0.030)
( 9 0.750)
(10 0.050))))
(definst marimba:voice (r mix)
(let* ((amp1 (clamp 0 1 (or mix 0.5)))
(amp2 (- 1 amp1))
(decay2 0.2000)
(r (or r 1.00)))
(sum (mult (osc pitch dur marimba:*tab1*)
(scale amp1 (percussion dur)))
(mult (osc (hz-to-step (* r (step-to-hz pitch))) dur marimba:*tab2*)
(scale amp2 (percussion decay2))))))
;; Lowpass filter cutoff as function of vbelocity.
;; curve becomes steeper above velocity = 64
;;
;(setf marimba:*vmap* (map:midi-three-point 100 64 500 15000))
(setf marimba:*vmap* (map:quad 100 15000))
;; @doc wrapper marimba
;; (marimba plist dur [:vel][:arpeg][:pos][:r][:mix])
;; A marimba simulation composed of two percussive elements; a quickly
;; decaying transient and a longer "body" tone.
;;
;; plist - list or flonum. List of MIDI key numbers. Alternatively a single
;; key number may be specified.
;;
;; dur - flonum. Duration in seconds.
;;
;; :vel - integer. MIDI velocity controls lowpass filter, 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
;;
;; :r - flonum. Relative frequency of the two components. Default 1.00
;;
;; :mix - flonum. Relative mix of the two components, default 0.5
;;
;; return - sound vector.
;;
(defwrapper marimba #'marimba:voice
#'(lambda (sig args)
(lp sig
(send marimba:*vmap* :get (get-keyword-value ':VEL args 64)))))