You need to enable JavaScript to run this app. Java如何预加载WAV音频以在游戏循环中无需重复读取即可重复播放
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.21 04:15:04