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
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);
|
|
}
|
|
}
|