是否可以从 InputStream 转换为 AudioInputStream?
我想在某些事件中播放小声音文件,所以我做了以下 SoundThread
import java.io.*;
import javax.sound.sampled.*;
public class SoundThread implements Runnable{
private String filename;
SoundThread(String filename) {
this.filename = filename;
}
public void run() {
try {
InputStream in = ClassLoader.getSystemResourceAsStream("sounds/"+filename+".wav");
Clip clip = AudioSystem.getClip();
clip.open((AudioInputStream)in);
clip.start();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} catch (NullPointerException e) {
e.printStackTrace();
} catch (LineUnavailableException e){
e.printStackTrace();
}
}
}
我运行它
new Thread(new SoundThread("nameOfTheSoundFile")).start();
一开始我用 sun.audio.AudioPlayer 和 sun.audio.AudioStream 处理它,但是当我将该代码放入 eclipse 中时,它显示了错误。所以我尝试了
AudioInputStream in = (AudioInputStream)ClassLoader.getSystemResourceAsStream("sounds/"+filename+".wav");
将 InputStream 转换为 AudioInputStream (eclipse 没有显示任何错误),但运行它会抛出 ClassCastException。这个问题有什么解决办法吗?
Use the AudioSystem
得到一个AudioInputStream
直接从URL
到资源。
URL url = ClassLoader.getResource("/sounds/"+filename+".wav");
AudioInputStream ais = AudioSystem.getAudioInputStream(url);
Clip clip = AudioSystem.getClip();
clip.open(ais);
也可以看看AudioSystem.getAudioInputStream(InputStream) http://docs.oracle.com/javase/7/docs/api/javax/sound/sampled/AudioSystem.html#getAudioInputStream%28java.io.InputStream%29但这“更危险”。 Java Sound 通常需要可重新定位的输入流。由于某种我不太清楚的原因,Class.getResourceAsStream()
变体有时会返回一个non-可重新定位的流。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)