/* * Created on Jun 6, 2004 * */ package jmslexamples.jsyn; import com.softsynth.jmsl.OutputProvider; import com.softsynth.jsyn.*; /** * This SynthNote has three outputs: output, output2, and output3 each with one * part. JSyn does not support a single SynthOutput with multiple parts so we * implement OutputProvider interface and manage it on our own. The three outputs are: * output sends a sine osc, output2 sends a sawtooth osc, output3 sends a square osc. * * The key idea is to implement OutputProvider and assign each SynthOutput to an index * Then you can hand this classname to SynthNoteAllPortsInstrument and its will create * an Instrument with three outputs. See ThreeOutputSynthNoteApplet * * @author Nick Didkovsky, (c) 2004 Nick Didkovsky, All rights reserved, * didkovn@mail.rockefeller.edu * */ public class SquareSineSawSynthNote extends SynthNote implements OutputProvider { public SynthInput rate; public SynthOutput output2; public SynthOutput output3; SineOscillator sine; SawtoothOscillatorBL saw; SquareOscillatorBL square; EnvelopePlayer envPlayer; SynthEnvelope env; public SquareSineSawSynthNote() { add(sine = new SineOscillator()); add(saw = new SawtoothOscillatorBL()); add(square = new SquareOscillatorBL()); add(envPlayer = new EnvelopePlayer()); double[] data = { 0.01, 1.0, 0.1, 0.4, 0.05, 0.0 }; env = new SynthEnvelope(data); frequency = new SynthDistributor(this, "frequency"); frequency.connect(sine.frequency); frequency.connect(saw.frequency); frequency.connect(square.frequency); addPort(amplitude = envPlayer.amplitude); envPlayer.output.connect(saw.amplitude); envPlayer.output.connect(sine.amplitude); envPlayer.output.connect(square.amplitude); addPort(output = sine.output); addPort(output2 = saw.output); addPort(output3 = square.output); addPort(rate = envPlayer.rate); rate.setup(0.0, 1.0, 2.0); frequency.setup(0.0, 440.0, 3000.0); amplitude.setup(0.0, 0.5, 1.0); } public void setStage(int time, int stage) { switch (stage) { case 0: start(time); envPlayer.envelopePort.queue(time, env, 0, 2); break; case 1: envPlayer.envelopePort.queue(time, env, 2, 1, Synth.FLAG_AUTO_STOP); break; default: break; } } /** * OutputProvider interface * *
* public Object getOutput(int n) { * Object outputToReturn = null; * switch (n) { * case 0: * outputToReturn = output; * break; * case 1: * outputToReturn = output2; * break; * case 2: * outputToReturn = output3; * break; * } * return outputToReturn; * } * * ** * */ public Object getOutput(int n) { Object outputToReturn = null; switch (n) { case 0: outputToReturn = output; break; case 1: outputToReturn = output2; break; case 2: outputToReturn = output3; break; } return outputToReturn; } /** OutputProvider interface, return 3 */ public int getNumOutputs() { return 3; } /** OutputProvider interface , return getOutput(0) */ public Object getOutput() { return getOutput(0); } }