如何在java中播放wav文件?

问题描述

我知道这是一个已经被问到的问题,但我无法得到答案

我找到了这种播放声音的方式:

  Clip sound = AudioSystem.getClip();
  sound.open(AudioSystem.getAudioInputStream(new File("path/to/sound")));
  sound.start();

但问题是我在游戏循环中运行这段代码,我想以某种方式构造它,这样我就不需要每次都从输入中读取声音,但已经将声音保存在内存中,所以我不必每次都加载它。

我尝试做这样的事情:

 Clip sound = AudioSystem.getClip();
 sound.open(AudioSystem.getAudioInputStream(new File("path/to/sound")));

while(true)
{
 sound.start();


}

也喜欢这个

AudioStream audiostream = AudioSystem.getAudioInputStream(new File("path/to/sound"));
while(true)
{
     Clip sound = AudioSystem.getClip();
     sound.open(AudioSystem.getAudioInputStream(audiostream));
     sound.start();
}

但它不起作用,或者它只起作用1次

解决方法

创建实例变量是个好方法。

要再次播放声音,首先将帧位置设置为第 0 帧或毫秒。 play() 方法总是从声音停止的地方开始。

因此:

while(true) {
    sound.setFramePosition(0);
    sound.play();
    ...
}

Clip (Java SE 15 & JDK 15)

可以使用 start 开始和停止音频剪辑的播放 和停止方法。这些方法不会重置媒体位置;开始 导致从上次播放的位置继续播放 停了下来。从剪辑音频的开头重新开始播放 数据,只需使用 setFramePosition(0) 跟随停止调用, 将媒体倒回到剪辑的开头。