2
            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();

这是我从 url 加载音频的尝试。这不仅非常慢,而且当我尝试加载声音文件时,我得到了这个异常:

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 加载声音)

4

2 回答 2

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);
于 2012-10-17T14:47:16.613 回答
1

第一个错误(could not get audio input stream from input URL)表示您所引用的音频数据的格式不受支持。我不知道您的示例代码是否使用了真实的 URL,但如果我尝试调用http://www.dasolorfire.freehostia.com/sound/test.wav,我将被重定向到http://www.freehostia。 com/并获取一个 HTML 页面,而不是预期的 WAV 文件。

第二个错误(不支持标记/重置)应该是不言自明的。AudioSystem.getAudioInputStream(InputStream)的 API 文档解释了为什么提供的 InputStream 必须支持标记和重置功能(这些功能对于特定的 InputStream 实现是可选的)。

于 2012-10-16T16:31:14.997 回答