音频人类能够听到的所有声音都称之为音频,包括噪音等,声音被录制下来以后,无论是说话声、歌声、乐器都可以通过数字音乐软件处理,我来为大家科普一下关于java 实现音频文件格式转换?以下内容希望对你有帮助!

java 实现音频文件格式转换(Java音频播放MP3)

java 实现音频文件格式转换

音频&MP3

音频

人类能够听到的所有声音都称之为音频,包括噪音等,声音被录制下来以后,无论是说话声、歌声、乐器都可以通过数字音乐软件处理。

Mp3是一种能播放音乐文件的播放器,主要由存储器(存储卡)、显示器(LCD显示屏)、中央处理器[MCU(微控制器)或解码DSP(数字信号处理器) 等组成。

javax.sound.sampled包

javax.sound.sampled, 提供用于捕获,处理和回放采样音频数据的接口和类。

javax.sound.sampled.spi包

提供新音频设备、声音文件reader和 writer,或音频格式转换器时,提供将为其创建子类的服务提供程序的抽象类。

JLayer,MP3解码器库

JLayer是一个库,可为JAVA(tm)平台实时解码/播放/转换MPEG 1/2 / 2.5 Layer 1/2/3(即MP3),这是一个非商业项目,任何人都可以添加自己的贡献,JLayer已获得LGPL许可。

音频流(mp3spi LIB)

mp3spi用于支持音频/mpeg mime类型。

VorbisSPI:

VorbisSPI是一个用于支持OGG音频格式的Java SPI (Service Provider Interface) 基于JOrbis Java库开发的。

tritonus-share:

Maven artifact for tritonus-share library of tritonus.org,Tritonus是Java Sound API的一个实现。

jflac-codec:

FLAC文件的编码器和解码器,包括Java声音SPI。是免费无损音频编解码器(FLAC)库到Java的一个端口。

jaudiotagger,音频标签库:

支持MP3,MP4(MP4音频,M4A,M4P Ogg Vorbis音频),FLAC和WAV和WMA,但真正支持的格式有限,项目地址:http://www.jthink.net/jaudiotagger/。

提供最流行的三十个属性都完全支持格式的通用接口:1、支持读取和写入MP4,M4A和mp4p(保护)的文件,包括多个图像和反向DNS域;2、支持多页的Ogg Vorbis评论;3、支持MP3 ID3v1,id3v11,id3v2.2,V2.3和V2.4是透明的;4、允许的ID3标签版本之间轻松转换;5、支持FLAC,包括嵌入和链接图像支持;6、提供最合适的域对象的表示,而不是一个简单的字节表示;7、完全支持Unicode文本编码;8、正在积极开发和支持;9、采用自动测试保证代码的兼容性之间的版本;10、使用代码覆盖工具保证代码的实际被测试。

Java,Maven

<properties> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <dependencies> <!-- apache commons-lang3 --> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> <version>3.12.0</version> </dependency> <!-- jlayer --> <dependency> <groupId>javazoom</groupId> <artifactId>jlayer</artifactId> <version>1.0.1</version> </dependency> <!--音频流(mp3spi LIB) --> <dependency> <groupId>com.googlecode.soundlibs</groupId> <artifactId>mp3spi</artifactId> <version>1.9.5.4</version> </dependency> <dependency> <groupId>com.googlecode.soundlibs</groupId> <artifactId>tritonus-share</artifactId> <version>0.3.7.4</version> </dependency> <dependency> <groupId>com.googlecode.soundlibs</groupId> <artifactId>vorbisspi</artifactId> <version>1.0.3.3</version> </dependency> <!-- 解码播放flac文件则引入这个jar包 --> <dependency> <groupId>org.jflac</groupId> <artifactId>jflac-codec</artifactId> <version>1.5.2</version> </dependency> <!--audiotagger --> <dependency> <groupId>org</groupId> <artifactId>jaudiotagger</artifactId> <version>2.0.3</version> </dependency> </dependencies> <repositories> <repository> <id>aliyun</id> <name>aliyun</name> <url>http://maven.aliyun.com/nexus/content/groups/public</url> </repository> </repositories>

播放音频代码案例

案例1:

package com.what21.music01.demo01; import javazoom.jl.player.Player; import java.io.BufferedInputStream; import java.io.FileInputStream; public class MusicPlayer { private String filename; private Player player; public MusicPlayer(String filename) { this.filename = filename; } public void play() { try { BufferedInputStream buffer = new BufferedInputStream(new FileInputStream(filename)); player = new Player(buffer); player.play(); } catch (Exception e) { System.out.println(e); } } public static void main(String[] args) { String musicFile = "D:/Data/video/2/虎年大吉.mp3"; MusicPlayer player = new MusicPlayer(musicFile); new Thread(()->player.play()).start(); } }

案例2:

package com.what21.music01.demo02; import org.apache.commons.lang3.StringUtils; /** * @author Administrator */ public enum Audio { /** * Specifies a WAVE file. */ WAVE(1, "WAVE", "wav"), /** * Specifies an AU file. */ AU(2, "AU", "au"), /** * Specifies an AIFF file. */ AIFF(3, "AIFF", "aif"), /** * Specifies an AIFF-C file. */ AIFF_C(4, "AIFF-C", "aifc"), /** * Specifies an SND file. */ SND(5, "SND", "snd"), /** * Specifies an MP3 file. */ MP3(6, "MP3", "mp3"), /** * Specifies an FLAC file. */ FLAC(7, "FLAC", "flac"); private int index; private String type; private String suffix; Audio(int index, String type, String suffix) { this.index = index; this.type = type; this.suffix = suffix; } public int index() { return index; } public static int getIndex(String name) { if (StringUtils.isBlank(name)) { throw new RuntimeException("文件名称为空!"); } name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") 1); for (Audio audio : values()) { if (StringUtils.equalsIgnoreCase(audio.suffix, name)) { return audio.index; } } return -1; } public static boolean isSupport(String name) { if (StringUtils.isBlank(name)) { throw new RuntimeException("文件名称为空!"); } name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") 1); for (Audio audio : values()) { if (StringUtils.equalsIgnoreCase(audio.suffix, name)) { return true; } } return false; } }

