samer@0: (import "samer.maths.random.*") samer@0: (load "lineout.scm") samer@0: samer@0: ; sets the Generator of a VGenerator to one samer@0: ; constructed in it's own context. samer@0: (define (load-generator gen) samer@0: (letrec ((nd (.getNode gen)) samer@0: (spec (Shell.getString (.fullName nd))) samer@0: (g (node nd (eval-string spec))) ) samer@0: (.setGenerator gen g) samer@0: ) samer@0: ) samer@0: samer@0: (define (fir-filter coeffs) (FIRFilter. (.array coeffs))) samer@0: (define (iir-filter coeffs) (IIRFilter. (.array coeffs))) samer@0: samer@0: (define (spectral-fir n spec) samer@0: (define filter (SpectralFIR. n spec)) samer@0: (Ops.triggerTask filter spec) samer@0: (.coefficients filter)) samer@0: samer@0: samer@0: (define (filter-gen filt gen) (FilteredGenerator. gen filt)) samer@0: (define (gen->vector n gen) samer@0: (define x (VVector. (cat "buffer(" (.toString gen) ")") n)) samer@0: (define t (GenerateVector. x gen)) samer@0: (addtasks t (Ops.update x)) samer@0: x) samer@0: samer@0: (define (oscillator f) samer@0: (define osc (Oscillator. f)) samer@0: (define vf (VDouble. "freq" f)) samer@0: (on-change vf (.setFrequency osc (.get vf))) samer@0: ; (samer.core.types.VParameter. "freq" (.getFrequencyModel osc)) samer@0: osc) samer@0: samer@0: (define (specsynth in N M) samer@0: (define filter (SpectralFilter. in N)) samer@0: (addtask filter) samer@0: ;(gen->vector (filter-gen filter (VGenerator. "source" (Binary.))) M)) samer@0: (gen->vector (filter-gen filter (BipolarUniform.)) M ) samer@0: ) samer@0: samer@0: (define (specsynth-async in N M) samer@0: (define filter (SpectralFilter. in N)) samer@0: (addtask filter) samer@0: (node "synth" samer@0: (put "regulator.thread.priority" -0.1) samer@0: (let ((new-tasks (CompoundTask.))) samer@0: (RThread. new-tasks) samer@0: (with-tasks new-tasks samer@0: (gen->vector M (filter-gen filter (NormalisedGaussian. )))) samer@0: ))) samer@0: samer@0: (define (synth2 ft mag hop sink) samer@0: (define ift (RescaledIFT. ft mag)) samer@0: (addtask ift) samer@0: (overlap-and-add sink (.output ift) hop)) samer@0: samer@0: ;;; this generates a white noise signal modulated by samer@0: ;;; another signal E samer@0: samer@0: (define (noise-resynth E N sink) samer@0: (define buf (gen->vector N samer.maths.random.NormalisedGaussian.)) samer@0: (addtask (task (Mathx.mul (.array buf) (- (.get E) 200)))) samer@0: (lineout sink buf) samer@0: )