*** empty log message ***
[chuck-blob.git] / exile / nime_workshop / examples / shake-o-matic.ck
blob143afaf6a9921f4bae109eef4fb5e39089ec7e22
1 //---------------|
2 // shake-o-matic!
3 // by: Ge Wang (gewang@cs.princeton.edu)
4 //     Perry R. Cook (prc@cs.princeton.edu)
5 //------------------|
7 // our patch
8 Shakers shake => JCRev r => dac;
9 // set the gain
10 //.95 => r.gain;
11 // set the reverb mix
12 //.2 => r.mix;
14 // our main loop
15 while( true )
17     // frequency..
18     if ( std.randf() > 0.25 )
19     {
20         std.rand2( 0, 22 ) => shake.which;
21         std.rand2f( 0.0, 128.0 ) => shake.freq;
22         //chout => "instrument (see docs): ";
23         //shake.which => stdout;
24     }
26     // shake it!
27     std.rand2f( 0.8, 1.3 ) => shake.noteOn;
29     if( std.randf() > 0.8 )
30     { 500::ms => now; }
31     else if( std.randf() > .85 )
32     { 250::ms => now; }
33     else if( std.randf() > -0.9 )
34     { .125::second => now; }
35     else
36     {
37         1 => int i => int pick_dir;
38         // how many times
39         4 * std.rand2( 1, 5 ) => int pick;
40         0.0 => float pluck;
41         0.7 / pick => float inc;
42         // time loop
43         for( ; i < pick; i++ )
44         {
45             75::ms => now;
46             std.rand2f(.2,.3) + i*inc => pluck;
47             pluck + -.2 * pick_dir => shake.noteOn;
48             // simulate pluck direction
49             !pick_dir => pick_dir;
50         }
52         // let time pass for final shake
53         75::ms => now;
54     }