Java播放wav

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;//停止

猜你喜欢

转载自blog.csdn.net/twxwjh/article/details/107599046