-
Bug
-
Resolution: Fixed
-
P3
-
6
-
b80
-
generic
-
generic
Issue | Fix Version | Assignee | Priority | Status | Resolution | Resolved In Build |
---|---|---|---|---|---|---|
JDK-2136551 | 5.0u8 | Alex Menkov | P3 | Resolved | Fixed | b01 |
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.");
}
}
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.");
}
}
- backported by
-
JDK-2136551 REGRESSION: Maximum gain value causes sound distortion
-
- Resolved
-