/* * 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); } }