【Java篇】 Java游戏中加入背景音乐

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();
		}
	}

}

声明

  以上只是个人理解创作代码,并且以成功在《抗疫大作战》中成功运用,若有疑问可以评论留言。
  • 15
    点赞
  • 119
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值