*** empty log message ***
[chuck-blob.git] / v2 / test / otf_06.ck
blob51590ce2f58709a39fb2687e07db3edc2fb1b743
1 //----------------------------|
2 // on-the-fly synchronization
3 // adapted from Perry's ChucK Drummin' + Ge's sine poops
4 //
5 // authors: Perry Cook (prc@cs.princeton.edu)
6 //          Ge Wang (gewang@cs.princeton.edu)
7 // --------------------|          
8 // add one by one into VM (in pretty much any order):
9 // 
10 // terminal-1%> chuck --loop
11 // ---
12 // terminal-2%> chuck + otf_01.ck
13 // (anytime later)
14 // terminal-2%> chuck + otf_02.ck
15 // (etc...)
16 //--------------------------------------|
18 // synchronize to period
19 .5::second => dur T;
20 T - (now % T) => now;
22 sinosc s => JCRev r => dac;
23 .05 => s.gain;
24 .5 => r.mix;
26 // scale (in semitones)
27 [ 0, 2, 4, 7, 9 ] @=> int scale[];
29 // infinite time loop
30 while( true )
32     // get note class
33     scale[ math.rand2(0,4) ] => float freq;
34     // get the final freq
35     std.mtof( 69 + (std.rand2(0,3)*12 + freq) ) => s.freq;
36     // reset phase for extra bandwidth
37     0 => s.phase;
39     // advance time
40     if( std.randf() > -.5 ) .25::T => now;
41     else .5::T => now;