[java 音频处理篇]第2章 循环播放

该文章介绍如何使用Java的Clip类实现音频文件的循环播放功能。通过调用Clip的loop方法设定循环次数,实现音频从开头反复播放直至达到指定次数。同时,文章包含一个控制台输入监听线程,允许用户输入退出命令来终止程序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值