-1

我一直在尝试在我的 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 ,则在第一个子弹声音完成之前,不会播放第一个子弹。

4

3 回答 3

2

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

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

或者

InputStream resourceAsStream = ClazzInTheFolderOfMyMidiFile.class.getResourceAsStream(nameOfMidiFile);
于 2012-08-24T07:15:28.687 回答
1

答案:

于 2012-08-24T07:08:51.453 回答
1

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

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

于 2012-08-24T10:30:13.997 回答