繁体   English   中英

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

[英]How to play a WAV in Java, when the WAV is contained inside the JAR

我一直在尝试处理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,则第二个子弹不会播放。

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

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

要么

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

答案为:

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM