public class HarmonicSynth { import com.softsynth.jsyn.*; import com.softsynth.jsyn.util.*; LineOut lineOut; HarmonicTable table; TableOscillator osc; Filter_LowPass lpf; double[] harmonics = new double[NUM_HARMONICS]; double h = 0.0; double freqStep = 0.05; final double ORIG_FILTER_FREQ = 2000.0; double filterFreq = ORIG_FILTER_FREQ; final static int WAVE_LENGTH = 512; public HarmonicSynth() { Synth.startEngine(0); lineOut = new LineOut(); table = new HarmonicTable(WAVE_LENGTH+1, NUM_HARMONICS); osc = new TableOscillator(); lpf = new Filter_LowPass(); osc.tablePort.setTable(table); osc.output.connect(lpf.input); lpf.output.connect(0, lineOut.input, 0); lpf.output.connect(0, lineOut.input, 1); lpf.frequency.set(filterFreq); lineOut.start(); lpf.start(); osc.start(); } void adjustFrequency(double _h) { double hDiff = (_h-h)/lpfDivisor; if(hDiff>0) { osc.frequency.set(osc.frequency.get()+freqStep); } else { osc.frequency.set(osc.frequency.get()-freqStep); } h += hDiff; } void setPartials(double[] _harmonics) { for(int i=1; i