0

我正在尝试为 java 程序创建背景音乐的方法,但是当我单击播放按钮时它显示 IO excedption 错误。

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: could not create audio stream from input stream

4

3 回答 3

2

您应该使用 JMF(Java 媒体框架)。为了您的兴趣:可以在此处找到接受的格式列表。

简而言之,它支持 AIFF、AVI、GSM、MVR、MID、MPG、MP2、MOV、AU 和 WAV 文件。

但是这里有一个解决方法

附带说明一下,如果您在 JMFRegistry 中添加 mime 设置以将 Windows Media 内容(例如 .asf 和 .wmv)映射到内容类型“video/mpeg”,则 JMF 实际上可以播放 Windows Media 或任何其他 DirectShow 文件(并且只有文件 - http 不起作用)。

于 2010-07-18T08:17:32.113 回答
0

如果 Java 可以处理 Windows Media 格式示例,我会感到惊讶 - 尝试将 .wmv 转换为 .wav 文件,然后看看它是否有效。

于 2010-07-18T08:09:38.447 回答
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

于 2011-07-14T21:05:27.907 回答