java播放mp3/ogg/ape/flac音乐
程序员文章站
2022-07-04 11:36:58
...
好吧,又要说一句了,java真是无所不能。
用java sound api播放wav, aiff, au, snd文件想必大家都已经知道了,这些格式是jdk原生支持的。
本文将介绍如何播放mp3/ogg/ape/flac音乐。其实都是批发来的,我只是搬运工 Σ( ° △ °|||)︴
1. 先上代码
你没有看错,代码其实很简单,就是普通的java sound api,和原来播放wav, aiff, au, snd没什么两样。但是光这样是运行不起来的,需要一些额外的jar包来支持。
2. 一些jar包介绍
其中,如果要支持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包。
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的话,那就要懂一些术语了,这里记录若干名词。
7.参考资料
Java实现音频播放--JavaSound API编写音频处理程序
用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包介绍
id | 最新版本 | 描述 | 支持格式 |
jorbis | 0.0.17 | Vorbis解码器 | ogg |
VorbisSPI | 1.0.3 | 支持OGG Vorbis格式的SPI封装器 | |
JLayer | 1.0.1 | MP3解码器 | mp3 |
MP3SPI | 1.9.5 | mp3的SPI | |
jflac | 1.3 | flac解码器和SPI | flac |
jspeex | 0.9.7 | speex解码器和SPI | spx |
jmac | 1.7.4 | Monkey's Audio解码器和SPI | ape,mac |
tritonus_share | 0.3.6 | tritonus底层库 | |
jtta | 1.0 | tta解码器和SPI | tta |
libkj-java | dsp,可用来绘制音乐播放时的频谱分析 | ||
jaudiotagger | 2.2.2 | 音乐标签读取库 | |
jlGui | 3.1 | 音乐播放器 | |
yoyoplayer | 1.3 | 音乐播放器 | |
musique | 音乐播放器 |
其中,如果要支持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的话,那就要懂一些术语了,这里记录若干名词。
英文 | 中文 | 本人自己的简单外行解释 |
mixer | 混频器 | 可以把多个声音混到一起播放 |
reverb | 混响 | 提供回声效果 |
gain | 增益 | 放大声音 |
pan | 声像平衡 | 左声道右声道调节,就是可以控制左右两个耳机或两个喇叭哪个出声音 |
equalizer | 均衡器 | 10个频段调节,展现不同音效。一般音乐播放器都有 |
sequencer | 音序器 | 回放MIDI用 |
synthesizer | 合成器 | 合成音符,由不同的乐器播放 |
7.参考资料
Java实现音频播放--JavaSound API编写音频处理程序
上一篇: 推荐一款Mybatis分页插件
下一篇: PKI体系简易JAVA实现