前言:
第1章中通过一个例子介绍了怎么让自己的音频文件播放出来,这一章,我们来演示一下怎么循环播放
目标:
掌握Clip的loop方法
正文:
第1章说过,Clip有个好处就是它里面的数据流是预加载的,因为有这个特征,所以Clip就具备了循环播放的功能。
先上代码,可直接复制使用,注意【+】部分的代码,此段代码就是实现循环的
package my;
import javax.sound.sampled.*;
import java.io.File;
import java.util.Scanner;
public class Player{
private static int consoleInput=-1;
private static final int EXIT = 0;
public static void main(String[] args) throws Exception {
/**
* 这个线程主要用来接收控制台输入退出命令【输入0】,跳出while循环,结束程序。。
*/
new Thread(()->{
Scanner scanner = new Scanner(System.in);
while (true){
if(scanner.nextInt()==0){
consoleInput = 0;
break;
}
}
}).start();
Player player = new Player();
Clip clip = player.loadSound();
player.playSound(clip);
}
public Clip loadSound() throws Exception {
String filePath = "C:\\Users\\cook\\Desktop\\javasounddemo-150249\\JavaSoundDemo\\audio\\1-welcome.wav";
File file = new File(filePath);
AudioInputStream stream = AudioSystem.getAudioInputStream(file);
AudioFormat format = stream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, stream.getFormat(), ((int) stream.getFrameLength() * format.getFrameSize()));
Clip clip = (Clip) AudioSystem.getLine(info);
clip.addLineListener((event)->{
System.out.println(event.getType().toString());
});
clip.open(stream);
return clip;
}
public void playSound(Clip clip ){
// clip.start(); 【-】
// 设置循环播放5次【+】
clip.loop(5);
while (true) {
try {
if(consoleInput == EXIT){
break;
}
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();break;}
}
clip.stop();
clip.close();
}
}
下面截图对主要代码进行说明:
通过clip.loop方法设置循环播放的次数,loop方法用于从当前指定的位置进行循环回放(plackplay),因为我们没有设置位置,所以默认就是从音频的开头开始循环回放,当播放完后会自动到开头继续循环播放,直到循环到我们指定的次数后停止。