me.sourceDir() + "water_drop.wav" => string waterdrop; SndBuf buf => Gain out => Pan2 p => dac; out => Delay delay => out; waterdrop => buf.read; part1(); part2(0.1, 0.3); part3(); part4(); while( true ) { Math.sin( now / 1::second * 2 * pi ) => p.pan; 0.8::second => now; } fun void part1() { drop_water(4, 0.1, 0.5, 1.8); drop_water(4, 0.2, 0.8, 0.8); drop_water(1, 0.3, 0.5, 1.8); drop_water(1, 0.1, 0.8, 0.1); drop_water(1, 0.3, 0.5, 1.8); drop_water(1, 0.1, 0.8, 0.1); drop_water(2, 0.3, 0.5, 1.8); spork ~ drop_water(16, 0.1, 0.8, 0.2); 1.6::second => now; spork ~ drop_water(8, 0.2, 1, 0.4); spork ~ drop_water(16, 0.1, 0.8, 0.2); 1.6::second => now; spork ~ drop_water(8, 0.2, 1, 0.4); } fun void part2(float g, float note_len) { for (0 => int i; i < 3 ; 1 +=> i) { drop_water(1, g, 1, note_len); drop_water(1, g, 0.5, note_len); drop_water(1, g, 0.1, note_len); drop_water(1, g, 1, note_len); drop_water(1, g, 0.2, note_len); drop_water(1, g, 0.8, note_len); drop_water(1, g, 0.6, note_len); } 0.5::second => now; for (0 => int i; i < 2 ; 1 +=> i) { drop_water(1, g, 0.7, note_len); drop_water(1, g, 0.9, note_len); drop_water(1, g, 0.3, note_len); drop_water(1, g, .54, note_len); drop_water(1, g, 0.6, note_len); drop_water(1, g, 1, note_len); drop_water(1, g, .54, note_len); drop_water(1, g, 0.6, note_len); drop_water(1, g, 0.2, note_len); } } fun void part3() { Math.random2f(0.999, 0.9999) => float R; spork ~ transform_pitches(8, R, 0.1, 0.9, 0.5, 50); 3::second => now; Math.random2f(0.999, 0.9999) => R; spork ~ transform_pitches(8, R, 0.3, 0.6, 0.8, 45); 3::second => now; Math.random2f(0.999, 0.9999) => R; spork ~ transform_pitches(8, R, 0.5, 0.3, 0.6, 35); 3::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.6, 0.2, 0.7, 30); 3::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.7, 0.9, 0.3, 25); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.7, 0.1, 0.3, 20); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.8, 0.6, 0.2, 19); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.9, 0.1, 0.8, 18); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.9, 0.3, 0.9, 17); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.8, 0.6, 0.2, 20); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(7, R, 0.6, 0.6, 0.2, 20); 2::second => now; Math.random2f(0.9999, 0.99999) => R; spork ~ transform_pitches(5, R, 0.5, 0.4, 0.2, 15); 2::second => now; Math.random2f(0.999, 0.9999) => R; spork ~ transform_pitches(5, R, 0.3, 0.4, 0.3, 10); 1::second => now; Math.random2f(0.999, 0.9999) => R; spork ~ transform_pitches(5, R, 0.2, 0.6, 0.9, 10); 1::second => now; me.sourceDir() + "kettle_cut.wav" => string kettle; SndBuf buf2 => dac; 0.8 => buf2.rate; kettle => buf2.read; Math.random2f(0.999, 0.9999) => R; spork ~ transform_pitches(5, R, 0.1, 0.1, 0.2, 5); 5::second => now; } fun void part4() { drop_water(4, 0.1, 0.5, 1.8); 0::samp => delay.delay; 0 => delay.gain; 5::second => now; drop_water(2, 0.1, 0.5, 2.6); } fun void transform_pitches(float dr, float R, float g, float r1, float r2, int d) { 100::samp => delay.delay; Math.pow(R, 500) => delay.gain; now + dr::second => time later; while( now < later ) { 0 => buf.pos; g => buf.gain; r1 => buf.rate; 100::ms => now; 0 => buf.pos; g => buf.gain; r2 => buf.rate; d::ms => now; } } fun void drop_water(int numDrops, float g, float r, float d) { for ( 0 => int i; i < numDrops; i++ ) { 0 => buf.pos; g => buf.gain; r => buf.rate; d::second => now; } }