Setting gain control to maximum value (returned by gain control's getMaximum method) causes distortion of played sound. Regression from 1.4.2 In the test below distartion starts (0.5 sec. from begining) veronica.wav is attached. import java.io.*; import javax.sound.sampled.*; public class PlayClip { public static void main(String[] args) throws Exception { String fileName = args.length > 0 ? args[0] : "veronika.wav"; System.out.println("Opening file <" + fileName + ">..."); InputStream streamFile = new FileInputStream(fileName); AudioInputStream streamAudio = AudioSystem.getAudioInputStream(streamFile); System.out.println("Creating clip..."); //Clip clip = AudioSystem.getClip(); Clip clip = (Clip)AudioSystem.getLine(new Line.Info(Clip.class)); clip.open(streamAudio); System.out.println("Clip class: " + clip.getClass().toString()); System.out.println("Clip format: " + clip.getFormat()); System.out.println("Clip length: " + clip.getMicrosecondLength()); System.out.println("Playing..."); clip.start(); Thread.sleep(500); if (clip.isControlSupported(FloatControl.Type.MASTER_GAIN)) { FloatControl gainCtrl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN); System.out.println("gain current value: " + gainCtrl.getValue()); float maxValue = gainCtrl.getMaximum(); System.out.println("Updating gain to maximum value" + "(" + maxValue + " " + gainCtrl.getUnits() + ", " + dBToLinear(maxValue) + " linear)..."); gainCtrl.setValue(maxValue); } else { System.out.println("!!! gain doesn't supported!"); } while (clip.isRunning()) Thread.sleep(100); clip.close(); System.out.println("Done."); } }
|