Mercurial > hg > jslab
view examples/sound/sampled/specfilter.scm @ 0:bf79fb79ee13
Initial Mercurial check in.
author | samer |
---|---|
date | Tue, 17 Jan 2012 17:50:20 +0000 |
parents | |
children |
line wrap: on
line source
;;; Example of some more complicated spectral processing. ;;; We read two audio inputs: one from the sound card and one ;;; from a file. Then we filter one by the spectrum of the ;;; other. (load "functions.scm") (load "models.scm") (load "lineout.scm") (load "audio.scm") (load "synthesis.scm") (load "filelist.scm") (define size 512) ; size of STFT frames (define hop 128) ; hops size (define fmt (mono 22050)) (tasks) ;; X is an object or unit which manages the FT of live input. ;; Y is an object or unit which manages the FT of the file input. ;; f is the normalised magnitude spectrum of the file input. ;; z is the magnitude spectrum of the live input (define X (ft-vec (norm (linein (linesrc (default-mixer) fmt) size hop)))) (define Y (node "filter" (ft-vec (norm (linein (filesource) size hop))))) (define f (diffscale (ft-mag Y) cauchy-spec)) (define z (ft-mag X)) ; (define f (VVector. "filter" (.size z))) ; at this point, the task list has a lot of stuff in it: everything ; required to generate f and z when the main loop is run. (put "lineout.scale" 1.0e-5) ; get a lot of clipping if this is too large (.setWindow X (Constant. 1.0)) ; override Hanning window in STFT default ; this adds a task to multiply z (in place) by f (addtasks (task (Mathx.mul (.array z) (.array f)))) ; invert FT wih new magnitudes from z ; then overlap-and-add output to audio output (overlap-and-add (linesnk (mixer-n 2) fmt) (rescaled-ift Y z hop)) (expose) ; at this point the task list is ready and the whole ; is started by calling (start) or pressing the start button ; on the Regulator GUI.:w