Author: Manba Cople
专业:IOT
说明:记录和输出学习内容
问题
这篇博客时记录之前基于JAVA语言设计的《抗疫大作战》小游戏中游戏加入问题。首先,由于JAVA中AudioClip包的废弃,导致目前小游戏中背景音乐加入成为问题。本博文是利用JAVA语言中的AudioInputStream流文件读入方式加入游戏的背景音乐。思路
由于博主刚接触JAVA不久,因此对于Music的加入,是将其处理为Music实体,这样在加入音乐时就和加入人物实体相似。首先,音乐的属性就是时间,方法就是Player(播放)函数。部分代码
音乐实体代码如下:public class Music {
private int t = 0; // 音乐播放时间
AudioInputStream bgm;
private boolean playing = false;
public boolean isPlaying() {
return playing;
}
public void setPlaying(boolean playing) {
this.playing = playing;
}
public int getT() {
return t;
}
public void setT(int t) {
this.t = t;
}
public Music() {
try {
bgm = AudioSystem.getAudioInputStream(new File("source/music/music.wav"));
} catch (UnsupportedAudioFileException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} // 获得音频输入流
}
public void player() {
AudioInputStream ais;
AudioFormat baseFormat;
DataLine.Info info;
ais = bgm;
baseFormat = ais.getFormat(); // 指定声音流中特定数据安排
info = new DataLine.Info(SourceDataLine.class, baseFormat);
SourceDataLine line = null; //该数据线处理字节的缓冲并将其传递到混频器
try {
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(baseFormat);
// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
line.start();// 允许数据行执行数据 I/O
int BUFFER_SIZE = 4000 * 4;
int intBytes = 0;
byte[] audioData = new byte[BUFFER_SIZE]; // 音频数据数组
while (intBytes != -1 && (playing == false)) {
intBytes = ais.read(audioData, 0, BUFFER_SIZE);
// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。
if (intBytes >= 0) {
line.write(audioData, 0, intBytes);// 通过此源数据行将音频数据写入混频器。
t += 1;
}
//System.out.println(t);
}
} catch (LineUnavailableException | IOException e1) {
e1.printStackTrace();
}
}
}