*** empty log message ***
[chuck-blob.git] / v2 / examples / stk / mode-o-matic.ck
blob2e1ba47d742e5aafe44d1a505a2802a1bdf8d4e1
1 //---------------|
2 // modal demo
3 // based off of mand-o-matic ( master plan ) 
4 // by : philipd 
5 // by: Ge Wang (gewang@cs.princeton.edu)
6 //     Perry R. Cook (prc@cs.princeton.edu)
7 //------------------|
8 // our patch
10 ModalBar modey => JCRev r => Echo a => Echo b => Echo c => dac;
12 // set the gain
13 .95 => r.gain;
14 // set the reverb mix
15 .05 => r.mix;
16 // set max delay for echo
17 1000::ms => a.max => b.max => c.max;
18 // set delay for echo
19 750::ms => a.delay => b.delay => c.delay;
20 // set the initial effect mix
21 0.0 => a.mix => b.mix => c.mix;
23 // shred to modulate the mix
24 fun void echo_Shred( )
25
26     0.0 => float decider => float mix => float old => float inc;
28     // time loop
29     while( true )
30     {
31         Std.rand2f(0.0,1.0) => decider;
32         if( decider < .35 ) 0.0 => mix;
33         else if( decider < .55 ) .08 => mix;
34         else if( decider < .8 ) .5 => mix;
35         else .15 => mix;
37         // find the increment
38         (mix-old)/1000.0 => inc; 1000 => int n;
39         // time loop
40         while( n-- )
41         {
42             // set the mix for a, b, c
43             old + inc => old => a.mix => b.mix => c.mix;
44             1::ms => now;
45         }
46         // remember the old
47         mix => old;
48         // let time pass until the next iteration
49         Std.rand2(2,6)::second => now;
50     }
53 // let echo shred go
54 spork ~ echo_Shred();
56 // scale
57 [ 0, 2, 4, 7, 9, 11 ] @=> int scale[];
59 // our main loop
60 while( true )
62     //presets 
63     if ( Std.randf() > 0.9 )
64         Std.rand2 (0,8) => modey.preset;
66     // position
67     Std.rand2f( 0.2, 0.8 ) => modey.strikePosition;
68     // frequency...
69     scale[Std.rand2(0,scale.cap()-1)] => int freq;
70     Std.mtof( 45 + Std.rand2(0,4)*12 + freq ) => modey.freq;
72     // pluck it!
73     Std.rand2f( 0.2, 0.6 ) => modey.strike;
75     if( Std.randf() > 0.8 )
76     { 500::ms => now; }
77     else if( Std.randf() > .85 )
78     { 250::ms => now; }
79     else if( Std.randf() > -0.9 )
80     { .125::second => now; }
81     else
82     {
83         1 => int i => int pick_dir;
84         // how many times
85         4 * Std.rand2( 1, 5 ) => int pick;
86         0.0 => float pluck;
87         0.65 / pick => float inc;
88         // time loop
89         for( ; i < pick; i++ )
90         {
91             75::ms => now;
92             Std.rand2f(.2,.3) + i*inc => pluck;
93             pluck => modey.stickHardness;
94             pluck + -.2 * pick_dir => modey.strike;
95             // simulate pluck direction
96             !pick_dir => pick_dir;
97         }
98         // let time pass for final pluck
99         75::ms => now;
100     }