URL url = new URL("http://www.dasolorfire.freehostia.com/sound/test.wav");
AudioInputStream sound = AudioSystem.getAudioInputStream(url); //Sound.java:50
DataLine.Info info = new DataLine.Info(Clip.class, sound.getFormat());
clip = (Clip) AudioSystem.getLine(info);
clip.open(sound);
clip.addLineListener(new LineListener()
{
public void update(LineEvent event)
{
if (event.getType() == LineEvent.Type.STOP)
{
event.getLine().close();
}
}
});
clip.start();
这是我尝试从网址加载音频。这不仅非常慢,而且当我尝试加载声音文件时,我得到了这个例外:
javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input URL
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at srcD.Sound.soundPlay(Sound.java:50)
我的下一次尝试是用输入流替换url。
InputStream url = new URL("http://www.dasolorfire.freehostia.com/sound/test.wav").openStream();
AudioInputStream sound = AudioSystem.getAudioInputStream(url);
这个问题是我收到了这个错误:
java.io.IOException: mark/reset not supported
at java.io.InputStream.reset(Unknown Source)
at java.io.FilterInputStream.reset(Unknown Source)
at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.reset(Unknown Source)
at com.sun.media.sound.SoftMidiAudioFileReader.getAudioInputStream(Unknown Source)
at javax.sound.sampled.AudioSystem.getAudioInputStream(Unknown Source)
at srcD.Sound.soundPlay(Sound.java:50)
(我正在尝试为jnlp加载声音)
答案 0 :(得分:2)
就第二个错误而言,您可以通过将输入流包装在BufferedInputStream中来实现此功能,如下所示:
InputStream is = new URL("http://www.dasolorfire.freehostia.com/sound/test.wav").openStream();
BufferedInputStream bis = new BufferedInputStream( is );
AudioInputStream sound = AudioSystem.getAudioInputStream(bis);
答案 1 :(得分:1)
第一个错误(无法从输入URL获取音频输入流)表示不支持您所引用的音频数据的格式。我不知道您的示例代码是否使用了真实的网址,但如果我尝试调用http://www.dasolorfire.freehostia.com/sound/test.wav,我会被重定向到http://www.freehostia.com/并获取HTML网页,而不是预期的WAV文件。< / p>
第二个错误(不支持标记/重置)应该是自解释的。 AudioSystem.getAudioInputStream(InputStream)的API文档解释了为什么提供的InputStream必须支持标记和重置功能(这些功能对于特定的InputStream实现是可选的)。