Main Page       Index


efx.lsp


 efx.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 few DSP algorithms


function

efx:transpose-mono

 (efx:transpose-mono snd [:transpose][:r][:base])
 Stretch sound by given transposition and ratio.
 For multi channel sounds use efx:transpose instead.

 snd        -  sound.  The MONO sound source.

 :transpose - integer.  The number of half-steps to transpose. The actual 
              number of steps is the sum of the transpose argument and the 
              value returned by the (get-transpose) function from the 
              Nyquist environment. Default (+ 0 (get-transpose))
 
 :base      - flonum.  The half-step scale ratio. Default +12ROOT2+

 :r         - flonum.  A "straight" scale ratio, default 1.00

 return     - sound.  
              The combined stretch factor is:

                 sf = 1/(r * (base ^^-(t + nt)))

             Where t = transpose argument and nt is result of (get-transpose)


function

efx:transpose

 (efx:transpose snd [:transpose][:r][:base])
 Stretch sound by given transposition values.
 May be used to process mono or stereo sounds.
 See efx:transpose-mono 

 snd     - sound.  The source signal

 return - sound. 


function

efx:echo

 (efx:echo snd dly [:xpose][:base][:dry][:wet])
 Mix sound with delayed copy of itself. Alternatively the sound may be
 transposed (by stretching)

 snd    - sound.  The source signal
 dly    - flonum.  Delay time
 :xpose - flonum.  Transpose amount in steps, default 0
 :base  - flonum.  Transpose step ratio, default +12ROOT2+
 :dry   - flonum.  Relative amplitude of source signal, default 0.5
 :wet   - flonum.  Relative amplitude of delayed signal, default 0.5
 return - sound.


function

efx:necho

 (efx:necho snd dly [:n][:xpose][:base])
 Mix sound with n delayed copies of itself.

 snd    - sound.  The source signal
 dly    - flonum.  Delay time
 :n     - integer.  Number of copies, default 4
 :xpose - flonum.  Transpose amount in steps, default 0
 :base  - flonum.  Transpose step ratio, default +12ROOT2+
 return - sound. 


function

efx:fbecho

 (efx:fbecho snd dly [:n][:xpose][:base][:fb])
 Mix sound with n delayed copies of itself with decaying (or increasing)
 amplitude

 snd    - sound.  The source signal
 dly    - flonum.  Delay time
 :n     - integer.  Number of copies, default 4
 :xpose - flonum.  Transpose amount in steps, default 0
 :base  - flonum.  Transpose step ratio, default +12ROOT2+
 :fb    - flonum.  Relative amplitude of successive echos, default 0.5
 return - sound. 


View the Sourcecode :



;; efx.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 few DSP algorithms
;; 

(provide 'efx)
(current-file "efx")


;; @doc function efx:transpose-mono 
;; (efx:transpose-mono snd [:transpose][:r][:base])
;; Stretch sound by given transposition and ratio.
;; For multi channel sounds use efx:transpose instead.
;;
;; snd        -  sound.  The MONO sound source.
;;
;; :transpose - integer.  The number of half-steps to transpose. The actual 
;;              number of steps is the sum of the transpose argument and the 
;;              value returned by the (get-transpose) function from the 
;;              Nyquist environment. Default (+ 0 (get-transpose))
;; 
;; :base      - flonum.  The half-step scale ratio. Default +12ROOT2+
;;
;; :r         - flonum.  A "straight" scale ratio, default 1.00
;;
;; return     - sound.  
;;              The combined stretch factor is:
;;
;;                 sf = 1/(r * (base ^^-(t + nt)))
;;
;;             Where t = transpose argument and nt is result of (get-transpose)
;;

(defun efx:transpose-mono  (snd &key transpose r base)
  (let* ((xpose (- (+ (get-transpose)(or transpose 0))))
	 (r (if (null r) 1.00
	      (/ (float (if (zerop r) 1.00 r)))))
	 (base (float (or base +12ROOT2+)))
	 (rr (* r (expt base xpose))))
    (force-srate *default-sound-srate*
		 (stretch rr (sound snd)))))


;; @doc function efx:transpose
;; (efx:transpose snd [:transpose][:r][:base])
;; Stretch sound by given transposition values.
;; May be used to process mono or stereo sounds.
;; See efx:transpose-mono 
;;
;; snd     - sound.  The source signal
;;
;; return - sound. 
;;

(defun efx:transpose (snd &key transpose r base)
  (multichan-expand #'efx:transpose-mono snd :transpose transpose :r r :base base))


;; @doc function efx:echo
;; (efx:echo snd dly [:xpose][:base][:dry][:wet])
;; Mix sound with delayed copy of itself. Alternatively the sound may be
;; transposed (by stretching)
;;
;; snd    - sound.  The source signal
;; dly    - flonum.  Delay time
;; :xpose - flonum.  Transpose amount in steps, default 0
;; :base  - flonum.  Transpose step ratio, default +12ROOT2+
;; :dry   - flonum.  Relative amplitude of source signal, default 0.5
;; :wet   - flonum.  Relative amplitude of delayed signal, default 0.5
;; return - sound.
;;

(defun efx:echo  (snd dly &key (xpose 0)(base +12ROOT2+)(dry 0.5)(wet 0.5))
  (sim (scale dry (efx:transpose snd :transpose xpose :base base))
       (at dly 
	   (scale wet (efx:transpose snd :transpose xpose :base base)))))


;; @doc function efx:necho
;; (efx:necho snd dly [:n][:xpose][:base])
;; Mix sound with n delayed copies of itself.
;;
;; snd    - sound.  The source signal
;; dly    - flonum.  Delay time
;; :n     - integer.  Number of copies, default 4
;; :xpose - flonum.  Transpose amount in steps, default 0
;; :base  - flonum.  Transpose step ratio, default +12ROOT2+
;; return - sound. 
;;

(defun efx:necho  (snd dly &key (n 4)(xpose 0)(base +12ROOT2+))
  (simrep (index n)
	  (at (* index dly)(cue (efx:transpose snd :transpose xpose :base base)))))


;; @doc function efx:fbecho
;; (efx:fbecho snd dly [:n][:xpose][:base][:fb])
;; Mix sound with n delayed copies of itself with decaying (or increasing)
;; amplitude
;;
;; snd    - sound.  The source signal
;; dly    - flonum.  Delay time
;; :n     - integer.  Number of copies, default 4
;; :xpose - flonum.  Transpose amount in steps, default 0
;; :base  - flonum.  Transpose step ratio, default +12ROOT2+
;; :fb    - flonum.  Relative amplitude of successive echos, default 0.5
;; return - sound. 
;;

(defun efx:fbecho (snd dly &key (n 4)(xpose 0)(base +12ROOT2+)(fb 0.5))
  (simrep (index n)
	  (at (* index dly)
	      (cue (scale (expt fb (float index))
			  (efx:transpose snd :transpose xpose :base base))))))


Main Page       Index