1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > java播放mp3/ogg/ape/flac音乐

java播放mp3/ogg/ape/flac音乐

时间:2021-05-05 11:31:42

相关推荐

java播放mp3/ogg/ape/flac音乐

好吧,又要说一句了,java真是无所不能。

用java sound api播放wav, aiff, au, snd文件想必大家都已经知道了,这些格式是jdk原生支持的。

本文将介绍如何播放mp3/ogg/ape/flac音乐。其实都是批发来的,我只是搬运工 Σ( ° △ °|||)︴

1. 先上代码

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;

import javax.sound.sampled.SourceDataLine;

public class AudioFilePlayer {

public static void main(String[] args) {

final AudioFilePlayer player = new AudioFilePlayer ();

player.play("D:/xiaomi.ogg");

//player.play("D:/01 - 謎解きはディナーのあとで.mp3");

//player.play("D:/周杰伦-青花瓷.APE");

//player.play("D:/周杰伦 - 听妈妈的话.flac");

}

public void play(String filePath) {

final File file = new File(filePath);

try {

final AudioInputStream in = AudioSystem.getAudioInputStream(file);

final AudioFormat outFormat = getOutFormat(in.getFormat());

final DataLine.Info info = new DataLine.Info(SourceDataLine.class, outFormat);

final SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);

if (line != null) {

line.open(outFormat);

line.start();

stream(AudioSystem.getAudioInputStream(outFormat, in), line);

line.drain();

line.stop();

}

} catch (Exception e) {

throw new IllegalStateException(e);

}

}

private AudioFormat getOutFormat(AudioFormat inFormat) {

final int ch = inFormat.getChannels();

final float rate = inFormat.getSampleRate();

return new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, rate, 16, ch, ch * 2, rate, false);

}

private void stream(AudioInputStream in, SourceDataLine line)

throws IOException {

final byte[] buffer = new byte[65536];

for (int n = 0; n != -1; n = in.read(buffer, 0, buffer.length)) {

line.write(buffer, 0, n);

}

}

}

你没有看错,代码其实很简单,就是普通的java sound api,和原来播放wav, aiff, au, snd没什么两样。但是光这样是运行不起来的,需要一些额外的jar包来支持。

2. 一些jar包介绍

[table]

|id|最新版本|描述|支持格式

|[url=/jorbis/]jorbis[/url]|0.0.17|Vorbis解码器|ogg|

|[url=/vorbisspi/vorbisspi.html]VorbisSPI[/url]|1.0.3|支持OGG Vorbis格式的SPI封装器||

|[url=/javalayer/javalayer.html]JLayer[/url]|1.0.1|MP3解码器|mp3|

|[url=/mp3spi/mp3spi.html]MP3SPI[/url]|1.9.5|mp3的SPI||

|[url=/]jflac[/url]|1.3|flac解码器和SPI|flac|

|[url=/projects/jspeex/files/jspeex/]jspeex[/url]|0.9.7|speex解码器和SPI|spx|

|[url=/]jmac[/url]|1.7.4|Monkey's Audio解码器和SPI|ape,mac|

|[url=/plugins.html]tritonus_share[/url]|0.3.6|tritonus底层库||

|[url=/tulskiy/jtta]jtta[/url]|1.0|tta解码器和SPI|tta|

|[url=/p/libkj-java/]libkj-java[/url]||dsp,可用来绘制音乐播放时的频谱分析||

|[url=/jaudiotagger/index.jsp]jaudiotagger[/url]|2.2.2|音乐标签读取库||

|[url=/jlgui/jlgui.html]jlGui[/url]|3.1|音乐播放器||

|[url=/p/yoyoplayer/]yoyoplayer[/url]|1.3|音乐播放器||

|[url=/tulskiy/musique]musique[/url]||音乐播放器||

[/table]

其中,如果要支持mp3的话,需要javalayer,mp3spi,tritonus_share这3个jar包。

而ogg需要jorbis,vorbisspi,tritonus_share这3个jar包。

ape需要jmac这个jar包。

flac需要jflac这个jar包。

3.maven

如果用maven的话,加入以下dependency就有ogg和mp3的支持了。另外两个ape和flac我还没找到,可能要手工自己编译或者去前面的链接下载编译好的jar包。

<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>

4. musique

最后我强烈推荐下载musique,下载地址见本文前面的表格。

musique我下载以后吓了一跳,非常牛啊。他把以上一些项目的源码全部复制过来了,还自带所有声音文件供测试Σ( ° △ °)︴。

编译方法也是用maven,然后最后会生成musique-core-0.3-SNAPSHOT.jar,双击运行就是一个音乐播放器。我测试下来他相对jlGui和yoyoplayer的一个优点就是ogg/ape/flac格式全都支持拖进度条任意时间点播放。

附件有我编译好的musique,供不愿编译的懒人下载使用。

5.原理

可以看到,用java播放mp3/ogg/ape/flac音乐没什么难,因为别人都给封装好了。其实这还要归功于java sound api的开放性架构,如果有新的音乐格式,只需要实现新的SPI就可以了。而对用户来说,不必关心这些,代码依旧不变。

6.名词解释

如果深入学习java sound api的话,那就要懂一些术语了,这里记录若干名词。

[table]

|英文|中文|本人自己的简单外行解释|

|mixer|混频器|可以把多个声音混到一起播放|

|reverb|混响|提供回声效果|

|gain|增益|放大声音|

|pan|声像平衡|左声道右声道调节,就是可以控制左右两个耳机或两个喇叭哪个出声音|

|equalizer|均衡器|10个频段调节,展现不同音效。一般音乐播放器都有|

|sequencer|音序器|回放MIDI用|

|synthesizer|合成器|合成音符,由不同的乐器播放|

[/table]

7.参考资料

[url=/tm/030531/030531_95896.html]Java实现音频播放--JavaSound API编写音频处理程序[/url]

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。