资讯详情

使用Java播放MP3或Wav音频

JavaSound一个小的低层应用程序接口(API),它支持数字音频和乐器数字接口(MIDI)记录和回放数据。在JDK 1.3.0之前,JavaSound是标准的Java扩展API,但从Java 2的1.3.0版开始,JavaSound就被包含到JDK之中。由于Java基于跨平台(操作系统、硬件平台)的特点JavaSound在任何情况下都可以实现音频处理程序Java 1.3以上版本的系统运行,无需安装任何支持软件。 使用JavaSound API,可以实现各种基于声音的应用,例如声音录制、音乐播放、网络电话、音乐编辑等。JavaSound API各种解码和合成器SPI(服务提供者接口,Service Provider Interface)为基础,实现各种音乐格式的解码与转码。 对于来自各种音频输入端口的信号,如麦克风,CD它们可以到达播放器、磁带播放器等TargetDataLine在使用混频器控制输入混频之前,最后通过程序TargetDataLine获取数字音频输入流。 类似地,混频器用于处理输出音频时的一系列来源SourceDataLine混频处理的信号可以输出到扬声器、耳机等各种输出端口。SourceDataLine它是一种可以写入音频信号数字流的设备,例如,我们可以从一个WAV文件读取内容写入SourceDataLine,然后通过扬声器输出。我们可以想SourceDataLine它是一个虚拟播放器,只要扬声器和耳机连接在电脑上,音频信号就会通过SourceDataLine进行播放。

但是,JavaSound只支持wav等格式音频缺乏正确的音频MP支持3格式音频文件,想要使用Java代码播放MP需要第三方库。JLayer-MP3 library是一款Java语言编写的开源MP3解码器库(jl1.0.jar),又称为javazoom.jl包。为了支持mp我们必须添加3的播放mp3的SPI支持库(已包含)JLayer-MP3 library)在当前项目中。mp3的SPI有三个支持库Jar文件jl1.0.jar、mp3spi1.9.4.jar、tritonus_share.jar。

为了让Java可同时播放程序MP3格式和WAV等格式的音频,需要如图在当前项目的构建文件中添加mp3的SPI支持库: 在这里插入图片描述 以下是一个简单的播放例程,可兼容播放MP3和WAV音频,MP3 其实音频是转码的WAV格式了。

import java.io.File; 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 AudioPlayTest {  private AudioInputStream audioStream;  private AudioFormat audioFormat;  private SourceDataLine sourceDataLine;    public AudioPlayTest(String path) {   playMusic(path);  }    private void playMusic(String path){   try{    int count;    byte buf[] = new byte[2048];    //获取音频输入流       audioStream = AudioSystem.getAudioInputStream(new File(path));    //获取音频格式    audioFormat = audioStream.getFormat();        System.out.println("音频文件: " path);    System.out.println("音频Encoding: " audioFormat.getEncoding());        //如果不是wav格式,转换mp3文件编码。MPEG1L3(mp3格式)转为PCM_SIGNED(wav格式)    if (audioFormat.getEncoding() != AudioFormat.Encoding.PCM_SIGNED) {     audioFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED,       audioFormat.getSampleRate(), 16, audioFormat       .getChannels(), audioFormat.getChannels() * 2,       audioFormat.getSampleRate(), false);      audioStream = AudioSystem.getAudioInputStream(audioFormat,       audioStream);    } //转换mp文件编码结束    //包装音频信息    DataLine.Info dataLineInfo = new DataLine.Info(SourceDataLine.class,      audioFormat,AudioSystem.NOT_SPECIFIED);    //获取虚拟扬声器(SourceDataLine)实例    sourceDataLine = (SourceDataLine)AudioSystem.getLine(dataLineInfo);        sourceDataLine.open(audioFormat);    sourceDataLine.start();     //播放音频    while((count = audioStream.read(buf,0,buf.length)) != -1){     sourceDataLine.write(buf,0,count);       }    ///播放结束,释放资源    sourceDataLine.drain();    sourceDataLine.close();    audioStream.close();   }catch(Exception ex){    ex.printStackTrace();   }  }    public static void main(String[] args) {   String path = "D:\\test\\三步舞曲.mp3";   new AudioPlayTest(path);      path = "D:\\test\\我是一片云.wav";   new AudioPlayTest(path);  } } 

其实这个程序只是在"使用Java播放wav音乐"博客的第二个计划程序增加了一点MP3格式音频的转码处理。请参见: 使用Java播放wav音乐_Java博客编程公园-CSDN博客

本例程的源代码及相关mp3的SPI支持库

标签: jl14系列连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

 锐单商城 - 一站式电子元器件采购平台  

 深圳锐单电子有限公司