在 Java 中可靠地播放短音

Tho*_*mas 6 java audio

我很想写一些 Java 代码,这些代码基本上只是播放一个简短的 .wav 文件——“短”我的意思是几分之一秒。(我使用的文件位于 /usr/share/sounds/generic.wav,供使用 Ubuntu 的人使用。)

问题是,我似乎无法弄清楚如何可靠地播放该样本,即在我所有的尝试中,我可以让我的程序以 5 次中的 4 次左右播放声音,但永远不会 100%。

这是迄今为止作为独立程序效果最好的方法:

File soundFile = new File("/usr/share/sounds/generic.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(soundFile);
clip.open(inputStream);
clip.start(); 
Run Code Online (Sandbox Code Playgroud)

(请注意,代码甚至没有调用 clip.stop() )但即使有那个,如果我连续运行几次,迟早会有一个没有播放任何声音的运行,但没有也有例外。

我尝试过的变化:

1) 将音频文件加载到字节数组中并将其传递给 clip.open

2) 将 LineListener 附加到剪辑以等待 STOP 事件

加上一些随机试验,但到目前为止,我还没有设法创建每次都有效的代码。

我还知道以下错误:http : //bugs.sun.com/bugdatabase/view_bug.do?bug_id=4434125但我使用的是 Java 1.6 并且报告声称 Java 1.5 或更高版本应该没问题.

有任何想法吗?是PulseAudio吗?

Tho*_*mas 2

我现在怀疑我的测试程序失败的原因是时间问题。要么我尝试在样本完全加载之前播放短声音,要么程序终止得太快。产生这种怀疑的原因是,如果我将上面的代码稍微改变一下,如下所示:

File soundFile = new File("/usr/share/sounds/generic.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(soundFile);
clip.open(inputStream);

while (System.in.read() == '\n') {
    clip.stop();
    clip.setFramePosition(0);
    clip.start();
}
Run Code Online (Sandbox Code Playgroud)

然后每次我点击 时短声音都会正确播放enter