import jass.render.*; import jass.engine.*; import jass.generators.*; import java.net.*; /** Mix some looping wav files @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public class MixWavApplet extends AppletController { SourcePlayer player; ConstantLoopBuffer[] loopbuffer; Mixer mixer; int nvoices ; boolean isOn = false; String[] wavfiles; public void setNSliders() { nvoices = Integer.parseInt(getParameter("nvoices")); nsliders = nvoices; } public void setNButtons() { nbuttons = 1; } public void init() { super.init(); String[] nm = new String[nvoices]; wavfiles = new String[nvoices]; for(int i=0;i<nvoices;i++) { nm[i] = "wavfile" + i; wavfiles[i] = getParameter(nm[i]); } } public void start() { float srate = 11025.f; int bufferSize = 128; int bufferSizeJavaSound = 8*1024; loopbuffer = new ConstantLoopBuffer[nvoices]; URL codebase = getCodeBase(); URL[] wavurl = new URL[nvoices]; System.out.println("wavfiles[0]= "+ wavfiles[0]); try { for(int i=0;i<nvoices;i++) { wavurl[i] = new URL(codebase,wavfiles[i]); } } catch(MalformedURLException e) { System.out.println(e+" Malformed URL: " +codebase+" "+ wavfiles); } for(int i=0;i < nvoices;i++) { loopbuffer[i] = new ConstantLoopBuffer(srate,bufferSize,wavurl[i]); } mixer = new Mixer(bufferSize,nvoices); for(int i=0;i < nvoices;i++) { mixer.setGain(i,1); } player = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate); try { player.addSource(mixer); for(int i=0;i < nvoices;i++) { mixer.addSource(loopbuffer[i]); } } catch(SinkIsFullException e) { } String[] names = new String[nvoices]; double[] val = new double[nvoices]; double[] min = new double[nvoices]; double[] max = new double[nvoices]; for(int i=0;i < nvoices;i++) { int k = i+1; names[i] = "Volume" + k +" "; val[i] = 1f; min[i] = 0; max[i] = 1f; } 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; for(int i=0;i < nvoices;i++) { mixer.setGain(i,0); } } else { jButton[0].setText ("Stop"); isOn = true; //player.resetAGC(); for(int i=0;i < nvoices;i++) { mixer.setGain(i,(float)val[i]); } } break; } } protected void onSlider(int k) { mixer.setGain(k,(float)this.val[k]); } }