快捷搜索: 王者荣耀 脱发

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

经验分享 程序员 微信小程序 职场和发展