在Java中播放.mp3和.wav?

Sta*_*tan 103 java audio mp3 wav

我怎样才能发挥.mp3.wav在我的Java应用程序文件?我正在使用Swing.我尝试在互联网上寻找类似这样的例子:

public void playSound() {
    try {
        AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File("D:/MusicPlayer/fml.mp3").getAbsoluteFile());
        Clip clip = AudioSystem.getClip();
        clip.open(audioInputStream);
        clip.start();
    } catch(Exception ex) {
        System.out.println("Error with playing sound.");
        ex.printStackTrace();
    }
}
Run Code Online (Sandbox Code Playgroud)

但是,这只会播放.wav文件.

同样的:

http://www.javaworld.com/javaworld/javatips/jw-javatip24.html

我希望能够使用相同的方法播放.mp3文件和.wav文件.

小智 112

Java FX有MediaMediaPlayer将播放mp3文件的类.

示例代码:

String bip = "bip.mp3";
Media hit = new Media(new File(bip).toURI().toString());
MediaPlayer mediaPlayer = new MediaPlayer(hit);
mediaPlayer.play();
Run Code Online (Sandbox Code Playgroud)

您将需要以下import语句:

import java.io.File;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
Run Code Online (Sandbox Code Playgroud)

  • 这对我来说根本不起作用.它说进口不存在.我正在运行java 7 ... (42认同)
  • http://stackoverflow.com/questions/15149547/how-do-i-work-with-javafx-in-eclipse-juno如果您使用Eclipse,您似乎需要从Java 7文件夹中手动添加javafx库. (9认同)
  • 不要忘记你需要初始化javaFX以使其工作.http://stackoverflow.com/questions/14025718/javafx-toolkit-not-initialized-when-trying-to-play-an-mp3-file-through-mediap (8认同)
  • 从技术上讲,`Media`和`MediaPlayer`不是_Java_类,而是_JavaFX_类.要在OS X或Windows上向Java添加mp3支持,您可能需要查看[SampledSP](http://www.tagtraum.com/sampledsp.html).是的 - 我写了这些库. (7认同)
  • 最终的URL资源= getClass().getResource("a.mp3"); (5认同)
  • 它对我有用,但这些库仅在netbeans的javafx项目中可用,并使用以下代码 (4认同)
  • 媒体m =新媒体(Paths.get("YourFileName.mp3").toUri().toString()); (2认同)

Tho*_*ler 30

我写了一个纯java的mp3播放器:mp3transform.

  • 有计划将项目推到github吗?=) (2认同)

小智 18

你只能用java API玩.wav:

import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
Run Code Online (Sandbox Code Playgroud)

码:

AudioInputStream audioIn = AudioSystem.getAudioInputStream(MyClazz.class.getResource("music.wav"));
Clip clip = AudioSystem.getClip();
clip.open(audioIn);
clip.start();
Run Code Online (Sandbox Code Playgroud)

和jLayer一起玩.mp3

  • 这是错的.Java将播放除wav之外的其他容器格式.此外,wav是一种容器格式,甚至可以包含mp3.所以Java无法播放所有的wav文件. (3认同)

Mar*_*ath 15

我使用它已经有一段时间了,但JavaLayer非常适合MP3播放


odo*_*ner 13

使用标准的javax.sound API,一个Maven依赖,完全开源(需要Java 7):

的pom.xml

 <!-- 
    We have to explicitly instruct Maven to use tritonus-share 0.3.7-2 
    and NOT 0.3.7-1, otherwise vorbisspi won't work.
   -->
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>tritonus-share</artifactId>
  <version>0.3.7-2</version>
</dependency>
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>mp3spi</artifactId>
  <version>1.9.5-1</version>
</dependency>
<dependency>
  <groupId>com.googlecode.soundlibs</groupId>
  <artifactId>vorbisspi</artifactId>
  <version>1.0.3-1</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

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.DataLine.Info;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;

import static javax.sound.sampled.AudioSystem.getAudioInputStream;
import static javax.sound.sampled.AudioFormat.Encoding.PCM_SIGNED;

public class AudioFilePlayer {

