`
xpenxpen
  • 浏览: 724918 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

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包介绍
id最新版本描述支持格式
jorbis0.0.17Vorbis解码器ogg
VorbisSPI1.0.3支持OGG Vorbis格式的SPI封装器
JLayer1.0.1MP3解码器mp3
MP3SPI1.9.5mp3的SPI
jflac1.3flac解码器和SPIflac
jspeex0.9.7speex解码器和SPIspx
jmac1.7.4Monkey's Audio解码器和SPIape,mac
tritonus_share0.3.6tritonus底层库
jtta1.0tta解码器和SPItta
libkj-javadsp,可用来绘制音乐播放时的频谱分析
jaudiotagger2.2.2音乐标签读取库
jlGui3.1音乐播放器
yoyoplayer1.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编写音频处理程序

分享到:
评论
6 楼 苏城细雨沐秋风 2017-03-05  
我把解码的jar添加到类路径后,mp3可以播放,但是flac和ape还是不行。
5 楼 tom033 2016-04-18  
JAVA api 有对录音的操作。。。?
4 楼 xpenxpen 2016-02-01  
ComputerRookie 写道
我这里运行不了啊?这个只需要您一个函数就可以??我播放的是mp3

"但是光这样是运行不起来的,需要一些额外的jar包来支持。"请确认引入了需要的jar包
3 楼 ComputerRookie 2016-01-13  
我这里运行不了啊?这个只需要您一个函数就可以??我播放的是mp3
2 楼 xpenxpen 2015-09-21  
linshouyi 写道
请问一下,为什么我得播放ogg的,播几秒钟就停了呢?

没深入研究过。 :-| 可以试试换一个ogg看看能不能播放。或者调整音频格式的代码AudioFormat(AudioFormat.Encoding.PCM_SIGNED, rate, 16, ch, ch * 2, rate, false)
1 楼 linshouyi 2015-09-20  
请问一下,为什么我得播放ogg的,播几秒钟就停了呢?

相关推荐

    Java Modplayer 2.3 音频播放器

    Java Modplayer 2.3是一个轻量级的音频播放器, 设计的唯一目的是让您以简单的方式享受整个音乐的清晰声音。 除了支持流行的音频格式, Java Mod 播放器还支持多种 "不同寻常" 的...播放 mp3, ogg, midi, wav, flac, ape

    JavaMod - The Java Mod Player:基于Java的Amiga modfile,C64 SID和MP3,FLAC,APE,WAV文件播放器-开源

    此Java Modplayer播放* .mod,*。xm,*。s3m,*。stm,*。wow,*。it(均带有插值),MP3,*。sid,*。ogg,*。flac,*。ape ,WAV,MIDI,RMI,AU,AIFF。 它还支持播放列表,如PLS,M3U和提示表。 自2.8版以来,...

    YOYOPlayer(与千千静听一样的Java播放器)

    并且读取中文标签经常会出现乱码,由于YOYOPlayer是国人开发的,所以对中文的支持绝对可以放心,并且可以自定义标签的读取和写入编码. 支持snd,aifc,aif,wav,au,mp1,mp2,mp3,ogg,spx,flac,ape,mac等音频格式音乐。...

    YOYOPlayer1.1.3

    支持snd,aifc,aif,wav,au,mp1,mp2,mp3,ogg,spx,flac,ape,mac等音频格式音乐。支持10波段均衡器. 支持ID3v1/v2、APE和Vorbis标签的读取和写入,支持设置标签编码,支持以标签重命名文件。 支持同步歌词滚动显示和拖动...

    yoyoplayer源码+程序

    支持snd,aifc,aif,wav,au,mp1,mp2,mp3,ogg,spx,flac,ape,mac等音频格式音乐。 支持10波段均衡器. 支持ID3v1/v2、APE和Vorbis标签的读取和写入,支持设置标签编码,支持以标签重命名文件。 支持同步歌词滚动显示和...

    机顶盒SoC_Cortex-A53_Hi3798M-V200_(海思).pdf

    * APE/FLAC/Ogg/AMR-NB/WB解码 * G.711(u/a)音频解码 * Dolby MS11解码和音效 * G.711(u/a)/AMR-NB/AMR-WB/AAC-LC音频编码 * 支持HE-AAC transcoding DD(AC3) 安全处理 * 支持高级安全CA * 支持可下载CA * 支持...

    java8stream源码-daydayup:天天向上

    播放各种声音格式ogg,mp3,ape,flac org.xpen.chess.puzzle8 8数码游戏的人工智能解法(广度优先、A*、IDA*、深度优先+IDA*) org.xpen.chess.tictactoe tictactoe游戏的人工智能人机博弈(alpha-beta,minimax,查表法...

    Java Multiple Audio Format Converter-开源

    这个工具支持的音频格式包括 aac、aiff、ape、au、flac、m4a、m4b、mp3、mp4、mpc、ogg、ra、wav 和 wma。这些格式涵盖了常见的数字音频文件类型,满足了用户在不同设备和平台上的播放需求。 1. **开源软件**:作为...

    Hi3716C简介

    LC、HEAAC V1/V2解码,APE/FLAC/Ogg/AMR-NB/WB解码,以及downmix处理、重采样、两路混音、回波抵消、智能音量控制、音效处理如SRS、Dolby MS11音效、超重低音处理、G.711(u/a)/AMR-NB/AMR-WB/AAC-LC音频编码。...

    HI3798m技术资料

    在音频方面,它支持Dolby TrueHD、DTS/DTSHD Core解码,Dolby Digital/DTS透传,AAC-LC、HE-AAC v1/v2解码以及APE/FLAC/Ogg/AMR-NB/WB等格式的音频解码。芯片还提供了音频的downmix处理、重采样、高动态音量控制等...

    JavaFX开发基于crawler4j的图形化的网络爬虫

    目前支持的媒体格式有 avi,mov,swf,asf,navi,wmv,3gp,mkv,flv,rmvb,webm,mpg,mp4,qsv,mpeg,mp3,aac,ogg,wav,flac,ape,wma,aif,au,ram,mmf,amr,flac 链接爬取 其实就是下载HTML源代码 ...

    java版直播间源码-airsonic-advanced:进阶

    WMA、FLAC、APE、Musepack、WavPack 和 Shorten。 如果您的带宽受限,您可以为音乐流的比特率设置上限。 然后,Airsonic 会自动将音乐重新采样为合适的比特率。 除了作为流媒体服务器之外,Airsoni

    HI3796M技术参考资料

    - **APE/FLAC/Ogg/AMR-NB/WB解码** - **G.711(u/a)音频解码** 还支持downmix处理、重采样、高动态音量控制等功能,提供高品质的卡拉OK功能支持,包括回声抵消和多种音频编码。 #### 九、TS流解复用/PVR功能 **...

    Hi3716MV420.pdf

    在音频/视频编解码方面,Hi3716MV420支持MPEG L1/L2、DRA解码、Dolby Digital/Plus解码-转换器、Dolby TrueHD解码、DTS和DTSHD核心解码、Dolby Digital/DTS透明传输、AAC LC和HE-AAC V1/V2解码、APE、FLAC、Ogg、AMR...

    音视频编码格式汇总

    该格式支持流式播放,适合在线音乐服务。 **7. Apple MPEG-4 AAC** Apple MPEG-4 AAC 是苹果公司在其产品和服务中广泛使用的音频编解码格式,提供高质量的音频体验。 **8. Ogg Vorbis** Ogg Vorbis 是一种开源的...

    Hi3798MV100.pdf

    音频处理方面,HI3798MV100具备强大的音频编解码功能,包括MPEG L1/L2、Dolby Digital/Dolby Digital Plus解码转换器、Dolby TrueHD解码、DTS及DTSHD核心解码、AAC-LC和HEAAC V1/V2解码、APE、FLAC、Ogg、AMR-NB和...

Global site tag (gtag.js) - Google Analytics