/* * Created on Apr 25, 2004 * Modified for JSyn2 Nov 10, 2012 (12/11/10) * */ package jmslexamples.jsyn2.unitvoices; import com.jsyn.ports.UnitInputPort; import com.jsyn.ports.UnitOutputPort; import com.jsyn.unitgen.*; import com.softsynth.shared.time.TimeStamp; /** * For Speedy example, JSyn2 API. Modified in 2012 from the original 2004. * * @author Nick Didkovsky, email: nick@didkovsky.com, (c) 2012 Nick * Didkovsky, all rights reserved. * */ public class SpeedyUnitVoice extends Circuit implements UnitVoice, UnitSource { private SineOscillator myOsc; private EnvelopeDAHDSR envelope; public UnitInputPort frequency; public UnitInputPort amplitude; public UnitInputPort attack; public UnitInputPort decay; public UnitInputPort delay; public UnitInputPort hold; public UnitInputPort release; public UnitInputPort sustain; public SpeedyUnitVoice() { // add units to Circuit add(myOsc = new SineOscillator()); add(envelope = new EnvelopeDAHDSR()); // connect them envelope.output.connect(myOsc.amplitude); /* Make ports on internal units appear as ports on circuit. */ addPort(amplitude = myOsc.amplitude); addPort(frequency = myOsc.frequency); addPort(attack = envelope.attack); addPort(decay = envelope.decay); addPort(delay = envelope.delay); addPort(hold = envelope.hold); addPort(release = envelope.release); addPort(sustain = envelope.sustain); // set defaults and ranges frequency.setup(0, 100, 1000.0); amplitude.setup(0.0, 0.50, 1.0); attack.setup(0.0, 0.01, 1.0); decay.setup(0.0, 0.30, 1.0); delay.setup(0.0, 0.0, 1.0); hold.setup(0.0, 0.0, 1.0); release.setup(0.0, 0.40, 1.0); sustain.setup(0.0, 0.80, 1.0); // envelope envelope.setupAutoDisable(this); } // noteOn() and noteOff() make it a UnitVoice public void noteOn(double frequency, double amplitude, TimeStamp ts) { this.frequency.set(frequency, ts); this.amplitude.set(amplitude, ts); envelope.input.on(ts); } public void noteOff(TimeStamp ts) { envelope.input.off(ts); } // getOutput() makes it a UnitSource. public UnitOutputPort getOutput() { return myOsc.output; } public static void main(String[] args) { UnitSourceTester.test(new SpeedyUnitVoice()); } }