bras.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 brass like instrument
wrapper
(bras plist dur [:vel][:arpeg][:pos][:vib][:vdelay][:vfrq][:vtab][:r][:pb]) 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, 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 :vib - flonum. Vibrato depth, default 0 :vdelay - flonum. Vibrato delay time, default 0. :vfrq - flonum. Vibrato frequency, default 7.00 Hz. :vtab - WTAB. Vibrato wave table, default *tri-table* :r - flonum. Detune ratio, default 1.005 :bp - flonum. Pitch bend amount, default 0.050 return - sound vector.
;; bras.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 brass like instrument ;; (require 'envelope ) (require 'wtab ) (require 'dlfo ) (require 'reslp ) (require 'map ) (require 'map-vibrato) (require 'rmband ) (require 'definst ) (require 'saw-16) (provide 'bras) (current-file "bras") (setf bras:*v-filter-attack* (map:quad 0.5 0.001)) (setf bras:*v-filter-depth* (map:quad 700 10000)) (setf bras:*v-env-attack* (map:quad 0.1 0.01 )) (setf bras:*v-spit-amp* (map:quad +9 -3 )) (setf bras:*v-spit-attack* (map:quad 0.5 0.01 )) (defun bras:spit (pitch dur vel ) (let ((attack (send bras:*v-spit-attack* :get vel))) (scale-db (send bras:*v-spit-amp* :get vel) (mult (rmband (+ pitch 30) :dur dur :bw 500) (sum (scale 0.75 (percussion dur)) (scale 0.25 (asd attack (- dur attack 0.1) 0.1))))))) (defun bras:filter (source floor dur vel ) (let* ((bw 120) (amp (send bras:*v-filter-depth* :get vel)) (attack (send bras:*v-filter-attack* :get vel)) (decay 0.10) (release 0.015) (hold (max 0 (- dur attack decay release)))) (reslp source (sum floor (scale amp (adsr attack decay hold release 0.5)))))) (definst bras:voice (r pb vel vib vfrq vdelay vtab) (let* ((hz1 (step-to-hz pitch)) (r (or r 1.0050)) (pb (or pb 0.0500)) (vel (or vel 64)) (floor (* hz1 0.25)) (spit-amp 2.000) (attack (send bras:*v-env-attack* :get vel)) (decay 0.050) (release 0.012) (hold (max 0 (- dur attack decay release))) (sl 0.500) (pbdur 0.125) (pbsig (asd 0.013 0 0.112)) (hz2 (* hz1 r)) ;(vamp (* hz1 (or vib 1.00) 0.02)) (vib (or vib 32)) (vamp (map:vibrato hz1 vib)) (vfrq (or vfrq 7.00)) (vdelay (or vdelay 0.5)) (vattack 0.25) (vtab (or vtab *tri-table*)) (vibsig (scale vamp (dlfo vfrq dur :delay vdelay :attack vattack :tab vtab :phase 'RANDOM))) ) (mult (bras:filter (sum (fmosc pitch (sum (scale (* pb hz1) pbsig) vibsig) *saw-16*) (fmosc (hz-to-step hz2)(sum (scale (* pb hz2) pbsig) vibsig) *saw-16*) (scale spit-amp (bras:spit pitch dur vel))) floor dur vel) (adsr attack decay 0 release 0.5 dur)))) ;; @doc wrapper bras ;; (bras plist dur [:vel][:arpeg][:pos][:vib][:vdelay][:vfrq][:vtab][:r][:pb]) ;; ;; 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, 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 ;; ;; :vib - flonum. Vibrato depth, default 0 ;; ;; :vdelay - flonum. Vibrato delay time, default 0. ;; ;; :vfrq - flonum. Vibrato frequency, default 7.00 Hz. ;; ;; :vtab - WTAB. Vibrato wave table, default *tri-table* ;; ;; :r - flonum. Detune ratio, default 1.005 ;; ;; :bp - flonum. Pitch bend amount, default 0.050 ;; ;; return - sound vector. ;; (defwrapper bras #'bras:voice #'definst:ampscale)