SawOsc s => Envelope e => dac; e.duration(20::ms); s.gain(0.5); SawOsc s2 => Envelope e2 => dac; e2.duration(20::ms); s2.gain(0.5); 61 => float key; //midi key C#4 0.4 => float tempo; [0, 5, 8, 7, 10, 0, 5, 8, 7, 10] @=> int notes[]; [15] @=> int extraNote[]; //for rhythm[2] and rhythm[4] [0.5, 0.5, 0.5, 0.5, 1.5, 0.5, 0.5, 0.5, 0.5, 0.5] @=> float rhythm[]; dac => WvOut w => blackhole; "C:/Users/emgraber/Documents/Stanford/220c/Reich.wav" => w.wavFilename; //while( true ){ for(0 => int q; q<10; q++){ for( 0 => int i; i e.keyOn; if(i == 2 || i == 4){1 => e2.keyOn;} s.freq(Std.mtof(notes[i]+key)); (tempo*rhythm[i]) ::second => now; 1 => e.keyOff; 1 => e2.keyOff; 20::ms => now; } } w.closeFile(); ///////////////////////////////////////////////////////////////////////// fun void noteLengthSensitivity(float alSens ) { // this function alters the length of notes within the tempo, // a kind of rhythmic timing tool } fun void articulationStrength(float artStrenght){} fun void maxTimePerBow(dur bowDur){} fun void vibratoIntensity(float vibIntensity){} fun void dynamicRange( float minDyn, float maxDyn){} fun void percentBowHairContact( float percent){} //bow starts //frog tip //string crossings //slurs //whichString() //meterIs() ? pickups //placement, i.e. between bridge and fb //pitch inflections //phrase and motion with ambisonics //grit in sound on/off