import javax.sound.sampled.*; public class StereoOut { protected SourceDataLine sourceDataLine = null; protected byte [] audioData; protected short [] audioSamples; protected short [] audioSamples2; protected boolean stop = false; public static final int DURATION = 1000; public static final double FREQ = 1000.0; // Hz public static final double FREQ2 = 595.0; // Hz public static final double AMP = 32767.0; public StereoOut() { AudioFormat audioFormat = new AudioFormat(44100.0F, 16, 2, true, false); try { DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, audioFormat); sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo); sourceDataLine.open(audioFormat); } catch (Exception e) { e.printStackTrace(); } audioSamples = new short[(44100 * DURATION)/1000]; double inc = (2.0 * java.lang.Math.PI * FREQ)/44100; double j = 0.0; for (int i=0; i < audioSamples.length; i++) { audioSamples[i] = (short)(AMP*java.lang.Math.sin(j)); //System.out.println(audioSamples[i]); j += inc; } audioSamples2 = new short[(44100 * DURATION)/1000]; double inc2 = (2.0 * java.lang.Math.PI * FREQ2)/44100; double j2 = 0.0; for (int i=0; i < audioSamples2.length; i++) { audioSamples2[i] = (short)(AMP*java.lang.Math.sin(j2)); //System.out.println(audioSamples2[i]); j2 += inc2; } audioData = new byte[audioSamples.length * 4]; for (int i = 0; i < audioData.length; i += 4) { audioData[i] = (byte) (audioSamples[i/4] & 0x00FF); audioData[i+1] = (byte) ((audioSamples[i/4] >> 8) /*& 0x00FF*/); audioData[i+2] = (byte) (audioSamples2[i/4] & 0x00FF); audioData[i+3] = (byte) ((audioSamples2[i/4] >> 8) /*& 0x00FF*/); //System.out.println(audioData[i+1] + " + " + audioData[i] + " = " + (double) ((new java.lang.Byte(audioData[i+1]).intValue() * 256) | (0xFF & new java.lang.Byte(audioData[i]).intValue()))); } } public void play() { sourceDataLine.start(); //for (int i = 0; i < 5; i++) { while (!stop) { sourceDataLine.write(audioData, 0, audioData.length); } sourceDataLine.drain(); sourceDataLine.stop(); sourceDataLine.close(); } public void stopIt() { stop = true; } public static void main (String [] args) { StereoOut test = new StereoOut(); test.play(); } }