fmbass.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 percussive bass instrument
function
(fmbass pitch [:dur][:vel][:r][:tab][:pos])
Bass instrument
pitch - flonum. MIDI key number.
:dur - flonum. Decay time in seconds. Default 1.0
:vel - flonum. MIDI Velocity effects modulation index and output amplitude
:r - flonum. Modulation ratio. Default 0.5
:tab - table. Carrier wave table. Default *sine-table*
:pos - flonum. Pan position. May be either numeric value in interval
(0,1) or a control signal in the same interval. Default 0.5
return - vector. A 2 channel sound
;; fmbass.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 percussive bass instrument
;;
(require 'envelope)
(require 'map)
(require 'map-vel3)
(provide 'fmbass)
(current-file "fmbass")
(setq fmbass:*vmap* (map:linear 1.0 6.0))
;; @doc function fmbass
;; (fmbass pitch [:dur][:vel][:r][:tab][:pos])
;; Bass instrument
;;
;; pitch - flonum. MIDI key number.
;;
;; :dur - flonum. Decay time in seconds. Default 1.0
;;
;; :vel - flonum. MIDI Velocity effects modulation index and output amplitude
;;
;; :r - flonum. Modulation ratio. Default 0.5
;;
;; :tab - table. Carrier wave table. Default *sine-table*
;;
;; :pos - flonum. Pan position. May be either numeric value in interval
;; (0,1) or a control signal in the same interval. Default 0.5
;;
;; return - vector. A 2 channel sound
;;
(defun fmbass (pitch dur &key vel r tab pos)
(let* ((vel (or vel 64))
(r (or r 0.50))
(tab (or tab *sine-table*))
(chz (step-to-hz pitch))
(mi (send fmbass:*vmap* :get vel))
(env (percussion dur))
(modsig (mult (sine (hz-to-step (* chz r)) dur)
(scale (* chz mi) env))))
(pan
(scale-db (send map:*vel3* :get vel ) ; (+ 0.5 (* .125 vel))
(mult (fmosc pitch modsig tab) env))
(or pos 0.5))))