import jass.render.*;
import jass.engine.*;
import jass.generators.*;
/**
Delay line with low-pass; a simple Karplus-Strong like string
sound (though the lowpass is at the wrong place it sounds good to me)
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
// Rnd is source of pulses, goes to Mixer, with a feedback on itself, then to audio-out
public class Delay {
public static void main (String args[]) throws SinkIsFullException {
float srate = 44100.f;
int bufferSize = 128*4;
int bufferSizeJavaSound = 6*1024;
/*
[Rnd]o->[Mixer]o->[speaker]
^---<---|
*/
Source rout = new Rnd(bufferSize);
final Mixer mixer = new Mixer(bufferSize,2);
final SourcePlayer player = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate);
LowPass lp = new LowPass();
FilterContainer lowpass = new FilterContainer(srate,bufferSize,lp);
player.addSource(mixer);
mixer.addSource(rout);
mixer.addSource(lowpass);
lowpass.addSource(mixer);
mixer.setGain(0,1f);
mixer.setGain(1,0f); // feedback
// Add control panel
boolean isModal = false;
int nsliders = 1;
Controller a_controlPanel = new Controller(new java.awt.Frame ("Delay"),
isModal,nsliders,1) {
public void onButton (int k) {
switch(k) {
case 0:
player.resetAGC();
break;
}
}
public void onSlider(int k) {
switch(k) {
case 0:
mixer.setGain(1,(float)super.val[0]);
break;
}
}
};
String[] names = {"Feedback "};
double[] val = {0 };
double[] min = {0 };
double[] max = {1 };
a_controlPanel.setSliders(val,min,max,names);
a_controlPanel.setButtonNames (new String[] {"Reset"});
a_controlPanel.setVisible(true);
player.start();
}
}