vibraphone.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 vibraphone. The simulation is produced by summing an attack transient and a looped sustain section. The sustain section is both frequency and amplitude modulated.
wrapper
(vibraphone plist dur [:vel][:arpeg][:pos][:detune][:mix][:vfrq1][:vfrq2][:vib][:trem])
A vibraphone simulation
plist - list or flonum. List of MIDI key numbers. Alternatively a
single key number may be specified.
dur - flonum. Duration in seconds.
:vel - integer. 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
:detune - flonum. Default 1
:mix - flonum. Relative mix of component transient and body
components. Default 0.5
:vfrq1 - flonum. Frequency of first modulation signal, default 1
:vfrq2 - flonum. Frequency of seconds modulation signal, default 8
:vib - flonum. Vibrato depth, default 84
:trem - flonum. Tremolo depth, default 64
return - sound vector.
;; vibraphone.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 vibraphone. The simulation is produced by summing an attack
;; transient and a looped sustain section. The sustain section is both
;; frequency and amplitude modulated.
;;
(require 'definst)
(require 'wtab)
(require 'math)
(provide 'vibraphone)
(current-file "vibraphone")
(setq
;Sustain wave table
vibraphone:*TAB-1* (wtab:make '(( 1 1.000)
( 2 0.025)
( 3 0.025)
( 4 0.218)
( 9 0.009)
(10 0.032)))
;Transient wave table
vibraphone:*TAB-2* (wtab:make '(( 1 1.000)
( 2 0.030)
( 4 0.718)
(10 1.000)
(15 0.186)
(20 0.107)
(21 0.216)))
;Tremolo wave table
vibraphone:*TAB-3* (wtab:make '((1 0.333)(8 1.000)))
)
(definst vibraphone:voice (detune mix vfrq1 vfrq2 vib trem )
(let* ((detune (or detune 1.00))
(mix (min (max (or mix 0.5) 0) 1))
(vfrq1 (or vfrq1 1.00))
(vfrq2 (or vfrq2 8.00))
(vib (* (or vib 84) 0.0156))
(trem (* (or trem 64) 0.0156))
(f (* detune (step-to-hz pitch)))
(p (hz-to-step f))
(vib-fm-amp (* f vib 0.015))
(vib-am-amp (* trem 0.500))
(vib-am-sig (lfo vfrq1 dur vibraphone:*TAB-3*))
(strike-decay 0.200))
(sim (mult (osc p dur vibraphone:*TAB-2*)
(scale mix (percussion strike-decay)))
(mult (fmosc p (scale vib-fm-amp (lfo vfrq2 dur)) vibraphone:*TAB-1*)
(mult (sim (rgate dur)(scale vib-am-amp vib-am-sig))
(scale (- 1 mix)(percussion dur)))))))
;; @doc wrapper vibraphone
;; (vibraphone plist dur [:vel][:arpeg][:pos][:detune][:mix][:vfrq1][:vfrq2][:vib][:trem])
;; A vibraphone simulation
;;
;; plist - list or flonum. List of MIDI key numbers. Alternatively a
;; single key number may be specified.
;;
;; dur - flonum. Duration in seconds.
;;
;; :vel - integer. 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
;;
;; :detune - flonum. Default 1
;;
;; :mix - flonum. Relative mix of component transient and body
;; components. Default 0.5
;;
;; :vfrq1 - flonum. Frequency of first modulation signal, default 1
;;
;; :vfrq2 - flonum. Frequency of seconds modulation signal, default 8
;;
;; :vib - flonum. Vibrato depth, default 84
;;
;; :trem - flonum. Tremolo depth, default 64
;;
;; return - sound vector.
;;
(defwrapper vibraphone #'vibraphone:voice #'definst:ampscale)