Использование музыки в Java-программе - PullRequest
0 голосов
/ 18 июля 2010

Я опробовал метод создания фоновой музыки для 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: не удалось создать аудиопоток из входного потока

Ответы [ 3 ]

2 голосов
/ 18 июля 2010

Вы должны использовать JMF (Java Media Framework). Для вашего интереса: список принятых форматов можно найти здесь .

Короче говоря, он поддерживает файлы AIFF, AVI, GSM, MVR, MID, MPG, MP2, MOV, AU и WAV.

Но здесь есть обходной путь, как указано здесь :

На заметку, если вы добавите установка пантомимы в JMFRegistry на карту Содержимое Windows Media (например, .asf и .wmv) к типу контента "видео / MPEG", JMF действительно может играть Windows Media или любое другое DirectShow файл (и только файл - http не будет работать).

0 голосов
/ 15 июля 2011

Только что получил это.

java.io.IOException: could not create AudioData object 

Из источника [1] видно, что это означает, что «ваш аудиофайл имеет размер> 1 МБ», и по какой-то причине ему это не нравится,Может быть, ошибка [?] В том, что они для этого не приспособлены.

Одним из способов может быть использование вместо этого JMF, как это предлагается, если вы все равно хотите, чтобы цикл работал для больших файлов.1007 * [1] http://www.docjar.com/docs/api/sun/audio/AudioStream.html#getData

0 голосов
/ 18 июля 2010

Я был бы удивлен, если бы Java могла передавать образцы формата Windows Media - попробуйте преобразовать .wmv в файл .wav и посмотрите, будет ли он работать тогда.

...