// class: envelope generator class EnvGen { 200.0 => float _rampTime; Step _s => Envelope _e => blackhole; _rampTime::ms => _e.duration; fun void setRampTime(float rampTime) { rampTime => _rampTime; } fun void target(float val) { _e.target(val); } fun float getSample() { return _e.last(); } } // class: sound player class Player { SinOsc _s => NRev _rev => Envelope en => dac; _rev.mix(0.05); EnvGen _amp, _freq; fun void setAmp(float amp) { _amp.target(amp); } fun void setFreq(float freq) { _freq.target(freq); } fun void setRampTime(float rampTime) { _amp.setRampTime(rampTime); _freq.setRampTime(rampTime); } fun void _run() { while(true) { _amp.getSample() => _s.gain; _freq.getSample() => _s.freq; 1::samp => now; } } spork ~ _run(); // run immediately } // ----------------------------------------------------- "/Users/ckaymaz/Desktop/music220a/hwexamples/sf-temperature.dat" => string mydata; DataReader dr; dr.load(mydata); if (!dr.isValid()) me.exit(); Player ply; 200.0 => float rampTime; ply.setRampTime(rampTime); 0 => int i; [ 40, 50, 60, 70] @=> int mult[]; for (0 => int j; j < 0; ++j) { SinOsc s => Envelope e => dac; 700 => s.freq; e.keyOn(); 500::ms=>now; e.keyOff(); 300::ms => now; } while(dr.next()) { dr.getNormalized() => float w; ply.setAmp(10); ply.setFreq(Std.mtof(60.0 + w * mult[i])); i++; if (i == 4) 0 => i; (ply.en).keyOn(); 100::ms => now; (ply.en).keyOff(); 100::ms => now; }