import jass.render.*;
import jass.engine.*;
import jass.generators.*;
import java.net.*;
/**
Combustion engine model
@author Kees van den Doel (kvdoel@cs.ubc.ca)
*/
public class EngineApplet extends AppletController {
ErraticLoopBuffer cylinders;
SourcePlayer player;
ModalObjectWithOneContact engineResonances;
boolean isOn = true;
float factor=1;
String syfile = "../data/stick.sy";
String wavfile = "../data/car2.wav";
public void setNSliders() {
nsliders = 4;
}
public void setNButtons() {
nbuttons = 1;
}
public void init() {
super.init();
syfile = getParameter("syfile");
wavfile = getParameter("wavfile");
}
public void start() {
float srate = 44100.f;
int bufferSize = 128*4;
int bufferSizeJavaSound = 8*1024;
URL codebase = getCodeBase();
URL syurl = null;
URL wavurl = null;
try {
syurl = new URL(codebase,syfile);
wavurl = new URL(codebase,wavfile);
} catch(MalformedURLException e) {
System.out.println(e+" Malformed URL: " +codebase+" "+ syfile);
}
cylinders = new ErraticLoopBuffer(srate,bufferSize,wavurl);
player = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate);
ModalModel mm = null;
// till here ok
try {
mm = new ModalModel(syurl);
} catch(java.io.IOException e) {
System.out.println(this+" "+e);
}
engineResonances = new ModalObjectWithOneContact(mm,srate,bufferSize);
try {
player.addSource(engineResonances);
engineResonances.addSource(cylinders);
} catch(SinkIsFullException e) {
}
float speed0 = 3;
cylinders.setSpeed(speed0);
float beatupness0 = 0.04f;
String[] names = {"Speed ", "Beatupness ", "Damping ", "Size "};
double[] val = {speed0, beatupness0, 1, 1 };
double[] min = {speed0, 0, .5, .4 };
double[] max = {15, .1, 1, 2 };
cylinders.setMisfireProb(beatupness0);
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;
cylinders.setVolume(0);
} else {
jButton[0].setText ("Stop");
isOn = true;
player.resetAGC();
cylinders.setVolume(1);
}
break;
}
}
protected void onSlider(int k) {
switch(k) {
case 0:
cylinders.setSpeed((float)(super.val[0]));
break;
case 1:
cylinders.setMisfireProb((float)super.val[1]);
break;
case 2:
engineResonances.setDamping((float)super.val[2]);
break;
case 3:
engineResonances.setFrequencyScale((float)super.val[3]);
break;
}
}
}