作为标题 如何在java v1.4中重复播放声音文件?
答案 0 :(得分:0)
如果您只想播放wav文件,那么'org.life.java'的答案是正确的。对于其他格式类型,您可以使用JMF(http://www.oracle.com/technetwork/java/javase/tech/index-jsp-140239.html)。
注意: JMF现在已经过时......但它可以与jdk 1.4一起使用
答案 1 :(得分:0)
import java.net.URL;
import javax.sound.sampled.*;
public class LoopSound {
public static void main(String[] args) throws Exception {
URL url = new URL(
"http://pscode.org/media/leftright.wav");
Clip clip = AudioSystem.getClip();
AudioInputStream ais = AudioSystem.
getAudioInputStream( url );
clip.open(ais);
clip.loop(0);
javax.swing.JOptionPane.
showMessageDialog(null, "Close to exit!");
}
}
答案 2 :(得分:0)
这将在JDK 1.4(在Windows XP和JDK 1.4.2_06中测试)中起作用。
另一个答案失败,因为正如注释中正确指出的那样,AudioSystem.getClip()
在JDK 1.4上不存在。以下是使用DataLine
并在单独的Thread中播放以提高整体性能的完整源代码(以main函数的形式,但可以适用于其他任何功能)。
import java.io.File;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;
public class AudioTest {
public static void main(String[] args) throws Exception {
AudioInputStream ais = AudioSystem.getAudioInputStream(new File("C:/sound1.wav"));
AudioFormat format = ais.getFormat();
DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class, format);
SourceDataLine sourceDataLine = (SourceDataLine) AudioSystem.getLine(dataLineInfo);
class PlayThread extends Thread {
private AudioInputStream ais;
private AudioFormat format;
private SourceDataLine sourceDataLine;
byte tempBuffer[] = new byte[10000];
public PlayThread(AudioInputStream ais, SourceDataLine sourceDataLine, AudioFormat format) {
this.ais = ais;
this.sourceDataLine = sourceDataLine;
this.format = format;
}
public void run() {
try {
sourceDataLine.open(this.format);
sourceDataLine.start();
int cnt;
while ((cnt = this.ais.read(tempBuffer, 0, tempBuffer.length)) != -1) {
if (cnt > 0) {
sourceDataLine.write(tempBuffer, 0, cnt);
}
}
sourceDataLine.drain();
sourceDataLine.close();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
}
new PlayThread(ais, sourceDataLine, format).start();
}
}
这两个问题和答案都确实很老,但是我只需要在一台只能运行Windows XP的无风扇微型PC上进行这项工作,... \ _(ツ)_ /