/* * Created on Apr 25, 2004 * Modified for JSyn2 Nov 10, 2012 (12/11/10) * */ package jmslexamples.simple; import com.jsyn.ports.UnitInputPort; import com.jsyn.ports.UnitOutputPort; import com.jsyn.unitgen.*; import com.softsynth.shared.time.TimeStamp; /** * Sine with an envelope. Simple * * @author Nick Didkovsky, email: nick@didkovsky.com, (c) 2012 Nick * Didkovsky, all rights reserved. * */ public class SimpleUnitVoice extends Circuit implements UnitVoice { private SineOscillator myOsc; private EnvelopeDAHDSR envelope; public UnitInputPort frequency; public UnitInputPort amplitude; public SimpleUnitVoice() { /* 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); /* set defaults and ranges */ frequency.setup(0, 100, 1000.0); amplitude.setup(0.0, 0.50, 1.0); /* envelope will shut down this Circuit when it reaches end of envelope, preserve CPU */ 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; } }