3 // based off of mand-o-matic ( master plan )
5 // by: Ge Wang (gewang@cs.princeton.edu)
6 // Perry R. Cook (prc@cs.princeton.edu)
10 ModalBar modey => JCRev r => Echo a => Echo b => Echo c => dac;
16 // set max delay for echo
17 1000::ms => a.max => b.max => c.max;
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( )
26 0.0 => float decider => float mix => float old => float inc;
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;
38 (mix-old)/1000.0 => inc; 1000 => int n;
42 // set the mix for a, b, c
43 old + inc => old => a.mix => b.mix => c.mix;
48 // let time pass until the next iteration
49 Std.rand2(2,6)::second => now;
57 [ 0, 2, 4, 7, 9, 11 ] @=> int scale[];
63 if ( Std.randf() > 0.9 )
64 Std.rand2 (0,8) => modey.preset;
67 Std.rand2f( 0.2, 0.8 ) => modey.strikePosition;
69 scale[Std.rand2(0,scale.cap()-1)] => int freq;
70 Std.mtof( 45 + Std.rand2(0,4)*12 + freq ) => modey.freq;
73 Std.rand2f( 0.2, 0.6 ) => modey.strike;
75 if( Std.randf() > 0.8 )
77 else if( Std.randf() > .85 )
79 else if( Std.randf() > -0.9 )
80 { .125::second => now; }
83 1 => int i => int pick_dir;
85 4 * Std.rand2( 1, 5 ) => int pick;
87 0.65 / pick => float inc;
89 for( ; i < pick; i++ )
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;
98 // let time pass for final pluck