我有一个非常简单的类,可以使用以下代码播放声音文件:
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;
public class Sound{
private Clip sound;
public Sound(String location){
try{
sound = AudioSystem.getClip();
File file = new File(location);
sound.open(AudioSystem.getAudioInputStream(file));
}
catch(IOException | LineUnavailableException | UnsupportedAudioFileException error){
System.out.println(error);
}
}
public void play(){
sound.start();
}
}
然而,当我创建这个类的实例并在其上调用play函数时,我没有听到任何声音。当声音开始和结束时我听到弹出声而不是实际文件。此外,我也没有任何错误。
我做错了什么?
答案 0 :(得分:1)
使用此功能,请注意这不是我的代码:How to play .wav files with java 我唯一做的就是在这里发布并稍微优化一下。
private final int BUFFER_SIZE = 128000;
private AudioInputStream audioStream;
private SourceDataLine sourceLine;
/**
* @param filename the name of the file that is going to be played
*/
public void playSound(String filename){
try {
audioStream = AudioSystem.getAudioInputStream(new File(filename));
} catch (Exception e){
e.printStackTrace();
}
try {
sourceLine = (SourceDataLine) AudioSystem.getLine(new DataLine.Info(SourceDataLine.class, audioStream.getFormat()));
sourceLine.open(audioStream.getFormat());
} catch (LineUnavailableException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
sourceLine.start();
int nBytesRead = 0;
byte[] abData = new byte[BUFFER_SIZE];
while (nBytesRead != -1) {
try {
nBytesRead = audioStream.read(abData, 0, abData.length);
} catch (IOException e) {
e.printStackTrace();
}
if (nBytesRead >= 0) {
@SuppressWarnings("unused")
int nBytesWritten = sourceLine.write(abData, 0, nBytesRead);
}
}
sourceLine.drain();
sourceLine.close();
}
我希望这会有所帮助。
答案 1 :(得分:0)
尝试类似:
File soundFile = new File( "something.wav" );
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream( soundFile );
clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();//This plays the audio
在加载音频流后,您可能必须使用AudioSystem.getClip()
。
答案 2 :(得分:0)
根据我的经验,音频文件正在使用频繁的罪魁祸首。显然,Java无法播放压缩声音文件或类似的东西。它只播放线性PCM文件。我唯一可能是错的。任何人都有一个播放任何类型声音文件的例子吗?