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
|