在做java贪吃蛇游戏课设时,想添加背景音乐,用了以下很简单的步骤即可完成,亲测有效哦!
参考一位博主的做法(链接https://blog.csdn.net/weixin_43926171/article/details/90739074)
调用方法:
1new Thread(()->{while(true) {Data.playMusic();} 2 }).start();// Lambda表达式 3// new Thread(new Runnable() { 4// 5// @Override 6// public void run() { 7// while (true) { 8// playMusic(); 9// } 10// } 11// }).start();// 开启一个线程用来播放音乐
方法体:
1import java.io.File; 2import javax.sound.sampled.AudioFormat; 3import javax.sound.sampled.AudioInputStream; 4import javax.sound.sampled.AudioSystem; 5import javax.sound.sampled.DataLine; 6import javax.sound.sampled.FloatControl; 7import javax.sound.sampled.SourceDataLine; 8static void playMusic() {// 背景音乐播放 9 try { 10 AudioInputStream ais = AudioSystem.getAudioInputStream(new File("D:/mysoft/eclipse/贪吃蛇/music.wav")); //绝对路径 11 AudioFormat aif = ais.getFormat(); 12 final SourceDataLine sdl; 13 DataLine.Info info = new DataLine.Info(SourceDataLine.class, aif); 14 sdl = (SourceDataLine) AudioSystem.getLine(info); 15 sdl.open(aif); 16 sdl.start(); 17 FloatControl fc = (FloatControl) sdl.getControl(FloatControl.Type.MASTER_GAIN); 18 // value可以用来设置音量,从0-2.0 19 double value = 2; 20 float dB = (float) (Math.log(value == 0.0 ? 0.0001 : value) / Math.log(10.0) * 20.0); 21 fc.setValue(dB); 22 int nByte = 0; 23 final int SIZE = 1024 * 64; 24 byte[] buffer = new byte[SIZE]; 25 while (nByte != -1) { 26 nByte = ais.read(buffer, 0, SIZE); 27 sdl.write(buffer, 0, nByte); 28 } 29 sdl.stop(); 30 31 } catch (Exception e) { 32 e.printStackTrace(); 33 } 34 }
注意事项:
若程序报错:
Exception in thread "main" javax.sound.sampled.UnsupportedAudioFileException: could not get audio input stream from input file
at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1189)
at com.ywq3.Test.main(Test.java:21)
异常信息是说,不支持的格式,即该音频文件不支持,得不到该文件的输入流。我用的是wav格式,原来音频文件是mp3,转换成wav时直接改不行,就会报以上错误。明明是wav文件,却报错说不支持该格式,则可能是该wav文件内部格式有错误。安利一个格式转换网站:https://cn.office-converter.com/Convert-to-WAV。我是转换成正确的wav格式就可以播放音乐啦。此处参考了博客http://blog.csdn.net/qq_25827845/article/details/79026786
如果本文对您有帮助,可不可以给萌新点一个赞,鼓励小萌新坚持写博客的热情!