[java 音频处理篇]第2章 循环播放
前言:
第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),因为我们没有设置位置,所以默认就是从音频的开头开始循环回放,当播放完后会自动到开头继续循环播放,直到循环到我们指定的次数后停止。