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