You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

119 lines
3.3 KiB
Java

package main;
import com.softsynth.jsyn.*;
public class WaveForm extends SynthNote {
EnvelopePlayer envPlayer;
SynthEnvelope env;
SynthInput envRate;
SynthInput spectrum;
int noOsc = 5;
//Set random phase
SineOscillator[] oscBank = new SineOscillator[noOsc];
BusWriter[] busWriter = new BusWriter[noOsc];
MultiplyUnit[] multAmp = new MultiplyUnit[noOsc];
MultiplyUnit[] multFreq = new MultiplyUnit[noOsc];
LineOut lineOut;
BusReader busReader;
SynthDistributor freqDist = new SynthDistributor("frequency");
SynthDistributor spectrumDist = new SynthDistributor("spectrum");
double[] envData;
SynthEnvelope glissEnv;
public WaveForm() {
super();
add(envPlayer = new EnvelopePlayer());
add(busReader = new BusReader());
add(busWriter[0] = new BusWriter());
add(oscBank[0] = new SineOscillator());
add(lineOut = new LineOut());
double randomPhase = Math.random();
oscBank[0].phase.set(randomPhase);
oscBank[0].frequency.connect(freqDist);
oscBank[0].output.connect(busWriter[0].input);
busWriter[0].busOutput.connect(busReader.busInput);
for(int i = 1; i < noOsc; i++){
add(busWriter[i] = new BusWriter());
add(oscBank[i] = new SineOscillator());
add(multFreq[i] = new MultiplyUnit());
add(multAmp[i] = new MultiplyUnit());
multFreq[i].inputA.set(i+1.);
multFreq[i].inputB.connect(freqDist);
multFreq[i].output.connect(oscBank[i].frequency);
multAmp[i].inputA.set(1./(i+1.));
multAmp[i].inputB.connect(spectrumDist);
multAmp[i].output.connect(oscBank[i].amplitude);
oscBank[i].output.connect(busWriter[i].input);
busWriter[i].busOutput.connect(busReader.busInput);
envPlayer.output.connect(busReader.amplitude);
oscBank[i].phase.set(randomPhase);
}
addPort(amplitude = envPlayer.amplitude);
addPort(frequency = freqDist);
addPort(envRate = envPlayer.rate);
addPort(output = busReader.output);
addPort(spectrum = spectrumDist);
//double[] envData = { .5, 1.0, .5, 0.0 };
envData = new double[42];
for (int i = 0; i < 21; i++) {
envData[i*2] = 1/20.;
envData[i*2+1] = (Math.cos(2*(1/20.*i)*Math.PI+Math.PI)+1)/2;
//System.out.println(envData[i*2] + " " + envData[i*2+1]);
}
env = new SynthEnvelope(envData);
frequency.set(400);
amplitude.set(1.);
spectrum.set(0);
}
public void grainOn(int t, double f, double a) {
start(t);
frequency.set(t, f);
amplitude.set(t, a);
//spectrum.set(arg0);
envPlayer.envelopePort.clear(t);
envPlayer.envelopePort.queue(env,0,env.getNumFrames(),Synth.FLAG_AUTO_STOP);
//envPlayer.envelopePort.queueLoop(t, env, 1, 1);
}
public void clickOn(int t, double f, double a) {
start(t);
frequency.set(t, f);
amplitude.set(t, a);
//spectrum.set(arg0);
envPlayer.envelopePort.clear(t);
envPlayer.envelopePort.queue(env,0,env.getNumFrames(),Synth.FLAG_AUTO_STOP);
//envPlayer.envelopePort.queueLoop(t, env, 1, 1);
}
public void glissOn(int t, double f, double a , double[] eD) {
glissEnv = new SynthEnvelope(eD);
start(t);
frequency.set(t, f);
amplitude.set(t, a);
envPlayer.envelopePort.clear(t);
envPlayer.envelopePort.queue(t,glissEnv,0,glissEnv.getNumFrames(), Synth.FLAG_AUTO_STOP);
}
public void glissOff(int t, double r) {
envRate.set(t, r);
envPlayer.envelopePort.clear(t);
envPlayer.envelopePort.queue(t, glissEnv, glissEnv.getNumFrames() - 1, 1, Synth.FLAG_AUTO_STOP);
}
}