Main Page       Index


bras.lsp


 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

 (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.


View the Sourcecode :



;; 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)


Main Page       Index