// woodchucKer by Jaxon // extra alpha version // to run, first have miniAudiclie installed (mac only!) //use the 'rec.ck' shred to record a .wav to your home directory //to use, run 'rec' while woodchucker is running // stop all programs, then look in home directory for wav file // rec.ck from chucK website demos // please share any fixes edits or additions! // jaxonbk@gmail.com // a few things to hear some sound once the gui is open // // turn up release slider (slide right) // turn up pitchlength (this is the length of one channel in ms) // press one of the main functions // hit start/stop button // you should now hear something // see notes below for load and save info public class step { MAUI_Slider param1_slider; MAUI_Slider param2_slider; MAUI_Slider param3_slider; MAUI_Slider param4_slider; MAUI_Slider param5_slider; MAUI_Button step_button; MAUI_Button chorus_button; MAUI_Button pitchShift_button; MAUI_Button modulate_button; MAUI_Button delay_button; MAUI_Button aux_button; MAUI_Slider chrsMix; MAUI_Slider chrsModDepth; MAUI_Slider chrsModFreq; MAUI_Slider ptchShftMix; MAUI_Slider ptchShftShift; MAUI_Slider modGain; MAUI_Slider modRate; MAUI_Slider delayLength; MAUI_Slider delayMax; MAUI_Slider reverbMix; MAUI_Slider aux; MAUI_LED led; } Moog moog => ResonZ res => Chorus c => PitShift ps => JCRev r1 => NRev r2 => PRCRev r3 => ADSR e => Gain g => Gain gain => dac; // gain => JCRev masterRV1 => dac; gain => NRev masterRV2 => dac; gain => PRCRev masterRV3 => dac; step stepArray[16]; MAUI_Slider attackTime; MAUI_Button stepperEnvOn; MAUI_Slider decayTime; // actually release MAUI_Slider stepLength; MAUI_Slider noteLength; MAUI_Slider bendGranu; MAUI_Slider bendTremRt; MAUI_Slider bendTremOffDpth; MAUI_Slider bendTremOffRt; MAUI_Slider masterGain; MAUI_Button stepperRevsOn; MAUI_Slider revs1; MAUI_Slider revs2; MAUI_Button bendLFO; MAUI_Button bendChorus; MAUI_Button bendPitchBend; MAUI_Button bendReverb; MAUI_Button bendFreq; MAUI_Button bendRes; MAUI_Button bendSwpRt; MAUI_Button bendGain; MAUI_Slider bendTimeSl; MAUI_Slider endBendSl; MAUI_Slider wglSl; MAUI_Slider wgl2Sl; MAUI_Button stretchOn; MAUI_Slider stretchVal; MAUI_Button bStretchOn; MAUI_Button bChopOn; MAUI_Button noteEdgeOn; MAUI_Slider qFreq; MAUI_Slider qRes; MAUI_Button bouncerOn; MAUI_Slider bouncerUpSl; MAUI_Slider bouncerBackSl; MAUI_Button rev1On; MAUI_Button rev2On; MAUI_Button rev3On; MAUI_Button masterRev1On; MAUI_Button masterRev2On; MAUI_Button masterRev3On; MAUI_Slider masterRevMix; MAUI_Slider masterRevGn; MAUI_Slider loadFile; MAUI_Slider saveFile; MAUI_Button onOff; MAUI_Button load; MAUI_Button save; MAUI_Button overwrite; attackTime.value(0); decayTime.value(1); 0 => int flag; float valueArray[208]; 0 => int saves; ///////////////////////////////////////////// fun void LoadFiles () { float floatVal; int intVal; if (load.state() == 1) { save.state(0); //while (flag == 0) { loadFile.range(0,16); loadFile.value() $ int =>int fileToRead; // add "WoodchucKs1" folder to your home directory, or change name /// "WoodchucKs1/testWrite" + fileToRead => string testName; /// testName => string filename; // look at command line if( me.args() > 0 ) me.arg(0) => filename; // instantiate FileIO fio; // open a file fio.open( filename, FileIO.READ ); // ensure it's ok if( !fio.good() ) { cherr <= "can't open file: " <= filename <= " for reading..." <= IO.newline(); me.exit(); } // variable to read into string val; 0 => int i; 0=> int num; while( fio => val ) { Std.atof (val) => floatVal; floatVal => valueArray[num]; cherr <= val <= IO.newline(); num++; } load.state(0) ; } // while flag ////////////////////////////////////////////////// /// BEWARE !! needed fix //// // if you try to load a file that doesnt exist, // program will hang, youl need to restart for ( 0 => int i; i< 16; i++) { (i * 13) => int loc; valueArray[loc] $ int => int locInt; stepArray[i].step_button.state(locInt); stepArray[i].param1_slider.value(valueArray[loc+1]) ; stepArray[i].param2_slider.value(valueArray[loc+2]) ; stepArray[i].param3_slider.value(valueArray[loc+3]) ; stepArray[i].param4_slider.value(valueArray[loc+4]) ; stepArray[i].param5_slider.value(valueArray[loc+5]) ; stepArray[i].chrsMix.value(valueArray[loc+6]); stepArray[i].chrsModDepth.value(valueArray[loc+7]); stepArray[i].chrsModFreq.value(valueArray[loc+8]); stepArray[i].ptchShftMix.value(valueArray[loc+9]); stepArray[i].ptchShftShift.value(valueArray[loc+10]); stepArray[i].reverbMix.value(valueArray[loc+11]); stepArray[i].aux.value(valueArray[loc+12]); // } } } // end if } // end func ///////////////// new write code ////////////////////// fun void SaveFiles () { if (overwrite.state() == 1) { saveFile.range (0,saves); } else if (overwrite.state() == 0) { saveFile.range (saves,16); } // save will auto increment the slider during a session // to prevent overwrite // slider will reswet to 0 at start of new session if (save.state() == 1) { load.state(0) ; FileIO fout; // open for write if (overwrite.state() == 0) { saveFile.range (saves,16); } else if (overwrite.state() == 1) { saveFile.range (0,saves); } saveFile.value() $ int => int fileToSave; // name of file goes here // will save to home directory /WoodchucKs1 folder "WoodchucKs1/testWrite" + fileToSave => string test2; fout.open( test2 , FileIO.WRITE ); // test if( !fout.good() ) { cherr <= "can't open file for writing..." <= IO.newline(); me.exit(); } // // write some stuff for ( 0 => int i; i < 16; i++) { fout <= stepArray[i].step_button.state() <= IO.newline(); fout <= stepArray[i].param1_slider.value() <= IO.newline(); fout <= stepArray[i].param2_slider.value() <= IO.newline(); fout <= stepArray[i].param3_slider.value() <= IO.newline(); fout <= stepArray[i].param4_slider.value() <= IO.newline();// step index fout <= stepArray[i].param5_slider.value() <= IO.newline() ; fout <= stepArray[i].chrsMix.value() <= IO.newline(); fout <= stepArray[i].chrsModDepth.value() <= IO.newline(); fout <= stepArray[i].chrsModFreq.value() <= IO.newline(); fout <= stepArray[i].ptchShftMix.value() <= IO.newline(); fout <= stepArray[i].ptchShftShift.value() <= IO.newline(); fout <= stepArray[i].reverbMix.value() <= IO.newline(); fout <= stepArray[i].aux.value() <= IO.newline(); } fout.close(); save.state(0); if (overwrite.state() == 0) { saves++; saveFile.range (saves,16); loadFile.range(0,saves-1); } else if (overwrite.state() == 1) { saveFile.range (0,saves); loadFile.range(0,saves-1); } } // end state == 0 } // end func ///////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////// fun void Stepper (float length ) { // float floatVal; // int intVal; e.op(1); // rev1.op(-1); //rev2.op(-1); // 1 => moog.noteOn; // 0 => flag; if (overwrite.state() == 1) { saveFile.range (0,saves); } else if (overwrite.state() == 0) { saveFile.range (saves,16); } //////////////////// test read code //////////////////////// if (load.state() == 1) { LoadFiles(); } ////////////////////////////////////////// for ( 0 => int index; index < 16; index++) { // 1=> moog.noteOn; stepLength.value() => float totLength; noteLength.value() => float localLength; (totLength * localLength) => float note; (totLength-note) => float locNoteOff; if (stepArray[index].step_button.state() == 0 ) { note::ms => now; locNoteOff::ms => now; } else { // stepArray[index].param1_slider.value() => moog.freq; // floatVal => moog.freq; stepArray[index].param1_slider.value() => moog.freq ; // => moog.freq; // <<< floatVal >>>; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; //////////////////////////////////////////// ///write if ( save.state() == 1 ) { SaveFiles(); } ///////////// stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; 2.5 => e.gain; { note => float locLength; (locLength / 2 ) => float halfLength; attackTime.range(0.0,halfLength); decayTime.range(0.0,locLength); (attackTime.value() )::ms => dur attack; attack => e.attackTime; (decayTime.value() * 2.0)::ms => dur decay; decay => e.releaseTime; } ////////// if (noteEdgeOn.state() == 0) { e.keyOn(); 1 => moog.noteOn; (note / 2)::ms=>now; e.keyOff(); (note / 2)::ms=>now; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } else { e.keyOn(); (note / 2)::ms=>now; e.keyOff(); (note / 2)::ms=>now; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } //1 => moog.noteOn; }//end else state == 1 } // end for ///////////// // 1 => moog.noteOn; } // end Stepper /////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////// fun void Connector (float length, int count) { e.op(1); // rev1.op(-1); // rev2.op(-1); // 1 => moog.noteOn; if (load.state() == 1) { LoadFiles(); } ////////////////////////////////////////// for ( 0 => int index; index < 16; index++) { float addTime; float baseTime; length => addTime; length => baseTime; 1 => int i; if (stepArray[index].step_button.state() == 1 ) { (16 - index ) => int steps; for ( 1 => int i; i < steps; i++ ) { if (stepArray[index + i].step_button.state() == 0 ) { addTime + baseTime => baseTime; } else { break; } } 2.5 => e.gain; baseTime => float totLength; noteLength.value() => float localLength; (totLength * localLength) => float note; (totLength-note) => float locNoteOff; { note => float locLength; (locLength / 2 ) => float halfLength; attackTime.range(0.0,halfLength); decayTime.range(0.0,locLength); (attackTime.value() )::ms => dur attack; attack => e.attackTime; (decayTime.value() * 8.0 )::ms => dur decay; decay => e.releaseTime; } { //revs1.range(0.0,1.0); // revs2.range(0.0, 1.0); // ( revs1.value() ) => rev1.mix; // ( revs2.value() ) => rev2.mix; } stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; ///write if ( save.state() == 1 ) { SaveFiles(); } if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } // stepArray[index].reverbMix.value() => r.mix; stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; //1 => moog.noteOn ; note / 2 => float halfbaseTime; if (noteEdgeOn.state() == 0) { e.keyOn(); 1 => moog.noteOn; (halfbaseTime)::ms=>now; e.keyOff(); (halfbaseTime)::ms=>now; //1 => moog.noteOff; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } else { e.keyOn(); ; (halfbaseTime)::ms=>now; e.keyOff(); (halfbaseTime)::ms=>now; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } } // end if else { if (index == 0) { (16 - index ) => int steps; for ( 1 => int i; i < steps; i++ ) { if (stepArray[index + i].step_button.state() == 0 ) { addTime + baseTime => baseTime; } else { break; } } baseTime::ms => now; } else { 0::ms=>now; } } } // end for } // end fun Connector ////////////////////////////////////////////////////////////////////////////////// //////////////// ///////////////////////////////////////////////////////////////////////////////// //////////////// fun void Bender (float length, int count) { e.op(1); // rev1.op(-1); //rev2.op(-1); //1 => moog.noteOn; //////////////////// test read code //////////////////////// if (load.state() == 1) { LoadFiles(); } for ( 0 => int index; index < 16; index++) { float addTime; float baseTime; length => addTime; length => baseTime; bendTimeSl.range (0.0, 1.0); endBendSl.range (0.0,1.0); wglSl.range (0.0,1.0); wglSl.precision(3); wgl2Sl.range (1,16); wgl2Sl.displayFormat(MAUI_Slider.integerFormat); int endStep; float startFreq; float endFreq; float startLFOSpeed; float startLFODepth; float endLFOSpeed; float endLFODepth; float startSwRt; float endSwRt; float startChrsFq; float endChrsFq; float startPtShft; float endPtShft; float startRev; float endRev; float startRes; float endRes; float wgl; float wgl2; float startGn; float endGn; 1 => int i; if (stepArray[index].step_button.state() == 1 ) { (16 - index ) => int steps; for ( 1 => int i; i < steps; i++ ) { if (stepArray[index + i].step_button.state() == 0 ) { addTime + baseTime => baseTime; } else { index + i => endStep; break; } } baseTime => float totLength; noteLength.value() => float localLength; (totLength * localLength) => baseTime; (totLength-baseTime) => float locNoteOff; bendTimeSl.value() => float bendPoint; ( bendPoint * baseTime ) => float bendTime; (baseTime - bendTime) => baseTime; endBendSl.value() => float endBend; ( endBend * baseTime) => float endBendTime; (baseTime - endBendTime) => baseTime; stepArray[index].param1_slider.value() => startFreq; stepArray[endStep].param1_slider.value() => endFreq; stepArray[index].param3_slider.value() => startLFOSpeed; stepArray[endStep].param3_slider.value() => endLFOSpeed; stepArray[index].param4_slider.value() => startLFODepth; stepArray[endStep].param4_slider.value() => endLFODepth; stepArray[index].param2_slider.value() => startSwRt; stepArray[endStep].param2_slider.value() => endSwRt; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsModFreq.value() => startChrsFq; stepArray[endStep].chrsModFreq.value() => endChrsFq; stepArray[index].ptchShftShift.value() => startPtShft; stepArray[endStep].ptchShftShift.value() => endPtShft; stepArray[index].reverbMix.value() => startRev; stepArray[endStep].reverbMix.value() => endRev; stepArray[index].param5_slider.value() => startRes; stepArray[endStep].param5_slider.value() => endRes; stepArray[index].aux.value() => startGn; stepArray[endStep].aux.value() => endGn; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); //channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].aux.value() => g.gain; // 1 => moog.noteOn ; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; bendTremRt.value() => float fltTremRt; fltTremRt $ int => int intTremRt; bendTremOffRt.value() => float fltTremOffRt; fltTremOffRt $ int => int intTremOffRt; 32 => int intBendGran; (endFreq - startFreq) => float diffFreq; (diffFreq / intBendGran) => float freqSlice; (endLFOSpeed - startLFOSpeed) => float diffLFOSp; (diffLFOSp / intBendGran ) => float lfoSpSlice; (endLFODepth - startLFODepth) => float diffLFODpt; (diffLFODpt / intBendGran) => float lfoDptSlice; (endSwRt - startSwRt) => float diffSwRt; (diffSwRt / intBendGran ) => float swRtSlice; (endChrsFq - startChrsFq) => float diffChrsFq; (diffChrsFq / intBendGran) => float chrsFqSlice; (endPtShft - startPtShft) => float diffPSShift; (diffPSShift / intBendGran) => float PSShiftSlice; (endRev - startRev ) => float diffRev; (diffRev / intBendGran ) => float revSlice; (endGn - startGn) => float diffGn; (diffGn / intBendGran) => float gnSlice; (endRes - startRes) => float diffRes; (diffRes / intBendGran) => float resSlice; (baseTime / intBendGran) => float sliceTime; bendTime / intBendGran => float locBendTime; 1 => int locFlip; 2.5 => e.gain; if (noteEdgeOn.state() == 0) { attackTime.range(0.0,1.0); attackTime.value() => float attackTimeRtio; 1 => moog.noteOn; (bendTime * attackTimeRtio )::ms => e.attackTime; e.keyOn(); decayTime.range(0.0,1.0); decayTime.value() => float decayTimeRtio; (endBendTime - (endBendTime * attackTimeRtio) ) => float decayRange; (( (decayRange) * decayTimeRtio)*12)::ms => e.releaseTime; } else { attackTime.range(0.0,1.0); attackTime.value() => float attackTimeRtio; //1 => moog.noteOn; (bendTime * attackTimeRtio )::ms => e.attackTime; e.keyOn(); decayTime.range(0.0,1.0); decayTime.value() => float decayTimeRtio; (endBendTime - (endBendTime * attackTimeRtio) ) => float decayRange; ((decayRange * decayTimeRtio)*12)::ms => e.releaseTime; } for ( 0 => int i; i float tremOffDpth; if ( i % intTremOffRt == 0) { locFlip* -1 => locFlip; if ( locFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremOffDpth) => float locTrem; locGain - locTrem => moog.gain; } if (locFlip > 0) { // stepArray[index].aux.value() g.gain 1 => moog.gain; } } locBendTime::ms => now; } 1 => int flip; 1 => int tremFlip; for ( 0 => int i; i wgl; (wgl2Sl.value() ) => wgl2; wgl2 $ int => int wglPeriod; bendGranu.value() => float tremFloat; if ( (i % wglPeriod) == 0) { (flip * -1 ) => flip; } if ( (i % intTremRt) == 0) { (tremFlip * -1 ) => tremFlip; } if (bendLFO.state() == 1) { (startLFODepth + (i * lfoDptSlice)) => moog.lfoDepth; } if (bendChorus.state() == 1) { ( startChrsFq + ( i * chrsFqSlice ) ) + wgl => c.modFreq; } if (bendPitchBend.state() == 1) { ( startPtShft + ( i * PSShiftSlice ) ) => ps.shift; } if (bendReverb.state() == 1) { if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; ( startRev + ( i * revSlice) ) => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; ( startRev + ( i * revSlice) ) => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); //channelRevGn.value() => r3.gain; ( startRev + ( i * revSlice) ) => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); }//( startRev + ( i * revSlice) ) => r.mix; } if (bendRes.state() == 1) { ( startRes + ( i * resSlice) ) => res.freq; } if (bendGain.state() == 1) { ( startGn + ( i * gnSlice) ) => g.gain; } if (bendSwpRt.state() == 1) { ( startLFOSpeed + ( i * lfoSpSlice) ) => moog.lfoSpeed; } if (bendFreq.state() == 1) { (startFreq + (i * freqSlice)) + ( flip * wgl ) => moog.freq; } if ( tremFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremFloat) => float locTrem; locGain - locTrem => moog.gain; } if (tremFlip > 0) { //stepArray[index].aux.value() => 1 => moog.gain; } sliceTime::ms => now; } endBendTime / intBendGran => float locEndBendTime; 1 => int locEndFlip; for ( 0 => int i; i float tremOffDpth; if ( i % intTremOffRt == 0) { locFlip * -1 => locFlip; if ( locEndFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremOffDpth) => float locTrem; locGain - locTrem => moog.gain; } if (locEndFlip > 0) { // stepArray[index].aux.value() 1 =>moog.gain; } } e.keyOff(); locEndBendTime::ms => now; } stepArray[endStep].param1_slider.value() => moog.freq; // e.keyOff(); 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; ///write if ( save.state() == 1 ) { SaveFiles(); } } // end if else { 0::ms=>now; } } // end for } // end fun Bender /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// fun void Stretcher (float length, int count) { e.op(-1); // rev1.op(-1); // rev2.op(-1); // 1 => moog.noteOn; stretchVal.range (0.01, 1.0); stretchVal.precision (2); float stretchTime; float chopTime; //////////////////// test read code //////////////////////// if (load.state() == 1) { LoadFiles(); } for ( 0 => int index; index < 16; index++) { float addTime; float baseTime; length => addTime; length => baseTime; bendTimeSl.range (0.0, 1.0); endBendSl.range (0.0,1.0); wglSl.range (0.0,1.0); wglSl.precision(3); wgl2Sl.range (1,16); wgl2Sl.displayFormat(MAUI_Slider.integerFormat); int endStep; float startFreq; float endFreq; float startLFOSpeed; float startLFODepth; float endLFOSpeed; float endLFODepth; float startSwRt; float endSwRt; float startChrsFq; float endChrsFq; float startPtShft; float endPtShft; float startRev; float endRev; float startRes; float endRes; float wgl; float wgl2; 1 => int i; 0 => int numChopNote; if (stepArray[index].step_button.state() == 1 ) { (16 - index ) => int steps; for ( 1 => int i; i < steps; i++ ) { if (stepArray[index + i].step_button.state() == 0 ) { addTime + baseTime => baseTime; 1 + numChopNote => numChopNote; } else { index + i => endStep; break; } } stretchVal.value() => float stretchVal; ( baseTime * stretchVal)=> stretchTime; stretchTime => float totLength; noteLength.value() => float localLength; (totLength * localLength) => float locbaseTime; (totLength-locbaseTime) => float locNoteOff; baseTime - stretchTime => float totalChops; stretchTime - locNoteOff => float tempStretchTime; stretchTime - locNoteOff => stretchTime; bendTimeSl.value() => float bendPoint; ( bendPoint * stretchTime ) => float bendTime; (stretchTime - bendTime) => stretchTime; endBendSl.value() => float endBend; ( endBend * stretchTime) => float endBendTime; (stretchTime - endBendTime) => stretchTime; if ( numChopNote > 0) { (totalChops / numChopNote) => chopTime; } else { 0 => chopTime; } if (bStretchOn.state() == 1) { stepArray[index].param1_slider.value() => startFreq; stepArray[endStep].param1_slider.value() => endFreq; stepArray[index].param3_slider.value() => startLFOSpeed; stepArray[endStep].param3_slider.value() => endLFOSpeed; stepArray[index].param4_slider.value() => startLFODepth; stepArray[endStep].param4_slider.value() => endLFODepth; stepArray[index].param2_slider.value() => startSwRt; stepArray[endStep].param2_slider.value() => endSwRt; stepArray[index].chrsModFreq.value() => startChrsFq; stepArray[endStep].chrsModFreq.value() => endChrsFq; stepArray[index].ptchShftShift.value() => startPtShft; stepArray[endStep].ptchShftShift.value() => endPtShft; stepArray[index].reverbMix.value() => startRev; stepArray[endStep].reverbMix.value() => endRev; stepArray[index].param5_slider.value() => startRes; stepArray[endStep].param5_slider.value() => endRes; stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); // channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); // channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); //channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; // 1 => moog.noteOn ; (endFreq - startFreq) => float diffFreq; (diffFreq / 32.0 ) => float freqSlice; (endLFOSpeed - startLFOSpeed) => float diffLFOSp; (diffLFOSp / 32.0 ) => float lfoSpSlice; (endLFODepth - startLFODepth) => float diffLFODpt; (diffLFODpt / 32.0 ) => float lfoDptSlice; (endSwRt - startSwRt) => float diffSwRt; (diffSwRt / 32.0 ) => float swRtSlice; (endChrsFq - startChrsFq) => float diffChrsFq; (diffChrsFq / 32.0 ) => float chrsFqSlice; (endPtShft - startPtShft) => float diffPSShift; (diffPSShift / 32.0 ) => float PSShiftSlice; (endRev - startRev ) => float diffRev; (diffRev / 32.0 ) => float revSlice; (endRes - startRes) => float diffRes; (diffRes / 32.0 ) => float resSlice; (stretchTime / 32.0 ) => float stretchSlice; if (noteEdgeOn.state() == 0) { 1 => moog.noteOn; } bendTime::ms => now; 1 => int flip; for ( 0 => int i; i<32; i++) { (wglSl.value() * 200 ) => wgl; (wgl2Sl.value() ) => wgl2; wgl2 $ int => int wglPeriod; if ( (i % wglPeriod) == 0) { (flip * -1 ) => flip; } if (bendLFO.state() == 1) { (startLFOSpeed + (i * lfoSpSlice)) => moog.lfoSpeed; } if (bendChorus.state() == 1) { ( startChrsFq + ( i * chrsFqSlice ) ) + wgl => c.modFreq; } if (bendPitchBend.state() == 1) { ( startPtShft + ( i * PSShiftSlice ) ) => ps.shift; } if (bendReverb.state() == 1) { if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); // channelRevGn.value() => r1.gain; ( startRev + ( i * revSlice) ) => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; ( startRev + ( i * revSlice) ) => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; ( startRev + ( i * revSlice) ) => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); }//( startRev + ( i * revSlice) ) => r.mix; } if (bendRes.state() == 1) { ( startRes + ( i * resSlice) ) => res.freq; } if (bendFreq.state() == 1) { (startFreq + (i * freqSlice)) + ( flip * wgl ) => moog.freq; } stretchSlice::ms=>now; } // end for stepArray[endStep].param1_slider.value() => moog.freq; endBendTime::ms => now; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } // end if bStretch == 1 else { stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); // channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; // 1 => moog.noteOn ; if (noteEdgeOn.state() == 0) { 1 => moog.noteOn; } tempStretchTime::ms=>now; // 0=>moog.noteOn; 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; } } // end if button==1 else { 0 => int tempStep; endStep => tempStep; index+1 => tempStep; if (tempStep == 16) { 0 => tempStep; } chopTime => float localchopTime; if (bChopOn.state() == 1) { bendTimeSl.value() => float bendPoint; ( bendPoint * localchopTime ) => float bendTime; (localchopTime - bendTime) => localchopTime; endBendSl.value() => float endBend; ( endBend * localchopTime) => float endBendTime; (localchopTime - endBendTime) => localchopTime; stepArray[index].param1_slider.value() => startFreq; stepArray[tempStep].param1_slider.value() => endFreq; stepArray[index].param3_slider.value() => startLFOSpeed; stepArray[tempStep].param3_slider.value() => endLFOSpeed; stepArray[index].param4_slider.value() => startLFODepth; stepArray[tempStep].param4_slider.value() => endLFODepth; stepArray[index].param2_slider.value() => startSwRt; stepArray[tempStep].param2_slider.value() => endSwRt; stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsModFreq.value() => startChrsFq; stepArray[tempStep].chrsModFreq.value() => endChrsFq; stepArray[index].ptchShftShift.value() => startPtShft; stepArray[tempStep].ptchShftShift.value() => endPtShft; stepArray[index].reverbMix.value() => startRev; stepArray[tempStep].reverbMix.value() => endRev; stepArray[index].param5_slider.value() => startRes; stepArray[tempStep].param5_slider.value() => endRes; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; // 1 => moog.noteOn ; (endFreq - startFreq) => float diffFreq; (diffFreq / 32.0 ) => float freqSlice; (endLFOSpeed - startLFOSpeed) => float diffLFOSp; (diffLFOSp / 32.0 ) => float lfoSpSlice; (endLFODepth - startLFODepth) => float diffLFODpt; (diffLFODpt / 32.0 ) => float lfoDptSlice; (endSwRt - startSwRt) => float diffSwRt; (diffSwRt / 32.0 ) => float swRtSlice; (endChrsFq - startChrsFq) => float diffChrsFq; (diffChrsFq / 32.0 ) => float chrsFqSlice; (endPtShft - startPtShft) => float diffPSShift; (diffPSShift / 32.0 ) => float PSShiftSlice; (endRev - startRev ) => float diffRev; (diffRev / 32.0 ) => float revSlice; (endRes - startRes) => float diffRes; (diffRes / 32.0 ) => float resSlice; (localchopTime / 32.0 ) => float chopSlice; bendTime::ms => now; 1 => int flip; for ( 0 => int i; i<32; i++) { (wglSl.value() * 200 ) => wgl; (wgl2Sl.value() ) => wgl2; wgl2 $ int => int wglPeriod; if ( (i % wglPeriod) == 0) { (flip * -1 ) => flip; } if (bendLFO.state() == 1) { (startLFOSpeed + (i * lfoSpSlice)) => moog.lfoSpeed; } if (bendChorus.state() == 1) { ( startChrsFq + ( i * chrsFqSlice ) ) + wgl => c.modFreq; } if (bendPitchBend.state() == 1) { ( startPtShft + ( i * PSShiftSlice ) ) => ps.shift; } if (bendReverb.state() == 1) { if (bendReverb.state() == 1) { if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); // channelRevGn.value() => r1.gain; ( startRev + ( i * revSlice) ) => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); // channelRevGn.value() => r2.gain; ( startRev + ( i * revSlice) ) => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; ( startRev + ( i * revSlice) ) => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); }//( startRev + ( i * revSlice) ) => r.mix; } } if (bendRes.state() == 1) { ( startRes + ( i * resSlice) ) => res.freq; } if (bendFreq.state() == 1) { (startFreq + (i * freqSlice)) + ( flip * wgl ) => moog.freq; } chopSlice::ms=>now; } // end for //stepArray[endStep].param1_slider.value() => moog.freq; endBendTime::ms => now; } // end if bChop == on else { stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); // channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].aux.value() => g.gain; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; // 1 => moog.noteOn ; localchopTime::ms=>now; } } // end else button==0 ///write if ( save.state() == 1 ) { SaveFiles(); } }//end for } // end Stretcher ///////////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// //////////////// ///////////////////////////////////////////////////////////////////////////////// //////////////// fun void Bouncer (float length, int count) { e.op(1); // rev1.op(-1); // rev2.op(-1); //1 => moog.noteOn; //////////////////// test read code //////////////////////// if (load.state() == 1) { LoadFiles(); } for ( 0 => int index; index < 16; index++) { float addTime; float baseTime; length => addTime; length => baseTime; bendTimeSl.range (0.0, 1.0); endBendSl.range (0.0,1.0); wglSl.range (0.0,1.0); wglSl.precision(3); wgl2Sl.range (1,16); wgl2Sl.displayFormat(MAUI_Slider.integerFormat); int endStep; float startFreq; float endFreq; float startLFOSpeed; float startLFODepth; float endLFOSpeed; float endLFODepth; float startSwRt; float endSwRt; float startChrsFq; float endChrsFq; float startPtShft; float endPtShft; float startRev; float endRev; float startRes; float endRes; float wgl; float wgl2; float startGn; float endGn; 1 => int i; if (stepArray[index].step_button.state() == 1 ) { (16 - index ) => int steps; for ( 1 => int i; i < steps; i++ ) { if (stepArray[index + i].step_button.state() == 0 ) { addTime + baseTime => baseTime; } else { index + i => endStep; break; } } baseTime => float totLength; noteLength.value() => float localLength; (totLength * localLength) => baseTime; (totLength-baseTime) => float locNoteOff; bendTimeSl.value() => float bounceUpStart; ( bounceUpStart * baseTime ) => float bounceStart; (baseTime - bounceStart) => baseTime; endBendSl.value() => float bounceBackStart; ( bounceBackStart * baseTime) => float backStart; (baseTime - backStart) => baseTime; bouncerUpSl.value() => float bounceUpLength; ( bounceUpLength * baseTime ) => float bounceUpTime; bounceUpTime => float tempUpTime; (baseTime - bounceUpTime ) => baseTime; bouncerBackSl.value() => float holdLength; ( holdLength * baseTime ) => float holdLengthTime; (baseTime - holdLengthTime) => baseTime ; // bounceBackTime => float tempBackTime; (baseTime ) => float tempBackTime; // bouncerBackSl.value() => float bounceBackLength; // ( bounceBackLength * baseTime ) => float bounceBackTime; // bounceBackTime => float tempBackTime; stepArray[index].param1_slider.value() => startFreq; stepArray[endStep].param1_slider.value() => endFreq; stepArray[index].param3_slider.value() => startLFOSpeed; stepArray[endStep].param3_slider.value() => endLFOSpeed; stepArray[index].param4_slider.value() => startLFODepth; stepArray[endStep].param4_slider.value() => endLFODepth; stepArray[index].param2_slider.value() => startSwRt; stepArray[endStep].param2_slider.value() => endSwRt; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param1_slider.value() => moog.freq; stepArray[index].param2_slider.value() => moog.filterSweepRate; stepArray[index].param3_slider.value() => moog.lfoSpeed; stepArray[index].param4_slider.value() => moog.lfoDepth; stepArray[index].param5_slider.value() => res.freq; stepArray[index].chrsModFreq.value() => startChrsFq; stepArray[endStep].chrsModFreq.value() => endChrsFq; stepArray[index].ptchShftShift.value() => startPtShft; stepArray[endStep].ptchShftShift.value() => endPtShft; stepArray[index].reverbMix.value() => startRev; stepArray[endStep].reverbMix.value() => endRev; stepArray[index].param5_slider.value() => startRes; stepArray[endStep].param5_slider.value() => endRes; stepArray[index].aux.value() => startGn; stepArray[endStep].aux.value() => endGn; stepArray[index].chrsMix.value() => c.mix; stepArray[index].chrsModDepth.value() => c.modDepth; stepArray[index].chrsModFreq.value() => c.modFreq; stepArray[index].ptchShftMix.value() => ps.mix; stepArray[index].ptchShftShift.value() => ps.shift; if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); // channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); // channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } stepArray[index].aux.value() => g.gain; // 1 => moog.noteOn ; qFreq.value()=>moog.filterQ; qRes.value()=>res.Q; bendTremRt.value() => float fltTremRt; fltTremRt $ int => int intTremRt; bendTremOffRt.value() => float fltTremOffRt; fltTremOffRt $ int => int intTremOffRt; 32 => int intBendGran; (endFreq - startFreq) => float diffFreq; (diffFreq / intBendGran) => float freqSlice; (endLFOSpeed - startLFOSpeed) => float diffLFOSp; (diffLFOSp / intBendGran ) => float lfoSpSlice; (endLFODepth - startLFODepth) => float diffLFODpt; (diffLFODpt / intBendGran) => float lfoDptSlice; (endSwRt - startSwRt) => float diffSwRt; (diffSwRt / intBendGran ) => float swRtSlice; (endChrsFq - startChrsFq) => float diffChrsFq; (diffChrsFq / intBendGran) => float chrsFqSlice; (endPtShft - startPtShft) => float diffPSShift; (diffPSShift / intBendGran) => float PSShiftSlice; (endRev - startRev ) => float diffRev; (diffRev / intBendGran ) => float revSlice; (endGn - startGn) => float diffGn; (diffGn / intBendGran) => float gnSlice; (endRes - startRes) => float diffRes; (diffRes / intBendGran) => float resSlice; (tempUpTime / intBendGran) => float sliceUpTime; (tempBackTime / intBendGran) => float sliceBackTime; bounceStart / intBendGran => float locBendTime; 1 => int locFlip; 2.5 => e.gain; if (noteEdgeOn.state() == 0) { attackTime.range(0.0,1.0); attackTime.value() => float attackTimeRtio; 1 => moog.noteOn; (bounceStart * attackTimeRtio )::ms => e.attackTime; e.keyOn(); decayTime.range(0.0,1.0); decayTime.value() => float decayTimeRtio; (backStart - (backStart * attackTimeRtio) ) => float decayRange; (( (decayRange) * decayTimeRtio)*12)::ms => e.releaseTime; } else { attackTime.range(0.0,1.0); attackTime.value() => float attackTimeRtio; //1 => moog.noteOn; (bounceStart * attackTimeRtio )::ms => e.attackTime; e.keyOn(); decayTime.range(0.0,1.0); decayTime.value() => float decayTimeRtio; (backStart - (backStart * attackTimeRtio) ) => float decayRange; ((decayRange * decayTimeRtio)*12)::ms => e.releaseTime; } for ( 0 => int i; i float tremOffDpth; if ( i % intTremOffRt == 0) { locFlip* -1 => locFlip; if ( locFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremOffDpth) => float locTrem; locGain - locTrem => moog.gain; } if (locFlip > 0) { // stepArray[index].aux.value() g.gain 1 => moog.gain; } } locBendTime::ms => now; } 1 => int flip; 1 => int tremFlip; for ( 0 => int i; i wgl; (wgl2Sl.value() ) => wgl2; wgl2 $ int => int wglPeriod; bendGranu.value() => float tremFloat; if ( (i % wglPeriod) == 0) { (flip * -1 ) => flip; } if ( (i % intTremRt) == 0) { (tremFlip * -1 ) => tremFlip; } if (bendLFO.state() == 1) { (startLFODepth + (i * lfoDptSlice)) => moog.lfoDepth; } if (bendChorus.state() == 1) { ( startChrsFq + ( i * chrsFqSlice ) ) + wgl => c.modFreq; } if (bendPitchBend.state() == 1) { ( startPtShft + ( i * PSShiftSlice ) ) => ps.shift; } if (bendReverb.state() == 1) { if (bendReverb.state() == 1) { if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); // channelRevGn.value() => r1.gain; ( startRev + ( i * revSlice) ) => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; ( startRev + ( i * revSlice) ) => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); //channelRevGn.value() => r3.gain; ( startRev + ( i * revSlice) ) => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); }//( startRev + ( i * revSlice) ) => r.mix; } } if (bendRes.state() == 1) { ( startRes + ( i * resSlice) ) => res.freq; } if (bendGain.state() == 1) { ( startGn + ( i * gnSlice) ) => g.gain; } if (bendSwpRt.state() == 1) { ( startLFOSpeed + ( i * lfoSpSlice) ) => moog.lfoSpeed; } if (bendFreq.state() == 1) { (startFreq + (i * freqSlice)) + ( flip * wgl ) => moog.freq; } if ( tremFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremFloat) => float locTrem; locGain - locTrem => moog.gain; } if (tremFlip > 0) { //stepArray[index].aux.value() => 1 => moog.gain; } sliceUpTime::ms => now; } holdLengthTime::ms => now; 1 => flip; 1 => tremFlip; for ( 0 => int i; i wgl; (wgl2Sl.value() ) => wgl2; wgl2 $ int => int wglPeriod; bendGranu.value() => float tremFloat; if ( (i % wglPeriod) == 0) { (flip * -1 ) => flip; } if ( (i % intTremRt) == 0) { (tremFlip * -1 ) => tremFlip; } if (bendLFO.state() == 1) { (endLFODepth + (i * (-1 * lfoDptSlice) )) => moog.lfoDepth; } if (bendChorus.state() == 1) { ( endChrsFq + ( i * (-1 * chrsFqSlice )) ) + wgl => c.modFreq; } if (bendPitchBend.state() == 1) { ( endPtShft + ( i * (-1 * PSShiftSlice )) ) => ps.shift; } if (bendReverb.state() == 1) { if (rev1On.state() == 1) { rev2On.state(0); rev3On.state(0); r1.op(1); r2.op(-1); r3.op(-1); //channelRevGn.value() => r1.gain; stepArray[index].reverbMix.value() => r1.mix; } else if (rev2On.state() == 1) { rev1On.state(0); rev3On.state(0); r2.op(2); r1.op(-1); r3.op(-1); //channelRevGn.value() => r2.gain; stepArray[index].reverbMix.value() => r2.mix; } else if (rev3On.state() == 1) { rev1On.state(0); rev2On.state(0); r3.op(3); r2.op(-1); r1.op(-1); // channelRevGn.value() => r3.gain; stepArray[index].reverbMix.value() => r3.mix; } else { r1.op(-1); r2.op(-1); r3.op(-1); } } if (bendRes.state() == 1) { ( endRes + ( i * (-1 * resSlice)) ) => res.freq; } if (bendGain.state() == 1) { ( endGn + ( i * (-1 * gnSlice)) ) => g.gain; } if (bendSwpRt.state() == 1) { ( endLFOSpeed + ( i * (-1 * lfoSpSlice)) ) => moog.lfoSpeed; } if (bendFreq.state() == 1) { (endFreq + (i * (-1 * freqSlice)) ) + ( flip * wgl ) => moog.freq; } if ( tremFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremFloat) => float locTrem; locGain - locTrem => moog.gain; } if (tremFlip > 0) { //stepArray[index].aux.value() => 1 => moog.gain; } sliceBackTime::ms => now; } backStart / intBendGran => float locEndBendTime; 1 => int locEndFlip; for ( 0 => int i; i float tremOffDpth; if ( i % intTremOffRt == 0) { locFlip * -1 => locFlip; if ( locEndFlip <= 0) { stepArray[index].aux.value() => float locGain; (locGain * tremOffDpth) => float locTrem; locGain - locTrem => moog.gain; } if (locEndFlip > 0) { // stepArray[index].aux.value() 1 =>moog.gain; } } e.keyOff(); locEndBendTime::ms => now; } stepArray[endStep].param1_slider.value() => moog.freq; // e.keyOff(); 0 => moog.gain; locNoteOff::ms => now; 1 => moog.gain; ///write if ( save.state() == 1 ) { SaveFiles(); } } // end if else { 0::ms=>now; } } // end for } // end fun Bouncer /////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////// MAUI_View control_view; control_view.size( 1278, 750); control_view.name( "WoodchucKer"); 0 => float note; 0 => int pos; MAUI_Button connectorOn; MAUI_Button benderOn; MAUI_Button stepperOn; for ( 0 => int index; index < 16; index++) { stepArray[index].step_button.toggleType(); stepArray[index].step_button.size( 100, 100 ); stepArray[index].step_button.position( pos, 0); control_view.addElement( stepArray[index].step_button); stepArray[index].param1_slider.range(60, 1600); stepArray[index].param2_slider.range (0.0,1.0); stepArray[index].param3_slider.range(30, 800); stepArray[index].param4_slider.range(0.0, 1.0); stepArray[index].param5_slider.range (200, 1200); stepArray[index].chrsMix.range (0.0,1.0); stepArray[index].chrsModDepth.range(0.0, 1.0); stepArray[index].chrsModFreq.range(50,1600); stepArray[index].ptchShftMix.range(0.0,1.0); stepArray[index].ptchShftShift.range(0.0,1.0); stepArray[index].reverbMix.range(0.0,1.0); stepArray[index].aux.range(0.0,1.0); stepArray[index].param1_slider.name("frq"); stepArray[index].param2_slider.name("spRt"); stepArray[index].param3_slider.name("lfoSp"); stepArray[index].param4_slider.name("lfoDp"); stepArray[index].param5_slider.name("res"); stepArray[index].chrsMix.name("Cmx"); stepArray[index].chrsModDepth.name("Cmod"); stepArray[index].chrsModFreq.name("Cfrq"); stepArray[index].ptchShftMix.name("PSmx"); stepArray[index].ptchShftShift.name("PSsft"); stepArray[index].reverbMix.name("RVmx"); stepArray[index].aux.name("Gn"); if ( (index % 4) == 0) { stepArray[index].param1_slider.value(700 + (index * 30) ); stepArray[index].param2_slider.value(0.5); stepArray[index].param3_slider.value(60); stepArray[index].param4_slider.value(.5); stepArray[index].param5_slider.value(300); stepArray[index].chrsMix.value(0); stepArray[index].chrsModDepth.value(.5); stepArray[index].chrsModFreq.value(50); stepArray[index].ptchShftMix.value(0); stepArray[index].ptchShftShift.value(.5); stepArray[index].reverbMix.value(.1); stepArray[index].aux.value(1); stepArray[index].step_button.state(1); } else { stepArray[index].param1_slider.value(200 + (index * 25)); stepArray[index].param2_slider.value(0); stepArray[index].param3_slider.value(30); stepArray[index].param4_slider.value(0); stepArray[index].param5_slider.value(200); stepArray[index].chrsMix.value(0); stepArray[index].chrsModDepth.value(0); stepArray[index].chrsModFreq.value(50); stepArray[index].ptchShftMix.value(0); stepArray[index].ptchShftShift.value(0); stepArray[index].reverbMix.value(0); stepArray[index].aux.value(1); } stepLength.name("stepLength"); noteLength.name("ntLgth"); bendGranu.name("bTremDpt"); bendTremRt.name("bTremRt"); bendTremOffDpth.name("-bTremDpt"); bendTremOffRt.name("-bTremRt"); masterGain.name("mstrGn"); connectorOn.name("Connectr"); benderOn.name("Bender"); stepperOn.name("Stepper"); stepperEnvOn.name("env"); stepperRevsOn.name("revs"); bendLFO.name("bLFd"); bendChorus.name("bChrs"); bendPitchBend.name("bPS"); bendReverb.name("bRev"); bendRes.name("bRes"); bendFreq.name("bFreq"); bendTimeSl.name ("bStrt"); endBendSl.name ("bEnd"); wglSl.name("wglPeak"); wgl2Sl.name("wglRate"); stretchOn.name("Stretcher"); stretchVal.name("val"); bStretchOn.name ("bStr"); bChopOn.name ("bChop"); attackTime.name("attack"); decayTime.name("release"); bendGain.name("bGn"); bendSwpRt.name("bLFs"); bouncerOn.name("Bouncer"); bouncerUpSl.name("bounce"); bouncerBackSl.name("hold"); rev1On.name("chRv1"); rev2On.name("chRv2"); rev3On.name("chRv3"); masterRev1On.name("msRv1"); masterRev2On.name("msRv2"); masterRev3On.name("msRv3"); masterRevGn.name("msRvGn"); masterRevMix.name("msRvMix"); onOff.name("start/stop"); save.name("save"); load.name("load"); loadFile.name("load"); saveFile.name("save"); overwrite.name("ovrwrt"); stepArray[index].param1_slider.size( 100, stepArray[index].param1_slider.height() ); stepArray[index].param1_slider.position( pos, 75 + stepArray[index].step_button.y() ); stepArray[index].param2_slider.size( 100, stepArray[index].param2_slider.height() ); stepArray[index].param2_slider.position( pos, 40 + stepArray[index].param1_slider.y() ); stepArray[index].param2_slider.precision(2); stepArray[index].param3_slider.size( 100, stepArray[index].param3_slider.height() ); stepArray[index].param3_slider.position( pos, 40 + stepArray[index].param2_slider.y() ); stepArray[index].param3_slider.precision(3); stepArray[index].param4_slider.size( 100, stepArray[index].param4_slider.height() ); stepArray[index].param4_slider.position( pos, 40 + stepArray[index].param3_slider.y() ); stepArray[index].param4_slider.precision(2); stepArray[index].param5_slider.size( 100, stepArray[index].param5_slider.height() ); stepArray[index].param5_slider.position( pos, 40 + stepArray[index].param4_slider.y() ); stepArray[index].chrsMix.size( 100, stepArray[index].chrsMix.height() ); stepArray[index].chrsMix.position( pos, 40 + stepArray[index].param5_slider.y() ); stepArray[index].chrsMix.precision(1); stepArray[index].chrsModDepth.size( 100, stepArray[index].chrsModDepth.height() ); stepArray[index].chrsModDepth.position( pos, 40 + stepArray[index].chrsMix.y() ); stepArray[index].chrsModDepth.precision(1); stepArray[index].chrsModFreq.size( 100, stepArray[index].chrsModFreq.height() ); stepArray[index].chrsModFreq.position( pos, 40 + stepArray[index].chrsModDepth.y() ); stepArray[index].chrsModFreq.precision(4); stepArray[index].ptchShftMix.size( 100, stepArray[index].ptchShftMix.height() ); stepArray[index].ptchShftMix.position( pos, 40 + stepArray[index].chrsModFreq.y() ); stepArray[index].ptchShftMix.precision(1); stepArray[index].ptchShftShift.size( 100, stepArray[index].ptchShftMix.height() ); stepArray[index].ptchShftShift.position( pos, 40 + stepArray[index].ptchShftMix.y() ); stepArray[index].ptchShftShift.precision(1); stepArray[index].reverbMix.size( 100, stepArray[index].reverbMix.height() ); stepArray[index].reverbMix.position( pos, 40 + stepArray[index].ptchShftShift.y() ); stepArray[index].reverbMix.precision(1); stepArray[index].aux.size( 100, stepArray[index].aux.height() ); stepArray[index].aux.position( pos, 40 + stepArray[index].reverbMix.y() ); stepArray[index].aux.precision(1); control_view.addElement( stepArray[index].aux); control_view.addElement( stepArray[index].reverbMix); control_view.addElement( stepArray[index].ptchShftShift); control_view.addElement( stepArray[index].ptchShftMix ); control_view.addElement( stepArray[index].chrsModFreq ); control_view.addElement( stepArray[index].chrsModDepth ); control_view.addElement( stepArray[index].chrsMix ); control_view.addElement( stepArray[index].param5_slider ); control_view.addElement( stepArray[index].param4_slider ); control_view.addElement( stepArray[index].param3_slider ); control_view.addElement( stepArray[index].param2_slider ); control_view.addElement( stepArray[index].param1_slider ); pos +79 => pos; } //end for 0 => int xpos; 570 => int ypos; stepLength.size( 222, stepLength.height() ); stepLength.position( xpos, ypos - 6); stepLength.range(30,800); stepLength.precision(4); noteLength.size( 130, stepLength.height() ); noteLength.position( xpos, ypos + 32); noteLength.range(0.0,1.0); noteLength.precision(3); masterGain.size( 130, stepLength.height() ); masterGain.position( xpos + 93, ypos + 32); masterGain.range(0.0,1.0); masterGain.precision(3); bendGranu.size( 130, stepLength.height() ); bendGranu.position( xpos, ypos + 68); bendGranu.range(0.0, 1.0); bendGranu.precision(3); bendTremRt.size( 130, stepLength.height() ); bendTremRt.position( xpos + 93, ypos + 68); bendTremRt.range(1,16); bendTremRt.precision(3); bendTremRt.displayFormat(MAUI_Slider.integerFormat); bendTremOffDpth.size( 130, stepLength.height() ); bendTremOffDpth.position( xpos, ypos + 110); bendTremOffDpth.range(0.0, 1.0); bendTremOffDpth.precision(3); bendTremOffRt.size( 130, stepLength.height() ); bendTremOffRt.position( xpos + 93, ypos + 110); bendTremOffRt.range(1,16); bendTremOffRt.precision(3); bendTremOffRt.displayFormat(MAUI_Slider.integerFormat); stepLength.value(30); noteLength.value(1.0); masterGain.value(1.0); bendGranu.value(0); bendTremRt.value(1); bendTremOffDpth.value(0); bendTremOffRt.value(16); control_view.addElement( bendTremOffRt ); control_view.addElement( bendTremOffDpth ); control_view.addElement( bendTremRt ); control_view.addElement( bendGranu ); control_view.addElement( masterGain ); control_view.addElement( noteLength ); control_view.addElement( stepLength ); stepperOn.toggleType(); stepperOn.size( 100, 100 ); stepperOn.position( (stepLength.x() + 200), (ypos ) ); control_view.addElement( stepperOn ); connectorOn.toggleType(); connectorOn.size( 100, 100 ); connectorOn.position( (stepLength.x() + 200), (ypos + 70 ) ); control_view.addElement( connectorOn ); attackTime.size( 120, attackTime.height() ); attackTime.position( stepperOn.x() + 70, ypos ); attackTime.precision(3); attackTime.value(0); decayTime.size( 120, decayTime.height() ); decayTime.position( stepperOn.x() +70, ypos+ 40); decayTime.precision(3); decayTime.value(1); qFreq.size (120,qFreq.height() ); qFreq.position (stepperOn.x() + 70, ypos+ 80); qFreq.range (0.0,.8); qFreq.name ("freqQ"); qFreq.precision(3); qRes.size (120,qRes.height() ); qRes.position (stepperOn.x() + 70, ypos+ 120); qRes.range (0.05,.8); qRes.name ("resQ"); qRes.precision(3); control_view.addElement (qRes); control_view.addElement (qFreq); control_view.addElement( decayTime ); control_view.addElement( attackTime ); benderOn.toggleType(); benderOn.size( 115, 100 ); benderOn.position( (attackTime.x() + 95), (ypos ) ); control_view.addElement( benderOn ); bendLFO.toggleType(); bendLFO.size ( 80, 65 ); bendLFO.position ( ( benderOn.x() + 85), (ypos) ); bendChorus.toggleType(); bendChorus.size ( 80, 65 ); bendChorus.position ( ( bendLFO.x() + 50 ), (ypos) ); bendRes.toggleType(); bendRes.size ( 80, 65 ); bendRes.position ( (bendChorus.x() + 50 ), (ypos) ); bendSwpRt.toggleType(); bendSwpRt.size ( 80, 65 ); bendSwpRt.position ( (bendRes.x() + 50 ), (ypos) ); control_view.addElement (bendSwpRt); control_view.addElement (bendRes); control_view.addElement ( bendChorus ); control_view.addElement ( bendLFO ); bendPitchBend.toggleType(); bendPitchBend.size ( 80, 65 ); bendPitchBend.position ( (benderOn.x() + 85 ), (ypos + 35 ) ); bendReverb.toggleType(); bendReverb.size ( 80, 65 ); bendReverb.position ( (bendPitchBend.x() + 50 ), (ypos + 35 ) ); bendFreq.toggleType(); bendFreq.size(80, 65); bendFreq.position ( (bendReverb.x() + 50 ), (ypos + 35) ); bendGain.toggleType(); bendGain.size ( 80, 65 ); bendGain.position ( (bendFreq.x() + 50 ), (ypos + 35 ) ); bendTimeSl.size(150, bendTimeSl.height() ); bendTimeSl.position ( benderOn.x(), ypos + 65); endBendSl.size(150, endBendSl.height() ); endBendSl.position ( bendTimeSl.x(), ypos + 105); wglSl.size(145, endBendSl.height() ); wglSl.position ( bendTimeSl.x() + 130, ypos + 65); wgl2Sl.size(145, endBendSl.height() ); wgl2Sl.position ( wglSl.x(), ypos + 105); stretchOn.toggleType(); stretchOn.size(125,100); stretchOn.position (bendGain.x() + 55, ypos); bStretchOn.toggleType(); bStretchOn.size(77,75); bStretchOn.position (stretchOn.x(), ypos + 67); bChopOn.toggleType(); bChopOn.size(77,75); bChopOn.position (bStretchOn.x() + 48, ypos + 67); stretchVal.size (125, stretchVal.height() ); stretchVal.position (stretchOn.x(), stretchOn.y() + 105); bouncerOn.toggleType(); bouncerOn.size(120,100); bouncerOn.position (stretchOn.x() + 100, stretchOn.y() ); bouncerUpSl.size(120,bouncerUpSl.height() ); bouncerUpSl.position (bouncerOn.x() , bouncerOn.y() + 65); bouncerUpSl.range(0.0,1.0); bouncerUpSl.precision(2); bouncerBackSl.size(120,bouncerBackSl.height() ); bouncerBackSl.position(bouncerOn.x(), bouncerUpSl.y() + 40 ); bouncerBackSl.range(0.0,1.0); bouncerBackSl.precision(2); rev1On.toggleType(); rev1On.size(80, 60); rev1On.position(bouncerOn.x() + 100, bouncerOn.y() ); rev2On.toggleType(); rev2On.size(80, 60); rev2On.position(bouncerOn.x() + 150, bouncerOn.y() ); rev3On.toggleType(); rev3On.size(80, 60); rev3On.position(bouncerOn.x() + 200, bouncerOn.y() ); masterRev1On.toggleType(); masterRev1On.size(80, 60); masterRev1On.position(bouncerOn.x() + 100, bouncerOn.y() + 50 ); masterRev2On.toggleType(); masterRev2On.size(80, 60); masterRev2On.position(bouncerOn.x() + 150, bouncerOn.y() + 50 ); masterRev3On.toggleType(); masterRev3On.size(80, 60); masterRev3On.position(bouncerOn.x() + 200, bouncerOn.y() + 50 ); masterRevMix.size(120, masterRevGn.height() ); masterRevMix.position(rev1On.x(), rev1On.y() + 80); masterRevMix.range (0.0,1.0); masterRevMix.precision(2); masterRevGn.size(120, masterRevGn.height() ); masterRevGn.position(rev1On.x(), rev1On.y() + 120); masterRevGn.range (0.0,1.0); masterRevGn.precision(2); noteEdgeOn.toggleType(); noteEdgeOn.size (80,70); noteEdgeOn.position ( rev3On.x() , masterRevMix.y() + 30 ); noteEdgeOn.name("edgeOff"); onOff.toggleType(); onOff.size(110,90); onOff.position(rev3On.x() + 60, ypos); load.toggleType(); load.size(110,90); load.position(rev3On.x() + 140, ypos); save.toggleType(); save.size(110,90); save.position(rev3On.x() + 220, ypos); saveFile.size(180, masterRevGn.height() ); saveFile.position(onOff.x(), save.y() + 60); saveFile.range (0,16); saveFile.displayFormat(MAUI_Slider.integerFormat); loadFile.size(180, masterRevGn.height() ); loadFile.position(onOff.x(), save.y() + 100); loadFile.range (0,16); loadFile.displayFormat(MAUI_Slider.integerFormat); overwrite.toggleType(); overwrite.position(saveFile.x() + 162, saveFile.y() + 10); overwrite.size (90,70); //saveFile.precision(2); control_view.addElement (overwrite); control_view.addElement (loadFile); control_view.addElement (saveFile); control_view.addElement (save); control_view.addElement (load); control_view.addElement (onOff); control_view.addElement (noteEdgeOn); control_view.addElement (masterRevGn); control_view.addElement (masterRevMix); control_view.addElement (masterRev3On); control_view.addElement (masterRev2On); control_view.addElement (masterRev1On); control_view.addElement (rev3On); control_view.addElement (rev2On); control_view.addElement (rev1On); control_view.addElement (bouncerBackSl); control_view.addElement (bouncerUpSl); control_view.addElement (bouncerOn); control_view.addElement (stretchVal); control_view.addElement (bChopOn); control_view.addElement (bStretchOn); control_view.addElement (stretchOn); control_view.addElement (wgl2Sl); control_view.addElement (wglSl); control_view.addElement (endBendSl); control_view.addElement (bendTimeSl); control_view.addElement (bendGain); control_view.addElement (bendFreq); control_view.addElement (bendReverb); control_view.addElement ( bendPitchBend ); control_view.display(); stepperOn.state(0); connectorOn.state(0); benderOn.state(0); rev1On.state(0); rev2On.state(0); rev3On.state(0); r1.op(-1); r2.op(-1);r3.op(-1); // sinFreq.value()=>moog.filterQ; // sinSFreq.value()=>res.Q; ////////////////////////////////////////////////////////////////////////////////// ////////////////////////////////////////////////////////////////////////////////// while( true ) { stepLength.value() => note; masterGain.value() => gain.gain; // .8 => res.Q; .6 => res.gain; //2.0 => g.gain; // .9 => moog.gain; .7 => c.gain; .7 => ps.gain; // .6 => r.gain; .7 => r1.gain; .7 => r2.gain; .7 => r3.gain; // 1 => moog.noteOn; if (masterRev1On.state() == 1) { masterRV1.op(1); masterRV2.op(-1); masterRV3.op(-1); masterRevMix.value() => masterRV1.mix; masterRevGn.value() => masterRV1.gain; } else if (masterRev2On.state() == 1) { masterRV2.op(1); masterRV1.op(-1); masterRV3.op(-1); masterRevMix.value() => masterRV2.mix; masterRevGn.value() => masterRV2.gain; } else if (masterRev3On.state() == 1) { masterRV3.op(1); masterRV2.op(-1); masterRV1.op(-1); masterRevMix.value() => masterRV3.mix; masterRevGn.value() => masterRV3.gain; } else { masterRV1.op(-1); masterRV2.op(-1); masterRV3.op(-1); } 0 => int index; if (onOff.state() == 1) { if ( connectorOn.state() == 1 ) { Connector (note, index); } else if ( benderOn.state() == 1 ) { Bender (note, index); } else if ( stepperOn.state() == 1 ) { Stepper (note); } else if ( stretchOn.state() == 1 ) { Stretcher (note, index); } else if ( bouncerOn.state() == 1 ) { Bouncer (note, index); } else { 1::ms=> now; } } else { 1::ms=>now; } }//end while true control_view.destroy();