package com.what21.music01.demo02; import org.apache.commons.lang3.StringUtils; /** * @author Administrator */ public enum Audio { /** * Specifies a WAVE file. */ WAVE(1, "WAVE", "wav"), /** * Specifies an AU file. */ AU(2, "AU", "au"), /** * Specifies an AIFF file. */ AIFF(3, "AIFF", "aif"), /** * Specifies an AIFF-C file. */ AIFF_C(4, "AIFF-C", "aifc"), /** * Specifies an SND file. */ SND(5, "SND", "snd"), /** * Specifies an MP3 file. */ MP3(6, "MP3", "mp3"), /** * Specifies an FLAC file. */ FLAC(7, "FLAC", "flac"); private int index; private String type; private String suffix; Audio(int index, String type, String suffix) { this.index = index; this.type = type; this.suffix = suffix; } public int index() { return index; } public static int getIndex(String name) { if (StringUtils.isBlank(name)) { throw new RuntimeException("文件名称为空!"); } name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") 1); for (Audio audio : values()) { if (StringUtils.equalsIgnoreCase(audio.suffix, name)) { return audio.index; } } return -1; } public static boolean isSupport(String name) { if (StringUtils.isBlank(name)) { throw new RuntimeException("文件名称为空!"); } name = StringUtils.substring(name, StringUtils.lastIndexOf(name, ".") 1); for (Audio audio : values()) { if (StringUtils.equalsIgnoreCase(audio.suffix, name)) { return true; } } return false; } }

案例3:

package com.what21.music01.demo03; import org.jaudiotagger.audio.AudioFile; import org.jaudiotagger.audio.AudioFileIO; import java.io.File; public class MusicPlayer { public static void main(String[] args) throws Exception { String musicFile = "D:/Data/video/2/虎年大吉.mp3"; int musicLength = getMusicPlayLength(musicFile); System.out.println("音乐长度:" musicLength); // 音乐长度:53 } /** * Java Music 获取歌曲播放时长 */ public static int getMusicPlayLength(String path) throws Exception { File file = new File(path); AudioFile mp3 = AudioFileIO.read(file); return mp3.getAudioHeader().getTrackLength(); } }

,