Java播放音频,支持开始暂停继续停止
再写完Java播放wav后,我又对代码进行了优化,支持了各种种类音频
基础功能
- 开始
- 暂停
- 继续
- 停止
本次添加功能:
- 获取音频进度
- 跳过某一段
- 从某一段开始播放
- 各种音频格式支持
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 boolean pause=false;public boolean stop=false;public int played=0;public int play_from=0;public boolean pass=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();played=0;while(stop==false){if(pause==false){if((length=aistream.read(bytes))>0){if(played>=play_from){if(pass==false){dataline.write(bytes, 0, length);}else{System.out.print("");}played+=1;}else{played+=1;System.out.print("");}}else{break;}}else{System.out.print("");}}stop=true;aistream.close();dataline.drain();dataline.close();aistream=null;format=null;sampleRate=0;framelength=0;seclen=0;datalineinfo=null;dataline=null;pause=false;stop=false;play_from=0;pass=false;}catch(Exception err){System.out.println("Error");err.printStackTrace();}catch(Error err){System.out.println("Error: can not play the audio");err.printStackTrace();}}
}class audio extends wav
{public audio(String path){try{if(!(new File(path+".wav").exists())){Process p=Runtime.getRuntime().exec("ffmpeg.exe -i "+path+" -f wav "+path+".wav");try{p.waitFor();}catch(Exception err){}}}catch(IOException err){err.printStackTrace();}this.path=path+".wav";}
}class getlength
{public getlength(){}public static int get(String path){audio au=new audio(path);au.set();au.start();au.pass=true;while(au.stop!=true){System.out.print("");}return au.played;}
}
audio au=new audio("X:/xxx/xxx.xxx");
au.play_from=100;
au.set();
au.start();
au.run();
au.pause=true;
au.pause=false;
au.stop=true;
au.played;
getlength.get(path);
au.seclen;
au=new wav();
需要用到ffmpeg来转换音频格式
ffmpeg下载https://blog.csdn.net/twxwjh/article/details/107576426