*** empty log message ***
[chuck-blob.git] / v2 / examples / analysis / xsynth.ck
blob48572b6596f50b5dbb945c8fe94b8ab0751e8ec5
1 // really really bad cross synthesizer...
3 // our patch
4 adc => FFT X => blackhole;
5 FFT Y => blackhole;
6 // synthesis
7 IFFT ifft => dac;
9 // what to cross
10 BlitSquare blt[6];
11 [ 66, 70, 73, 78, 84, 87] @=> int pitches[];
12 for( int i; i < blt.size(); i++ )
14     blt[i] => Y;
15     20 => blt[i].harmonics;
16     pitches[i] => Std.mtof => blt[i].freq;
19 // set FFT size
20 4096 => X.size => Y.size => int FFT_SIZE;
21 // desired hop size
22 FFT_SIZE / 8 => int HOP_SIZE;
23 // set window and window size
24 Windowing.hann(1024) => X.window;
25 Windowing.hann(1024) => Y.window;
26 // use this to hold contents
27 complex Z[FFT_SIZE/2];
29 // control loop
30 while( true )
32     // take fft
33     X.upchuck();
34     Y.upchuck();
35     
36     // multiply
37     for( int i; i < X.size()/2; i++ )
38         Math.sqrt((X.cval(i)$polar).mag) * Y.cval(i) => Z[i];
39     
40     // take ifft
41     ifft.transform( Z );
42     
43     // advance time
44     HOP_SIZE::samp => now;