Java如何预加载WAV音频以在游戏循环中无需重复读取即可重复播放
问题根因
你两种写法无法正常重复播放的原因如下:
- 第一种写法:
Clip的start()方法只会从当前播放指针位置开始播放,首次播放结束后指针停在音频末尾,后续再次调用start()没有有效内容可播放,自然没有声音。 - 第二种写法:
AudioInputStream是单向只读数据流,第一次被读取完后就已经到流末尾,后续再传入open()方法时读不到有效音频数据,只会报错或播放空内容。
正确实现方案
你只需要在游戏初始化阶段预加载一次Clip到内存,每次需要播放时先将播放指针重置到音频起始位置即可,无需反复读取文件或创建新的Clip实例,完全符合你预存到内存的需求。
代码示例:
// 游戏初始化阶段执行,仅执行一次 Clip sound = AudioSystem.getClip(); sound.open(AudioSystem.getAudioInputStream(new File("path/to/sound"))); // 游戏循环中按需触发播放 while(true) { // 其他游戏逻辑代码 // 需要播放音频时执行 sound.setFramePosition(0); // 重置播放指针到音频开头 sound.start(); // 其他游戏逻辑代码 }
如果需要循环播放音频,可以直接调用Clip自带的loop方法:
- 无限循环播放:
sound.loop(Clip.LOOP_CONTINUOUSLY) - 指定循环次数(比如循环5次):
sound.loop(5)
如果需要停止正在播放的音频,调用sound.stop()即可。
内容的提问来源于stack exchange,提问作者florentin nica
相关产品推荐
相关产品推荐

