当WAV包含在JAR中时,如何在Java中播放WAV



我已经尝试在我的Applet上处理声音一段时间了,与其尝试所有不同的方法,在Java中播放声音的最佳方式是什么?有几个要求:

  • 需要能够循环
  • 需要能够从归档JAR加载WAV(我认为使用getClass().getResource)
  • 需要能够同时播放多个声音,而不是剪辑已经播放的声音

非常感谢你们看我的问题,我希望你们有一个答案!

多亏了我的大力帮助,我几乎可以做到这一点:

public class MyGame() {
   Clip bullet;

    public void init(){
        try {
        bullet = AudioSystem.getClip();
        URL url2 = this.getClass().getResource("bulletSound.wav");
        AudioInputStream ais2 = AudioSystem.getAudioInputStream( url2 );
        bullet.open(ais2);
        } catch (LineUnavailableException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (UnsupportedAudioFileException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
    }
    randomMethodToPlayBullet(){
        bullet.setFramePosition(0);
        bullet.start();
    }
}

问题是子弹音会播放,但如果连续调用randomMethodToPlayBullet两次,在第一个子弹音完成之前,seonc不会播放。

从jar文件加载资源的最佳方法是将一个类放在同一文件夹中,并使用.class.getResource(...).class.getResourceaAsStream(...)方法获取资源:

URL url = ClazzInTheFolderOfMyMidiFile.class.getResource(nameOfMidiFile);

InputStream resourceAsStream = ClazzInTheFolderOfMyMidiFile.class.getResourceAsStream(nameOfMidiFile);

的答案

  • 小样本Clip。请参阅Java声音信息。页面以获取使用示例
  • 大样本为BigClip

您不能同时播放同一个剪辑两次。您必须创建另一个剪辑实例才能同时播放两次声音。

请注意,您可以播放的剪辑数量是有限制的,因此剪辑API可能不适合支持大型游戏。

最新更新