赞
踩
运行时播放背景音乐
调用方法
- new Thread(()->{while(true) {playMusic();}
- }).start();// Lambda表达式
- // new Thread(new Runnable() {
- //
- // @Override
- // public void run() {
- // while (true) {
- // playMusic();
- // }
- // }
- // }).start();// 开启一个线程用来播放音乐
方法体
- static void playMusic() {// 背景音乐播放
-
- try {
- AudioInputStream ais = AudioSystem.getAudioInputStream(new File("文件路径必须是绝对路径"));
- AudioFormat aif = ais.getFormat();
- final SourceDataLine sdl;
- DataLine.Info info = new DataLine.Info(SourceDataLine.class, aif);
- sdl = (SourceDataLine) AudioSystem.getLine(info);
- sdl.open(aif);
- sdl.start();
- FloatControl fc = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
- // value可以用来设置音量,从0-2.0
- double value = 2;
- float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0);
- fc.setValue(dB);
- int nByte = 0;
- int writeByte = 0;
- final int SIZE = 1024 * 64;
- byte[] buffer = new byte[SIZE];
- while (nByte != -1) {
- nByte = ais.read(buffer, 0, SIZE);
- sdl.write(buffer, 0, nByte);
- }
- sdl.stop();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
在调用时使用while语句可以实现背景音乐循环播放,
-------------------------------------------------------------------------------------------------------------------------------------------
新增暂停功能
修改方法体,加入状态判断
- static void playMusic() {// 背景音乐播放
-
- try {
- AudioInputStream ais = AudioSystem.getAudioInputStream(new File("E:\\Eclipse\\学生管理系统\\src\\image\\测试2.wav"));
- AudioFormat aif = ais.getFormat();
- final SourceDataLine sdl;
- DataLine.Info info = new DataLine.Info(SourceDataLine.class, aif);
- sdl = (SourceDataLine) AudioSystem.getLine(info);
- sdl.open(aif);
- sdl.start();
- FloatControl fc = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN);
- // value可以用来设置音量,从0-2.0
- double value = 2;
- float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0);
- fc.setValue(dB);
- int nByte = 0;
- int writeByte = 0;
- final int SIZE = 1024 * 64;
- byte[] buffer = new byte[SIZE];
- while (nByte != -1) {// 判断 播放/暂停 状态
-
- if(flag) {
-
- nByte = ais.read(buffer, 0, SIZE);
-
- sdl.write(buffer, 0, nByte);
-
- }else {
-
- nByte = ais.read(buffer, 0, 0);
-
- }
-
- }
- sdl.stop();
-
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
之后在使用此方法的类中定义boolean用来指定状态即可
static boolean flag = true;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。