3 // by: Ge Wang (gewang@cs.princeton.edu)
4 // Perry R. Cook (prc@cs.princeton.edu)
8 StifKarp karp => JCRev r => Echo a => Echo b => Echo c => dac;
13 // set max delay for echo
14 1000::ms => a.max => b.max => c.max;
16 750::ms => a.delay => b.delay => c.delay;
17 // set the initial effect mix
18 0.0 => a.mix => b.mix => c.mix;
20 // shred to modulate the mix
21 fun void echo_Shred( )
23 0.0 => float decider => float mix => float old => float inc;
28 Std.rand2f(0.0,1.0) => decider;
29 if( decider < .35 ) 0.0 => mix;
30 else if( decider < .55 ) .08 => mix;
31 else if( decider < .8 ) .5 => mix;
35 (mix-old)/1000.0 => inc; 1000 => int n;
39 // set the mix for a, b, c
40 old + inc => old => a.mix => b.mix => c.mix;
45 // let time pass until the next iteration
46 Std.rand2(2,6)::second => now;
54 [ 0, 2, 4, 7, 9 ] @=> int scale[];
60 Std.rand2f( 0.2, 0.8 ) => karp.pickupPosition;
62 scale[Std.rand2(0,scale.cap()-1)] => int freq;
63 220.0 * Math.pow( 1.05946, (Std.rand2(0,2)*12)
67 Std.rand2f( 0.2, 0.9 ) => karp.pluck;
69 if( Std.randf() > 0.8 )
71 else if( Std.randf() > .85 )
73 else if( Std.randf() > -0.9 )
74 { .125::second => now; }
77 1 => int i => int pick_dir;
79 4 * Std.rand2( 1, 5 ) => int pick;
81 0.7 / pick => float inc;
83 for( ; i < pick; i++ )
86 Std.rand2f(.2,.3) + i*inc => pluck;
87 i * 0.025 => karp.stretch;
88 pluck + -.2 * pick_dir => karp.pluck;
89 // simulate pluck direction
90 !pick_dir => pick_dir;
92 // let time pass for final pluck