package jmsltutorial; /************** ** WARNING - this code automatically generated by Syntona. ** The real source is probably a Syntona patch. ** Do NOT edit this file unless you copy it to another directory and change the name. ** Otherwise it is likely to get clobbered the next time you ** export Java source code from Syntona. ** ** Syntona is available from: http://www.softsynth.com/syntona/ */ import com.jsyn.ports.UnitOutputPort; import com.jsyn.unitgen.UnitVoice; import com.jsyn.unitgen.VariableRateMonoReader; import com.jsyn.ports.UnitInputPort; import com.jsyn.unitgen.SineOscillator; import com.softsynth.shared.time.TimeStamp; import com.jsyn.unitgen.PassThrough; import com.jsyn.data.SegmentedEnvelope; import com.jsyn.unitgen.Circuit; public class SlowSineUnitVoice extends Circuit implements UnitVoice { // Declare units and ports. SineOscillator mSineOsc; PassThrough mFrequencyPassThrough; public UnitInputPort frequency; PassThrough mAmplitudePassThrough; public UnitInputPort amplitude; PassThrough mOutputPassThrough; public UnitOutputPort output; SegmentedEnvelope mSegEnv; VariableRateMonoReader mMonoRdr; // Declare inner classes for any child circuits. public SlowSineUnitVoice() { // Create unit generators. add(mSineOsc = new SineOscillator()); add(mFrequencyPassThrough = new PassThrough()); addPort(frequency = mFrequencyPassThrough.input, "frequency"); add(mAmplitudePassThrough = new PassThrough()); addPort(amplitude = mAmplitudePassThrough.input, "amplitude"); add(mOutputPassThrough = new PassThrough()); addPort(output = mOutputPassThrough.output, "output"); // double[] mSegEnvData = { // 1.5827253415506983, 1.0, // 0.4265136472360651, 0.5087719298245614, // 0.8726864483146368, 0.008771929824561403, // }; double[] mSegEnvData = { 0.510567124080419, 1.0, 0.11761954594804591, 0.7708333333333334, 0.10469777833807747, 0.625, 0.39166945020451105, 0.0, }; mSegEnv = new SegmentedEnvelope( mSegEnvData ); mSegEnv.setSustainBegin( 2 ); mSegEnv.setSustainEnd( 2 ); add(mMonoRdr = new VariableRateMonoReader()); // Connect units and ports. mSineOsc.output.connect(mOutputPassThrough.input); mFrequencyPassThrough.output.connect(mSineOsc.frequency); mAmplitudePassThrough.output.connect(mMonoRdr.amplitude); mMonoRdr.output.connect(mSineOsc.amplitude); // Setup frequency.setup(40.0, 659.2551138257398, 8000.0); amplitude.setup(0.0, 0.5, 1.0); mMonoRdr.rate.set(1.0); } public void noteOn(double frequency, double amplitude, TimeStamp timeStamp) { this.frequency.set(frequency, timeStamp); this.amplitude.set(amplitude, timeStamp); mMonoRdr.dataQueue.queueOn( mSegEnv, timeStamp); } public void noteOff(TimeStamp timeStamp) { mMonoRdr.dataQueue.queueOff( mSegEnv, false, timeStamp); } public UnitOutputPort getOutput() { return output; } }