2010-07-18 52 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