Java播放音频
在写完Java播放wav后,我又对代码进行了优化,支持了各种种类音频。
基础功能
- 开始
- 暂停
- 继续
- 停止
本次添加功能:
- 获取音频进度
- 跳过某一段
- 从某一段开始播放
- 各种音频格式支持
本次改变
- 播放方式改变
- 修复部分bug
- 增加注释
本次未修复的问题
- 部分安全方面的问题尚未攻克
- protected变量,不够安全
建议使用本次更新代替原来版本。
java格式
wav_improved.java
package player;
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.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
public class wav_improved
{
protected String path="audio.wav";
protected AudioFormat format=null;
protected AudioInputStream aistream=null;
protected float sampleRate=0;
protected float framelength=0;
protected DataLine.Info datalineinfo=null;
protected SourceDataLine dataline=null;
protected int played=0;
protected boolean _set=false;
protected int length=0;
protected byte[] bytes=new byte[512];
public wav_improved()
{
}
public boolean set(String p) //设置播放路径
{
if(_set) //如果已经被初始化了(缓冲区已经有音频准备播放了)
{
boolean stop_playing_return=stop_playing(); //关闭当前缓冲区
if(!stop_playing_return) //如果失败
{
return false;
}
}
path=p; //更新音频路径
try
{
//初始化音频
aistream=AudioSystem.getAudioInputStream(new File(path));
format=aistream.getFormat();
sampleRate=format.getSampleRate();
framelength=aistream.getFrameLength();
datalineinfo=new DataLine.Info(SourceDataLine.class, format);
dataline=(SourceDataLine)AudioSystem.getLine(datalineinfo);
}
catch(LineUnavailableException err)
{
System.out.println("LineUnavailableException");
return false;
}
catch(UnsupportedAudioFileException err)
{
System.out.println("UnsupportedAudioFileException");
return false;
}
catch(IOException err)
{
System.out.println("IOException");
err.printStackTrace();
return false;