2010-07-18 38 views
0

我正在嘗試爲java程序創建背景音樂的方法,但是當我單擊播放按鈕時它顯示IO excedption錯誤。在java程序中使用音樂

package javaentertainment; 

import java.awt.event.ActionEvent; 
import java.awt.event.ActionListener; 
import java.io.FileInputStream; 
import java.io.IOException; 
import javax.swing.*; 
import sun.audio.AudioData; 
import sun.audio.AudioPlayer; 
import sun.audio.AudioStream; 

public class Music 
{ 

    public static void main(String args[]) 
    { 
     JFrame frame=new JFrame(); 
     frame.setSize(100,100); 
     JButton button=new JButton("P L A Y"); 
     frame.add(button); 
     button.addActionListener(new AL()); 
     frame.show(); 
    } 

    public static class AL implements ActionListener 
    { 

     public void actionPerformed(ActionEvent e) { 
      music(); 
     } 
    } 

    public static void music() 
    { 
     AudioPlayer MGP=AudioPlayer.player; 
     AudioStream BGM; 
     AudioData MD; 
     ContinousAudioDataStream loop=null; 

     try 
     { 
      BGM = new AudioStream(new FileInputStream("Vision.wmv")); 
      MD=BGM.getData(); 
      loop=new ContinousAudioDataStream(MD); 

     } 
     catch (IOException ex) 
     { 
      System.out.println(ex); 
     } 

     MGP.start(loop); // word loop was underlined by netbeans 
    } 
} 

當我運行該程序,然後點擊播放顯示以下錯誤, 產生java.io.IOException:無法創建從輸入流音頻流

+1

請用4個空格縮進代碼,以使進口可​​讀。 – Daniel 2010-07-18 08:19:37

回答

2

您應該使用JMF(Java Media Framework)。爲了您的興趣:可接受的格式列表可以在here找到。總之,它支持AIFF,AVI,GSM,MVR,MID,MPG,MP2,MOV,AU和WAV文件。

但是有一個workarond爲表示here

在一個側面說明,如果你在JMFRegistry添加 啞劇設定映射 Windows Media內容(如.ASF 和.WMV)到內容類型 「video/mpeg」,JMF實際上可以播放 Windows Media或任何其他DirectShow 文件(並且只有文件-http不會工作)。

0

我會感到驚訝,如果Java可以用手的Windows媒體格式示例 - 嘗試將.wmv轉換爲.wav文件,然後查看它是否有效。

+0

那麼現在前面的錯誤是好的,但它顯示 java.io.IOException:無法創建AudioData對象 – Yoosuf 2010-07-18 08:48:08

0

剛剛得到了這個。

java.io.IOException: could not create AudioData object 

從源頭[1]看來,這意味着「你的音頻文件大小> 1 MB」,它不喜歡的是無論出於何種原因。也許一個錯誤[?],他們不適應這個。

一個解決方法可能是使用JMF來代替,正如建議的那樣,如果您想循環使用大型文件。

[1] http://www.docjar.com/docs/api/sun/audio/AudioStream.html#getData