rdrum.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 Risset drum
function
(rdrum [:frq][:dur][:bw][:cf][:noise][:inharm][:fund][:r])
A Risset Drum
:frq - flonum. Fundamental frequency in Hz, default 500
:dur - flonum. Duration in seconds, default 0.25
:bw - flonum. Noise band width in Hz, default 400
:cf - flonum. Noise center frequency in Hz, default 500
:noise - flonum. Noise amplitude, default 0.5
:inharm - flonum. Inharmonic component amplitude, default 0.17
:fund - flonum. Fundamental component amplitude, default 0.40
:r - flonum. Relative frequency of Inharmonic component
to the fundamental, default 0.1
return - sound.
;; rdrum.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 Risset drum
;;
(require 'wtab)
(require 'pink)
(provide 'rdrum)
(current-file "rdrum")
(setq rdrum:*tab* (wtab:make '((10 1.0)(16 1.5)(22 2.0)(23 1.5))))
;; @doc function rdrum
;; (rdrum [:frq][:dur][:bw][:cf][:noise][:inharm][:fund][:r])
;; A Risset Drum
;;
;; :frq - flonum. Fundamental frequency in Hz, default 500
;; :dur - flonum. Duration in seconds, default 0.25
;; :bw - flonum. Noise band width in Hz, default 400
;; :cf - flonum. Noise center frequency in Hz, default 500
;; :noise - flonum. Noise amplitude, default 0.5
;; :inharm - flonum. Inharmonic component amplitude, default 0.17
;; :fund - flonum. Fundamental component amplitude, default 0.40
;; :r - flonum. Relative frequency of Inharmonic component
;; to the fundamental, default 0.1
;;
;; return - sound.
;;
(defun rdrum (&key (frq 500)(dur 0.25)(bw 400)(cf 500)(noise 0.5)
(inharm 0.17)(fund 0.40)(r 0.1))
(let* ((dur2 (* dur 0.50))
(p-fund (hz-to-step frq))
(p-inharm (hz-to-step (* frq r))))
(sim (mult
(sim (scale noise (mult (osc (hz-to-step cf) dur2)(pink dur2 bw)))
(scale inharm (osc p-inharm dur2 rdrum:*tab*)))
(percussion dur2))
(mult (scale fund (osc p-fund dur))(percussion dur)))))
;; @function rdrum2
;; (rdrum2 [:frq][:dur][:bw][:cf][:noise][:inharm][:fund][:r][:nmod][:fmod][:inmod])
;; A Risset Drum
;; Same as rdrum function but adds ability to individually modulate the
;; different components of the sound.
;;
;; :frq - flonum. Fundamental frequency in Hz, default 500
;; :dur - flonum. Duration in seconds, default 0.25
;; :bw - flonum. Noise band width in Hz, default 400
;; :cf - flonum. Noise center frequency in Hz, default 500
;; :noise - flonum. Noise amplitude, default 0.5
;; :inharm - flonum. Inharmonic component amplitude, default 0.17
;; :fund - flonum. Fundamental component amplitude, default 0.40
;; :r - flonum. Relative frequency of Inharmonic component
;; to the fundamental, default 0.1
;; :nmod - flonum. Noise (filter) modulation
;; :fmod - sound. Fundamental modulation
;; :inharm - sound. Harmonics modulation
;;
;; return - sound.
;;
(defun rdrum2 (&key (frq 500)(dur 0.25)(bw 400)(cf 500)(noise 0.5)
(inharm 0.17)(fund 0.40)(r 0.1)
nmod fmod inmod)
(let* ((dur2 (* dur 0.50))
(p-fund (hz-to-step frq))
(p-inharm (hz-to-step (* frq r)))
(nmod (or nmod (s-rest dur)))
(nmod (or nmod (s-rest dur)))
(fmod (or fmod (s-rest dur)))
(inmod (or inmod (s-rest dur))))
(sim (mult
(sim (scale noise (mult (fmosc (hz-to-step cf)(reson (sim cf nmod)(noise dur2) bw 1))))
(scale inharm (fmosc p-inharm inmod rdrum:*tab*)))
(percussion dur2))
(mult (scale fund (fmosc p-fund fmod *sine-table*))(percussion dur)))))