在Java中播放.mp3和.wav?

如何在我的Java应用程序中播放.mp3.wav文件? 我正在使用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(); } } 

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

同样的:

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

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

Java FX有MediaMediaPlayer类将播放MP3文件。

示例代码:

 String bip = "bip.mp3"; Media hit = new Media(new File(bip).toURI().toString()); MediaPlayer mediaPlayer = new MediaPlayer(hit); mediaPlayer.play(); 

您将需要以下导入语句:

 import javafx.scene.media.Media; import javafx.scene.media.MediaPlayer; 

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

自从我使用它已经有一段时间了,但是JavaLayer对于MP3播放来说非常棒

你只能用java API播放.wav:

 import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.Clip; 

码:

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

和jLayer一起玩.mp3

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

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

  • 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(); } 

所需导入:

 import java.net.MalformedURLException; import java.net.URL; import javazoom.jlgui.basicplayer.BasicPlayer; import javazoom.jlgui.basicplayer.BasicPlayerException; 

这就是所有你需要开始播放音乐。 播放器正在启动和pipe理他自己的播放线程,并提供播放,暂停,恢复,停止查找function。

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

第一个类是PlayerUI (在javazoom.jlgui.player.amp包中)。 它很好地展示了BasicPlayer的高级function。

使用标准的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> 

 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); } } } 

参考文献:

我发现的最简单的方法是从http://www.javazoom.net/javalayer/sources.html下载JLayer jar文件,并将其添加到Jar库http://www.wikihow.com/Add-JARs-对项目-build造-path-在-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); } } } 

这里是import

 import javazoom.jl.player.*; import java.io.FileInputStream; 

为了给读者另一种select,我build议JACo MP3播放器库,一个跨平台的java mp3播放器。

特征:

  • 非常低的CPU使用率(〜2%)
  • 不可思议的小型图书馆(〜90KB)
  • 不需要JMF(Java Media Framework)
  • 易于集成到任何应用程序中
  • 易于集成到任何网页(作为小程序)。

有关其方法和属性的完整列表,可以在这里查看它的文档。

示例代码:

 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(); } } 

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

您需要先安装JMF( 使用此链接下载 )

 File f = new File("D:/Songs/preview.mp3"); MediaLocator ml = new MediaLocator(f.toURL()); Player p = Manager.createPlayer(ml); p.start(); 

不要忘记添加JMF jar文件

searchfreshmeat.net for JAVE(代表Javaaudiovideo编码器)库(链接在这里 )。 这是这类事情的图书馆。 我不知道Java是否具有本机mp3function。

如果你想要一个方法来运行这两种types的文件,你可能需要使用inheritance和一个简单的包装函数把mp3函数和wav函数一起包装起来。

要将MP3阅读支持添加到Java Sound,请将JMF的mp3plugin.jar添加到应用程序的运行时类path中。

请注意, Clip类具有内存限制,使其不适合超过几秒的高品质声音。