*** empty log message ***
[chuck-blob.git] / v2 / examples / otf_07.ck
blob5219537daa0d907fa6ae1d49a59b296c09324ae1
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 // this synchronizes to period
19 .5::second => dur T;
20 T - (now % T) => now;
22 // construct the patch
23 SndBuf buf => Gain g => JCRev r => dac;
24 "data/snare.wav" => buf.read;
25 .5 => g.gain;
26 .05 => r.mix;
28 // where we actually want to start
29 25 => int where;
31 // time loop
32 while( true )
34     Std.rand2f(.8,.9) => buf.gain;
36     if( Std.randf() > .5 )
37     {
38         0 => int i;
39         while( i < 8 )
40         {
41             i / 8.0 => buf.gain;
42             where => buf.pos;
43             (1.0/8.0)::T => now;
44             i++;
45         }
47         while( i > 0 )
48         {
49             i / 8.0 => buf.gain;
50             where => buf.pos;
51             (1.0/8.0)::T => now;
52             i--;
53         }
54     }
55     else
56     {
57         .9 => buf.gain;
58         where => buf.pos;
59         .25::T => now;
60         .3 => buf.gain;
61         where => buf.pos;
62         .25::T => now;
63         .3 => buf.gain;
64         where => buf.pos;
65         .25::T => now;
67         .9 => buf.gain;
68         where => buf.pos;
69         .25::T => now;
70         .3 => buf.gain;
71         where => buf.pos;
72         .25::T => now;
73         .3 => buf.gain;
74         where => buf.pos;
75         .25::T => now;
77         .9 => buf.gain;
78         where => buf.pos;
79         .25::T => now;
80         .3 => buf.gain;
81         where => buf.pos;
82         .25::T => now;
83     }