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)