给定绝对文件名如何播放mp3文件?

时间:2016-09-29 00:38:28

标签: java audio intellij-plugin

我在Stack Overflow上找到了一些可能的答案,但它们已经过时了,看起来它们使用了弃用的技术。

我需要播放一个绝对文件名的mp3文件。

这是我尝试过的:

1。 JavaFX的

MediaPlayer player = new MediaPlayer(new Media(uriString)); 

我收到java.lang.IllegalStateException: Toolkit not initialized

我可能找到初始化该工具包的方法,但我想知道它是否是首选方式。

2。 Intellij UIUtil

final InputStream is = new FileInputStream(fileName);

UIUtil.playSoundFromStream(new Factory<InputStream>() {
    @Override
    public InputStream create() {
        return is;
    }
});

我正在Audio format is not yet supported: could not get audio input stream from input file

我做了一些尝试,但这是我记录的。

到目前为止,唯一对我有用的是播放shell中的文件:在Mac上,

Runtime.getRuntime().exec("afplay " + filePath);

但我更喜欢Java解决方案。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

  •   

    JavaFX

您可以在这里查看Getting a mp3 file to play using javafx

  •   

    在这里,我最喜欢的部分:

您可以使用支持 .mp3 JLayer

  

实施例

new Thread(()->{
   try {
        FileInputStream file = new FileInputStream("path ..../audio.mp3"); //initialize the FileInputStream
        Player player= new Player(file); //initialize the player
        player.play(); //start the player
    } catch (Exception e) {
       e.printStackTrace();
    }

 }).start();

注意:

请注意,如果应用程序不会堆叠,我将使用单独的Thread原因。

  

一般来说:

您必须使用外部库来播放Java中的.mp3等文件(尽管JavaFX支持.mp3但不支持所有格式)

  

Java仅支持.wav

虽然这已经足够了。你需要的是一个外部算法来播放其他音乐格式。所有其他格式最初来自.wav,它们会传递给算法,然后繁荣它们变成.ogg,.mp3,.whatever

1.如前所述.mp3 JLayer.jar 您可以将此jar作为外部库导入项目中。

2. JavaZoom还有其他库来支持 .ogg,.speex,.flac,.mp3 ,请点击上面的链接并在那里下载jlGui项目你可以找到很多格式的库。

  

链接到stackoverflow   How to play .wav files with java

http://alvinalexander.com/java/java-audio-example-java-au-play-sound 不确定它是否仍适用于java 8

  

代码:

   import java.io.File;
   import java.io.IOException;

   import javax.sound.sampled.AudioFormat;
   import javax.sound.sampled.AudioInputStream;
   import javax.sound.sampled.AudioSystem;
   import javax.sound.sampled.Clip;
   import javax.sound.sampled.DataLine;
   import javax.sound.sampled.LineEvent;
   import javax.sound.sampled.LineListener;
   import javax.sound.sampled.LineUnavailableException;
   import javax.sound.sampled.UnsupportedAudioFileException;


 public class AudioPlayerExample1 implements LineListener {

/**
 * this flag indicates whether the playback completes or not.
 */
boolean playCompleted;

/**
 * Play a given audio file.
 * @param audioFilePath Path of the audio file.
 */
void play() {
    File audioFile = new File("C:/Users/Alex.hp/Desktop/Musc/audio.wav");

    try {
        AudioInputStream audioStream = AudioSystem.getAudioInputStream(audioFile);

        AudioFormat format = audioStream.getFormat();

        DataLine.Info info = new DataLine.Info(Clip.class, format);

        Clip audioClip = (Clip) AudioSystem.getLine(info);

        audioClip.addLineListener(this);

        audioClip.open(audioStream);

        audioClip.start();

        while (!playCompleted) {
            // wait for the playback completes
            try {
                Thread.sleep(1000);
            } catch (InterruptedException ex) {
                ex.printStackTrace();
            }
        }

        audioClip.close();

    } catch (UnsupportedAudioFileException ex) {
        System.out.println("The specified audio file is not supported.");
        ex.printStackTrace();
    } catch (LineUnavailableException ex) {
        System.out.println("Audio line for playing back is unavailable.");
        ex.printStackTrace();
    } catch (IOException ex) {
        System.out.println("Error playing the audio file.");
        ex.printStackTrace();
    } 
}

/**
 * Listens to the START and STOP events of the audio line.
 */
@Override
public void update(LineEvent event) {
    LineEvent.Type type = event.getType();

    if (type == LineEvent.Type.START) {
        System.out.println("Playback started.");

    } else if (type == LineEvent.Type.STOP) {
        playCompleted = true;
        System.out.println("Playback completed.");
    } 
}

public static void main(String[] args) {
    AudioPlayerExample1 player = new AudioPlayerExample1();
    player.play();
} 

}