2012-10-16 56 views
1
  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加載音頻。這不僅是非常緩慢的,但是當我嘗試加載聲音文件我得到這個異常:使用帶有AudioInputStream的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)

回答

1

的第一個錯誤(無法獲得音頻輸入流來自輸入URL)表示您所指的音頻數據的格式不受支持。我不知道您的示例代碼是否使用了真實網址,但如果我嘗試調用http://www.dasolorfire.freehostia.com/sound/test.wav,我會將其重定向到http://www.freehostia.com/並獲取HTML頁面,而不是預期的WAV文件。

第二個錯誤(不支持標記/重置)應該不言自明。 AudioSystem.getAudioInputStream(InputStream)的API文檔解釋了爲什麼提供的InputStream必須支持標記和重置功能(這些功能對於特定的InputStream實現是可選的)。

+0

我才意識到,隨着第一個錯誤。我不知道爲什麼。在控制面板中,文件工作正常。在網站上,該文件不起作用。其他的wav文件可以工作。 – Coupon22

+0

感謝您的回答!主要的錯誤是聲音文件無法在網站上工作,我通過將聲音文件放在jar文件中來修復它。我還有一個問題,這兩個工作文件需要很長時間才能從互聯網上運行。我如何加快速度? – Coupon22

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