annotate src/scheme/synthesis.scm @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 (import "samer.maths.random.*")
samer@0 2 (load "lineout.scm")
samer@0 3
samer@0 4 ; sets the Generator of a VGenerator to one
samer@0 5 ; constructed in it's own context.
samer@0 6 (define (load-generator gen)
samer@0 7 (letrec ((nd (.getNode gen))
samer@0 8 (spec (Shell.getString (.fullName nd)))
samer@0 9 (g (node nd (eval-string spec))) )
samer@0 10 (.setGenerator gen g)
samer@0 11 )
samer@0 12 )
samer@0 13
samer@0 14 (define (fir-filter coeffs) (FIRFilter. (.array coeffs)))
samer@0 15 (define (iir-filter coeffs) (IIRFilter. (.array coeffs)))
samer@0 16
samer@0 17 (define (spectral-fir n spec)
samer@0 18 (define filter (SpectralFIR. n spec))
samer@0 19 (Ops.triggerTask filter spec)
samer@0 20 (.coefficients filter))
samer@0 21
samer@0 22
samer@0 23 (define (filter-gen filt gen) (FilteredGenerator. gen filt))
samer@0 24 (define (gen->vector n gen)
samer@0 25 (define x (VVector. (cat "buffer(" (.toString gen) ")") n))
samer@0 26 (define t (GenerateVector. x gen))
samer@0 27 (addtasks t (Ops.update x))
samer@0 28 x)
samer@0 29
samer@0 30 (define (oscillator f)
samer@0 31 (define osc (Oscillator. f))
samer@0 32 (define vf (VDouble. "freq" f))
samer@0 33 (on-change vf (.setFrequency osc (.get vf)))
samer@0 34 ; (samer.core.types.VParameter. "freq" (.getFrequencyModel osc))
samer@0 35 osc)
samer@0 36
samer@0 37 (define (specsynth in N M)
samer@0 38 (define filter (SpectralFilter. in N))
samer@0 39 (addtask filter)
samer@0 40 ;(gen->vector (filter-gen filter (VGenerator. "source" (Binary.))) M))
samer@0 41 (gen->vector (filter-gen filter (BipolarUniform.)) M )
samer@0 42 )
samer@0 43
samer@0 44 (define (specsynth-async in N M)
samer@0 45 (define filter (SpectralFilter. in N))
samer@0 46 (addtask filter)
samer@0 47 (node "synth"
samer@0 48 (put "regulator.thread.priority" -0.1)
samer@0 49 (let ((new-tasks (CompoundTask.)))
samer@0 50 (RThread. new-tasks)
samer@0 51 (with-tasks new-tasks
samer@0 52 (gen->vector M (filter-gen filter (NormalisedGaussian. ))))
samer@0 53 )))
samer@0 54
samer@0 55 (define (synth2 ft mag hop sink)
samer@0 56 (define ift (RescaledIFT. ft mag))
samer@0 57 (addtask ift)
samer@0 58 (overlap-and-add sink (.output ift) hop))
samer@0 59
samer@0 60 ;;; this generates a white noise signal modulated by
samer@0 61 ;;; another signal E
samer@0 62
samer@0 63 (define (noise-resynth E N sink)
samer@0 64 (define buf (gen->vector N samer.maths.random.NormalisedGaussian.))
samer@0 65 (addtask (task (Mathx.mul (.array buf) (- (.get E) 200))))
samer@0 66 (lineout sink buf)
samer@0 67 )