У меня есть несколько файлов .wav, которые я играю с Java. В этом урезанном примере слышно «drip», а «swish» - нет, даже если они запускаются с использованием одного и того же кода. В «swish» нет ничего необычного: он воспроизводится с рабочего стола Gnome. У меня есть похожее приложение, не совсем урезанное, которое воспроизводит «swish», но не «drop», поэтому опять же, похоже, это не проблема, связанная с характером данных.
Есть идеи, что здесь происходит? Эта ошибка была замечена после того, как код, который, как было известно, работал, был «повторно развернут» в перестроенной системе: переустановил Ubuntu 10.10 и Eclipse Indigo. Эта ошибка возникает как с Sun JDK 6, так и с OpenJDK 6. Редактировать"Перестроенная" система на самом деле также отличается от аппаратного: Intel E6500 (2 ядра, 2,93 ГГц). Я только установил Ubuntu, Eclipse, OpenJDK, Sun JDK. Предыдущая система была AMD 630 (4 ядра, 2,8 ГГц) с Ubuntu, Eclipse, OpenJDK (я думаю).
Редактировать После некоторых экспериментов кажется, что первый загруженный клип будет работать. Конструктор TestSounder загружает их таким образом, чтобы порядок был обратным. Возможно, использование статического метода AudioSystem.getLine
как-то связано с этим, поскольку это, очевидно, здесь не объектно-ориентированная операция.
import java.io.IOException;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.Clip;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.sound.sampled.LineUnavailableException;
public class TestSounder
{
String resourcePathFromBin = "/resources/";
Clip dripClip;
Clip swishClip;
public TestSounder()
{
dripClip = setupClip("drip.wav");
swishClip = setupClip("swish.wav");
}
public void close()
{
dripClip.close();
swishClip.close();
}
private Clip setupClip(String fileName)
{
Clip clip = null;
try
{
AudioInputStream ais =
AudioSystem.getAudioInputStream(this.getClass().getResourceAsStream(resourcePathFromBin +
fileName));
AudioFormat af = ais.getFormat();
DataLine.Info lineInfo = new DataLine.Info(Clip.class, af);
clip = (Clip)AudioSystem.getLine(lineInfo);
clip.open(ais);
}
catch (UnsupportedAudioFileException e)
{
assert false: "bug";
}
catch (IOException e)
{
assert false: "bug";
}
catch (LineUnavailableException e)
{
assert false: "bug";
}
return clip;
}
public void go(UtilityK.Sounds s)
{
Clip clip = null;
if (s == UtilityK.Sounds.drip)
clip = dripClip;
if (s == UtilityK.Sounds.swish)
clip = swishClip;
clip.stop();
clip.setFramePosition(0);
clip.start();
//while (clip.isRunning())
// TestSounder.delay();
}
public static void main(String[] args)
{
TestSounder obj = new TestSounder();
obj.go(UtilityK.Sounds.swish);
TestSounder.delay();
obj.go(UtilityK.Sounds.drip);
TestSounder.delay();
obj.go(UtilityK.Sounds.swish);
TestSounder.delay();
obj.go(UtilityK.Sounds.drip);
TestSounder.delay();
obj.close();
}
private static void delay()
{
Thread.sleep(5000);
}
}
public interface UtilityK
{
enum Sounds { drip, swish };
}