import jass.render.*;
import jass.engine.*;
import jass.generators.*;
import java.net.*;
/**
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
public class GrainsApplet extends AppletController {
GranularConstantLoopBuffer grainBuffer;
SourcePlayer player;
boolean isOn = false;
String wavfile;
int nGrains = 10;
float fadeTime = .03f; // will smooth transitions here
float linearBias = 0;
public void setNSliders() {
nsliders = 1;
}
public void setNButtons() {
nbuttons = 1;
}
public void init() {
super.init();
wavfile = getParameter("wavfile");
nGrains = Integer.parseInt(getParameter("ngrains"));
fadeTime = new Float(getParameter("fadetime")).floatValue();
linearBias = new Float(getParameter("linearbias")).floatValue();
}
public void start() {
float srate = 44100.f;
int bufferSize = 128;
int bufferSizeJavaSound = 8*1024;
URL codebase = getCodeBase();
URL wavurl = null;
try {
wavurl = new URL(codebase,wavfile);
} catch(MalformedURLException e) {
System.out.println(e+" Malformed URL: " +codebase+" "+ wavfile);
}
grainBuffer = new GranularConstantLoopBuffer(srate,bufferSize, wavurl);
grainBuffer.setFadeTime(fadeTime);
grainBuffer.initRandom(nGrains,linearBias);
player = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate);
try {
player.addSource(grainBuffer);
} catch(SinkIsFullException e) {
}
String[] names = {"Linearity "};
double[] val = {linearBias };
double[] min = {0 };
double[] max = {1 };
setValues(val,min,max,names);
jButton[0].setText ("Stop");
player.start();
isOn = true;
}
protected void jButtonMousePressed (int k, java.awt.event.MouseEvent evt) {
switch(k) {
case 0:
if(isOn) {
jButton[0].setText ("Start");
isOn = false;
grainBuffer.setVolume(0);
} else {
jButton[0].setText ("Stop");
isOn = true;
grainBuffer.setVolume(1f);
//player.resetAGC();
}
break;
}
}
protected void onSlider(int k) {
switch(k) {
case 0:
grainBuffer.setLinearBias((float)this.val[0]);
grainBuffer.setTransitionMatrix();
break;
}
}
}