import jass.render.*; import jass.engine.*; import jass.generators.*; import java.util.*; import java.awt.*; /** Listen to white noise filtered with a Butterworth filter */ public class DemoFilter extends Thread { static boolean ascii = true; static boolean toFile = false; public static void main (String args[]) throws Exception { float srate = 44100.f; int bufferSize = 64; int bufferSizeJavaSound = 1024*8; int nBuffersRtAudio = 512/bufferSize; boolean nativeSound = false; int nchannels = 1; if(args.length != 2) { System.out.println("Usage: java DemoFilter ../data/white.wav ../data/sine1.sy"); return; } final SourcePlayer player; if(toFile) { player = new SourcePlayer(bufferSize,srate,"tmp.m"); } else { player = new SourcePlayer(bufferSize,bufferSizeJavaSound,srate); } player.setUseNativeSound(nativeSound); player.setNumRtAudioBuffersNative(nBuffersRtAudio); player.setNChannels(nchannels); final Butter2LowFilter filter = new Butter2LowFilter(srate); final FilterContainer filterContainer = new FilterContainer(srate,bufferSize,filter); final RandOut source = new RandOut(bufferSize); final ModalModel mm = new ModalModel(args[1]); final ModalObjectWithOneContact mob = new ModalObjectWithOneContact(mm,srate,bufferSize); filterContainer.addSource(source); mob.addSource(filterContainer); player.addSource(mob); double cutoffFreq = 50; // Add control panel String[] names = {"Cutoff Freq. ", "f1 ", "d1 "}; double[] val = {cutoffFreq, 1, 1}; double[] min = {cutoffFreq, .1, .1}; double[] max = {4000, 10, 1000}; int nbuttons = 1; Controller a_controlPanel = new Controller(new java.awt.Frame ("DemoFilter"), false,val.length,nbuttons) { public void onButton(int k) { switch(k) { case 0: player.resetAGC(); filter.reset(); break; } } public void onSlider(int k) { switch(k) { case 0: filter.setCutoffFrequency((float)this.val[k]); break; case 1: mob.setFrequencyScale((float)this.val[k]); break; case 2: mob.setDamping((float)this.val[k]); break; } } }; a_controlPanel.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { System.out.println("Close handler called"); player.stopPlaying(); try{ sleep(500); } catch(Exception e3) { } System.exit(0); } }); a_controlPanel.setSliders(val,min,max,names); a_controlPanel.setButtonNames (new String[] {"Reset"}); a_controlPanel.setVisible(true); if(toFile) { player.AGCOff(); // render loop long lt = 0; int twait = 64; try { while(true) { lt += twait; double realTime = lt/1000.; if(ascii) { player.advanceTime(realTime,ascii); } else { player.advanceTime(realTime); } sleep(twait); } } catch(Exception e) { System.out.println(e); } } else { player.start(); } } }