Mercurial > hg > ishara
view audio/java/TestLine.java @ 61:eff6bddf82e3 tip
Finally implemented perceptual brightness thing.
author | samer |
---|---|
date | Sun, 11 Oct 2015 10:20:42 +0100 |
parents | 63cefb01cbab |
children |
line wrap: on
line source
package ishara.audio; import javax.sound.sampled.*; public class TestLine { // Args: <dur> <freq in Hz> <bufsize> <framesize> public static double TwoPi=2*Math.PI; public static class SineSrc { double ph,freq; public SineSrc(double f) { freq=f; ph=0; } public void next(double [] buf, int l) { for (int i=0; i<l; i++) { buf[i]=Math.sin(ph); ph+=freq; } ph -= TwoPi*Math.floor(ph/TwoPi); } }; public static void main(String[] args) { int bufsize, N, numframes; double [] buffer; double rate, dur, freq; if (args.length<4) { System.out.println("TestLine <dur> <freq in Hz> <bufsize> <framesize>"); return; } try { dur=Double.parseDouble(args[0]); freq=Double.parseDouble(args[1]); bufsize=Integer.parseInt(args[2]); N=Integer.parseInt(args[3]); rate=22050; System.out.println("Playing test signal: "+dur+" s, "+freq+"% Hz"); System.out.println("frame size="+N+" buffer size="+bufsize); buffer = new double[N]; SineSrc src=new SineSrc(2*Math.PI*freq/rate); LineSink sink=new LineSink(new AudioFormat((float)rate,16,1,true,false),bufsize); try { AudioSink.Writer w=sink.writer(N); numframes = (int)(dur*rate/N); sink.start(); for (int i=0; i<numframes; i++) { src.next(buffer,N); w.write(buffer,0,N); } sink.getLine().drain(); sink.stop(); } finally { sink.dispose(); } } catch(Exception ex) { } } }