    public static void main(String[] args) {
        final AudioFilePlayer player = new AudioFilePlayer ();
        player.play("something.mp3");
        player.play("something.ogg");
    }

    public void play(String filePath) {
        final File file = new File(filePath);

        try (final AudioInputStream in = getAudioInputStream(file)) {

            final AudioFormat outFormat = getOutFormat(in.getFormat());
            final Info info = new Info(SourceDataLine.class, outFormat);

            try (final SourceDataLine line =
                     (SourceDataLine) AudioSystem.getLine(info)) {

                if (line != null) {
                    line.open(outFormat);
                    line.start();
                    stream(getAudioInputStream(outFormat, in), line);
                    line.drain();
                    line.stop();
                }
            }

        } catch (UnsupportedAudioFileException 
               | LineUnavailableException 
               | IOException e) {
            throw new IllegalStateException(e);
        }
    }

    private AudioFormat getOutFormat(AudioFormat inFormat) {
        final int ch = inFormat.getChannels();

        final float rate = inFormat.getSampleRate();
        return new AudioFormat(PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);
    }

    private void stream(AudioInputStream in, SourceDataLine line) 
        throws IOException {
        final byte[] buffer = new byte[4096];
        for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {
            line.write(buffer, 0, n);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

参考文献:


Ivo*_*Ivo 13

我建议使用BasicPlayerAPI.它是开源的,非常简单,不需要JavaFX. http://www.javazoom.net/jlgui/api.html

下载并解压缩zip文件后,应将以下jar文件添加到项目的构建路径中:

  • basicplayer3.0.jar
  • 来自lib目录的所有 jar (在BasicPlayer3.0中)

这是一个简约的用法示例:

String songName = "HungryKidsofHungary-ScatteredDiamonds.mp3";
String pathToMp3 = System.getProperty("user.dir") +"/"+ songName;
BasicPlayer player = new BasicPlayer();
try {
    player.open(new URL("file:///" + pathToMp3));
    player.play();
} catch (BasicPlayerException | MalformedURLException e) {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

所需进口:

import java.net.MalformedURLException;
import java.net.URL;
import javazoom.jlgui.basicplayer.BasicPlayer;
import javazoom.jlgui.basicplayer.BasicPlayerException;
Run Code Online (Sandbox Code Playgroud)

这就是你开始播放音乐所需要的一切.播放器正在启动和管理自己的播放线程,并提供播放,暂停,恢复,停止搜索功能.

有关更高级的用法,您可以查看jlGui音乐播放器.它是一个开源的WinAmp克隆:http://www.javazoom.net/jlgui/jlgui.html

要查看的第一个类是PlayerUI(在包javazoom.jlgui.player.amp中).它很好地演示了BasicPlayer的高级功能.


Vla*_*lad 5

我找到的最简单的方法是从http://www.javazoom.net/javalayer/sources.html下载JLayer jar文件并将其添加到Jar库http://www.wikihow.com/Add-JARs-在Eclipse中进行项目构建路径%28Java%29

这是该类的代码

public class SimplePlayer {

    public SimplePlayer(){

        try{

             FileInputStream fis = new FileInputStream("File location.");
             Player playMP3 = new Player(fis);

             playMP3.play();

        }  catch(Exception e){
             System.out.println(e);
           }
    } 
}
Run Code Online (Sandbox Code Playgroud)

这是进口

import javazoom.jl.player.*;
import java.io.FileInputStream;
Run Code Online (Sandbox Code Playgroud)


Mr.*_*mon 5

为了给读者另一种选择,我建议使用 JACo MP3 播放器库,这是一个跨平台的 java mp3 播放器。

特征:

  • CPU 使用率非常低 (~2%)
  • 令人难以置信的小型图书馆(~90KB)
  • 不需要 JMF(Java 媒体框架)
  • 易于集成到任何应用程序中
  • 易于集成到任何网页中(作为小程序)。

有关其方法和属性的完整列表,您可以在此处查看其文档。

示例代码:

import jaco.mp3.player.MP3Player;
import java.io.File;

public class Example1 {
  public static void main(String[] args) {
    new MP3Player(new File("test.mp3")).play();
  }
}
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,我在此处创建了一个简单的教程,其中包含可下载的源代码。