Java播放wav,支持播放暂停继续停止
最近为这件事烦了很久,参考了不少文章
最后自己总结了一下,写了一段代码,复制后直接调用即可快速达到播放wav暂停继续停止的效果
/*直接copy以下代码,当作一个开源的jar包
使用时请注明出处,并在运行时输出*/
import java.io.*;
import javax.sound.sampled.*;
class wav extends Thread
{
public String path="audio.wav";
public AudioFormat format=null;
public AudioInputStream aistream=null;
public float sampleRate=0;
public float framelength=0;
public float seclen=0;
public DataLine.Info datalineinfo=null;
public SourceDataLine dataline=null;
public Clip clip=null;
public boolean pause=false;
public boolean stop=false;
public wav()
{
}
public void set()
{
try
{
aistream=AudioSystem.getAudioInputStream(new File(path));
format=aistream.getFormat();
sampleRate=format.getSampleRate();
framelength=aistream.getFrameLength();
seclen=framelength/sampleRate;
datalineinfo=new DataLine.Info(SourceDataLine.class, format);
dataline=(SourceDataLine)AudioSystem.getLine(datalineinfo);
}
catch(LineUnavailableException err)
{
System.out.println("LineUnavailableException");
}
catch(UnsupportedAudioFileException err)
{
System.out.println("UnsupportedAudioFileException");
}
catch(IOException err)
{
System.out.println("IOException");
}
}
public void run()
{
try
{
byte[] bytes=new byte[512];
int length=0;
dataline.open(format);
dataline.start();
while(stop==false)
{
if(pause==false)
{
if((length=aistream.read(bytes))>0)
{
dataline.write(bytes, 0, length);
}
else
{
break;
}
}
else
{
System.out.print("");
//绝对不能少
}
}
aistream.close();
dataline.drain();
dataline.close();
}
catch(Exception err)
{
System.out.println("Error");
err.printStackTrace();
}
}
}
wav au=new wav();
au.path="C:/audio.wav";//设置新路径
au.set();//刷新
au.start();//开始播放,不阻塞
au.run();//开始播放,阻塞
au.pause=true;//暂停
au.pause=false;//继续
au.stop=true;//停止