package jass.generators; import jass.engine.*; import jass.render.*; /** Two Biquad bandpass Filter @author Kees van den Doel (kvdoel@cs.ubc.ca) */ public class BandPass implements Filter { float srate; /* Range f1 - f2 , bandwidths bw*/ protected float f1=100,f2=20000,bw=1; private BiQuad hp; private BiQuad lp; private static final double LN2_2 = Math.log(2)/2; public void setF1(float f1) { this.f1=f1; hp.setF0(f1); } public void setF2(float f2) { this.f2=f2; lp.setF0(f2); } public void setBW(float bw) { this.bw=bw; lp.setBW(bw); hp.setBW(bw); } private void init() { hp = new BiQuad(srate, BiQuad.HP); lp = new BiQuad(srate, BiQuad.LP); } public BandPass(float srate) { super(); this.srate = srate; init(); } /** Proces input (may be same as output). @param output user provided buffer for returned result. @param input user provided input buffer. @param nsamples number of samples written to output buffer. @param inputOffset where to start in circular buffer input. */ public void filter(float[] output, float[] input, int nsamples, int inputOffset) { hp.filter(output,input,nsamples,inputOffset); lp.filter(output,output,nsamples,inputOffset); } public static void main(String[] args) { try { new Test(); } catch(Exception e){} } } class Test { public Test() throws Exception { float srate = 44100.f; int bufferSize = 256; int bufferSizeJavaSound = 1024 * 8; final SourcePlayer player; final BandPass bp1 = new BandPass(srate); final BandPass bp2 = new BandPass(srate); final FilterContainerStereo fc = new FilterContainerStereo(srate,bufferSize,bp1,bp2); //final FilterContainer fc = new FilterContainer(srate,bufferSize,bp1); RandOut ro = new RandOut(bufferSize); fc.addSource(ro); player = new SourcePlayer(bufferSize, bufferSizeJavaSound, srate); player.addSource(fc); player.setNChannels(2); player.setPriority(Thread.MAX_PRIORITY); String[] names = {"F1 ", "F2 ", "BW "}; double[] val = {400, 1000, 1}; double[] min = {1, 400, .1}; double[] max = {10000, 16000, 10}; int nbuttons = 1; Controller a_controlPanel = new Controller(new java.awt.Frame("Demo"), false, val.length, nbuttons) { public void onButton(int k) { switch (k) { case 0: player.resetAGC(); break; } } public void onSlider(int k) { switch (k) { case 0: bp1.setF1((float) this.val[k]); bp2.setF1((float) this.val[k]); break; case 1: bp1.setF2((float) this.val[k]); bp2.setF2((float) this.val[k]); break; case 2: bp1.setBW((float) this.val[k]); bp2.setBW((float) this.val[k]); break; } } }; a_controlPanel.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(java.awt.event.WindowEvent e) { player.stopPlaying(); try { Thread.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); player.start(); } }