annotate 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
rev   line source
samer@46 1 package ishara.audio;
samer@0 2 import javax.sound.sampled.*;
samer@0 3
samer@0 4
samer@0 5 public class TestLine {
samer@0 6 // Args: <dur> <freq in Hz> <bufsize> <framesize>
samer@0 7 public static double TwoPi=2*Math.PI;
samer@0 8
samer@0 9 public static class SineSrc {
samer@0 10 double ph,freq;
samer@0 11
samer@0 12 public SineSrc(double f) { freq=f; ph=0; }
samer@0 13 public void next(double [] buf, int l) {
samer@0 14 for (int i=0; i<l; i++) {
samer@0 15 buf[i]=Math.sin(ph);
samer@0 16 ph+=freq;
samer@0 17 }
samer@0 18 ph -= TwoPi*Math.floor(ph/TwoPi);
samer@0 19 }
samer@0 20 };
samer@0 21
samer@0 22 public static void main(String[] args) {
samer@0 23 int bufsize, N, numframes;
samer@0 24 double [] buffer;
samer@0 25 double rate, dur, freq;
samer@0 26
samer@0 27 if (args.length<4) {
samer@0 28 System.out.println("TestLine <dur> <freq in Hz> <bufsize> <framesize>");
samer@0 29 return;
samer@0 30 }
samer@0 31
samer@0 32 try {
samer@0 33 dur=Double.parseDouble(args[0]);
samer@0 34 freq=Double.parseDouble(args[1]);
samer@0 35 bufsize=Integer.parseInt(args[2]);
samer@0 36 N=Integer.parseInt(args[3]);
samer@0 37 rate=22050;
samer@0 38
samer@0 39 System.out.println("Playing test signal: "+dur+" s, "+freq+"% Hz");
samer@0 40 System.out.println("frame size="+N+" buffer size="+bufsize);
samer@0 41
samer@0 42 buffer = new double[N];
samer@0 43 SineSrc src=new SineSrc(2*Math.PI*freq/rate);
samer@0 44 LineSink sink=new LineSink(new AudioFormat((float)rate,16,1,true,false),bufsize);
samer@0 45 try {
samer@0 46 AudioSink.Writer w=sink.writer(N);
samer@0 47 numframes = (int)(dur*rate/N);
samer@0 48
samer@0 49 sink.start();
samer@0 50 for (int i=0; i<numframes; i++) {
samer@0 51 src.next(buffer,N);
samer@0 52 w.write(buffer,0,N);
samer@0 53 }
samer@0 54 sink.getLine().drain();
samer@0 55 sink.stop();
samer@0 56 } finally {
samer@0 57 sink.dispose();
samer@0 58 }
samer@0 59 } catch(Exception ex) {
samer@0 60 }
samer@0 61 }
samer@0 62 }
samer@0 63