package rice2604hw; import java.awt.event.*; import java.awt.*; import com.softsynth.jsyn.*; import com.softsynth.jsyn.view11x.*; /* ================================================================ 2604 SawTriLFO J. Rice ---------------------------------------------------------------- SawTriLFO is a circuit which modulates two sawtooth oscillators separately and routes them left and right for a stereo effect. Each signal is sent through a bandpass filter as well which adds adjustable tone color. ---------------------------------------------------------------- Edited 11/05/00 ================================================================ */ public class SawTriLFO extends SynthCircuit { SawtoothOscillator mySaw, mySaw2; SineOscillator oscLFO, oscLFO2; AddUnit triAdder, sawAdder; SubtractUnit invert; StateVariableFilter triSVF, sawSVF; public SynthDistributor frequency, amplitude, cutoff; public SynthInput ampLFO; public SynthInput freqLFO; public SynthInput ampLFO2; public SynthInput freqLFO2; public SynthOutput output0; public SynthOutput output1; //----------------------------------------------------------------- public SawTriLFO() throws SynthException { super(); add(mySaw = new SawtoothOscillator()); add(mySaw2 = new SawtoothOscillator()); add(oscLFO = new SineOscillator()); add(oscLFO2 = new SineOscillator()); add(sawAdder = new AddUnit()); add(triAdder = new AddUnit()); add(sawSVF = new StateVariableFilter()); add(triSVF = new StateVariableFilter()); addPort(ampLFO = oscLFO.amplitude, "LFO Amplitude"); addPort(freqLFO = oscLFO.frequency, "LFO Frequency"); addPort(ampLFO2 = oscLFO2.amplitude, "LFO2 Amplitude"); addPort(freqLFO2 = oscLFO2.frequency, "LFO2 Frequency"); frequency = new SynthDistributor(this, "freqDistr"); amplitude = new SynthDistributor(this, "ampDistr"); cutoff = new SynthDistributor(this, "cutoffDist", Synth.SIGNAL_TYPE_SVF_FREQ); //11/05 ^^^^^^^ //CONNECT--------- frequency.connect(sawAdder.inputA); frequency.connect(triAdder.inputA); oscLFO.output.connect(sawAdder.inputB); oscLFO2.output.connect(triAdder.inputB); oscLFO.phase.set(-0.50); oscLFO2.phase.set(0.50); sawAdder.output.connect(mySaw.frequency); triAdder.output.connect(mySaw2.frequency); amplitude.connect(mySaw.amplitude); amplitude.connect(mySaw2.amplitude); mySaw.output.connect(sawSVF.input); mySaw2.output.connect(triSVF.input); cutoff.connect(sawSVF.frequency); cutoff.connect(triSVF.frequency); //ADD OUTPUTS---------- addPort(output1 = sawSVF.lowPass, "Left Output");//Swapped 11/05 addPort(output0 = triSVF.bandPass, "Right Output"); } //----------------------------------------------------------------------------- public static void main(String args[]) { try { Synth.startEngine(0); SynthObject.enableTracking(true); Frame f = new Frame("test SawTriLFO"); LineOut out = new LineOut(); SawTriLFO st = new SawTriLFO(); st.output0.connect(0, out.input, 0); st.output1.connect(0, out.input, 1); out.start(); st.start(); st.frequency.set(440); st.amplitude.set(0.5); f.setLayout(new GridLayout(0, 1)); f.add(new PortFader(st.frequency, "freq", 100.0, 5.0, 1000.0)); f.add(new PortFader(st.amplitude, "amp", 0.5, 0.0, 1.0000)); f.add(new PortFader(st.freqLFO, "LFO-freq", 1.0, 0.0, 20.0)); f.add(new PortFader(st.ampLFO, "LFO-amp", 1.0, 0.0, 20.0)); f.add(new PortFader(st.freqLFO2, "LFO2-freq", 1.0, 0.0, 20.0)); f.add(new PortFader(st.ampLFO2, "LFO2-amp", 1.0, 0.0, 20.0)); f.add(new PortFader(st.cutoff, "cutoff", 800.0, 5.0, 5000.0)); f.addWindowListener(new WindowAdapter() { public void windowClosing(WindowEvent e) { Synth.stopEngine(); // System.exit(0); }}); f.setSize(320, 200); f.setVisible(true); } catch (SynthException e) { System.out.println("error: " + e); } } }//========================END CIRCUIT============================================