*** empty log message ***
[chuck-blob.git] / exile / v1 / examples / wurley.ck
blob144d69732379fab5e0d7381c52f75b4ec947509b
1 // even more music for replicants
3 Wurley voc=> JCRev r => Echo a => Echo b => Echo c => dac;
5 220.0 => voc.freq;
6 0.95 => voc.gain;
7 .8 => r.gain;
8 .2 => r.mix;
9 1000::ms => a.max => b.max => c.max;
10 750::ms => a.delay => b.delay => c.delay;
11 .50 => a.mix => b.mix => c.mix;
13 // shred to modulate the mix
14 fun void vecho_shred( )
16     0.0 => float decider;
17     0.0 => float mix;
18     0.0 => float old;
19     0.0 => float inc;
20     0 => int n;
22     // time loop
23     while( true )
24     {
25         std.rand2f(0.0,1.0) => decider;
26         if( decider < .3 ) 0.0 => mix;
27         else if( decider < .6 ) .08 => mix;
28         else if( decider < .8 ) .5 => mix;
29         else .15 => mix;
31         // find the increment
32         (mix-old)/1000.0 => inc;
33         1000 => n;
34         while( n-- )
35         {
36             old + inc => old;
37             old => a.mix => b.mix => c.mix;
38             1::ms => now;
39         }
40         mix => old;
41         std.rand2(2,6)::second => now;
42     }
45 // let echo shred go
46 spork ~ vecho_shred();
49 // our main loop
50 while( true )
53     // pentatonic
54     2 * std.rand2( 0, 4 ) => int freq;
55     if( freq == 4 ) 3 => freq;
56     if( freq == 6 ) 7 => freq;
57     if( freq == 2 ) 11 => freq;
58     std.mtof( (float)( 45 + std.rand2(0,1) * 12 + freq ) ) => voc.freq;
59     std.rand2f( 0.6, 0.8 ) => voc.noteOn;
61     if( std.randf() > 0.7 )
62     { 1000::ms => now; }
63     else if( std.randf() > .7 )
64     { 500::ms => now; }
65     else if( std.randf() > -0.8 )
66     { .250::second => now; }
67     else
68     {
69         0 => int i;
70         2 * std.rand2( 1, 3 ) => int pick;
71         0 => int pick_dir;
72         0.0 => float pluck;
74         for( ; i < pick; i++ )
75         {
76             std.rand2f(.4,.6) + (float)i*.035 => pluck;
77             pluck + 0.03 * (float)(i * pick_dir) => voc.noteOn;
78             !pick_dir => pick_dir;
79             250::ms => now;
80         }
81     }