Java中添加背景音乐【更新 播放/暂停】

运行时播放背景音乐

 

调用方法

		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;

 

评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值