mirror of
https://github.com/cookiengineer/audacity
synced 2025-04-29 15:19:44 +02:00
For shipped plug-ins, the version number is the same as the Audacity release version when the plug-in was last modified.
92 lines
2.8 KiB
Common Lisp
92 lines
2.8 KiB
Common Lisp
$nyquist plug-in
|
|
$version 4
|
|
$type generate
|
|
$preview linear
|
|
$i18n-hint named for Jean-Claude Risset (silent t)
|
|
$name (_ "Risset Drum")
|
|
$manpage "Risset_Drum"
|
|
$action (_ "Generating Risset Drum...")
|
|
$author (_ "Steven Jones")
|
|
$release 2.3.0
|
|
$copyright (_ "Released under terms of the GNU General Public License version 2")
|
|
|
|
;; rissetdrum.ny by Steven Jones, after Jean Claude Risset.
|
|
;; Updated by Steve Daulton July 2012 and May 2015.
|
|
|
|
;; Released under terms of the GNU General Public License version 2:
|
|
;; http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
|
;;
|
|
;; For information about writing and modifying Nyquist plug-ins:
|
|
;; https://wiki.audacityteam.org/wiki/Nyquist_Plug-ins_Reference
|
|
|
|
|
|
$control freq (_ "Frequency (Hz)") real "" 100 50 2000
|
|
$control decay (_ "Decay (seconds)") real "" 2 0.1 60
|
|
$control cf (_ "Center frequency of noise (Hz)") real "" 500 100 5000
|
|
$control bw (_ "Width of noise band (Hz)") real "" 400 10 1000
|
|
$control noise (_ "Amount of noise in mix (percent)") real "" 25 0 100
|
|
$control gain (_ "Amplitude (0 - 1)") real "" 0.8 0 1
|
|
|
|
|
|
(defun sanitise (val minx maxx)
|
|
(min (max val minx) maxx))
|
|
|
|
;; Not required with validation in Audacity 2.1.1 but left
|
|
;; for compatibility.
|
|
(setq freq (sanitise freq 1 (/ *sound-srate* 2)))
|
|
(setq decay (sanitise decay 0.1 600))
|
|
(setq cf (sanitise cf 1 (/ *sound-srate* 2)))
|
|
(setq bw (sanitise bw 10 1000))
|
|
(setq noise (sanitise (/ noise 100) 0 1))
|
|
(setq gain (sanitise gain 0 1))
|
|
|
|
;; Get length of preview
|
|
(setq pdur
|
|
(if (get '*track* 'view) ;NIL if preview
|
|
decay
|
|
(get '*project* 'preview-duration)))
|
|
|
|
(setq *rdrum-table*
|
|
(list
|
|
(mult 0.17
|
|
(sum
|
|
(scale 1.00 (build-harmonic 10 2048))
|
|
(scale 1.50 (build-harmonic 16 2048))
|
|
(scale 2.00 (build-harmonic 22 2048))
|
|
(scale 1.50 (build-harmonic 23 2048))))
|
|
(hz-to-step 1) t))
|
|
|
|
(defun log2 (n)
|
|
(/ (log (float n))(log 2.0)))
|
|
|
|
(defun percussion-env (decay)
|
|
(let* ((half-life (expt 2.0 (- (log2 decay) 3))))
|
|
(exp-dec 0 half-life decay)))
|
|
|
|
|
|
(defun risset-drum (freq decay cf bw noise-gain)
|
|
(let* ((decay2 (* decay 0.50))
|
|
(low-note (* freq 0.10))
|
|
(tone-gain (- 1 noise-gain)))
|
|
(setf pink (lowpass6 (noise decay2) bw))
|
|
(setf rdrum
|
|
(mult tone-gain
|
|
(osc (hz-to-step low-note) decay2 *rdrum-table*)))
|
|
(setf noise-band
|
|
(mult noise-gain
|
|
(sine (hz-to-step cf) decay2)
|
|
pink))
|
|
(sum
|
|
(mult
|
|
(percussion-env decay2)
|
|
(sum noise-band rdrum ))
|
|
(mult tone-gain
|
|
(percussion-env decay)
|
|
(sine (hz-to-step freq) decay)))))
|
|
|
|
;; Generate and normalize
|
|
(let* ((output (risset-drum freq decay cf bw noise))
|
|
(output (extract-abs 0 pdur output)) ; shorten if necessary for preview.
|
|
(peakval (peak output ny:all)))
|
|
(scale (/ gain peakval) output))
|