Java 中的音效?

Sound Effects In Java?

我目前正忙于创建一个视频游戏作为一个小的副项目,以保持我的编程技能在大学时保持领先。视频游戏的一个方面是音效,我正在思考如何在 Java 中做到最好。

目前我正在使用 Clip class 来制作音效,下面是我正在使用的(非常基本和常见的)代码的预览:

        try {
            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(path));
            clip = AudioSystem.getClip();
            clip.open(audioInputStream);
            if(loop)
            {
                clip.loop(Integer.MAX_VALUE);

                volumeControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
                setVolume(volume);
                launched = true;
            }  
            else
            {
                clip.start();

                volumeControl = (FloatControl)clip.getControl(FloatControl.Type.MASTER_GAIN);
                setVolume(volume);
                running = true;
                CoreTime.sfx.add(this);

            }
        } catch(Exception e){System.out.println(e + "=-=-=-=-=-=-=-=-=-=run SFXPlayer");}

但是 Clip class 的问题在于它会为自己创建一个新的线程来播放音频。因此,需要同时播放大量剪辑可能会激增创建的线程数量,甚至可能使游戏冻结几秒钟。通过一些分析,当同时播放大量音效时,我的线程数达到了 60 个。

现在显然这是不受欢迎的行为,我想知道如何解决这个问题,并更有效地实现音效。有没有你们知道的方法或方式,不会创建如此多的线程,我可以同时播放大量音效?如果能提供帮助,我们将不胜感激!

如果 JavaFX 是一个选项,那么切换到它可能是个好主意,因为它提供了范围广泛的音频播放功能。来自官方文档:

AudioClip plonkSound = new AudioClip("http://somehost/path/plonk.aiff");
plonkSound.play();

您还可以使用 .wav 文件,这是音效的常用选择。如需更多信息,请访问 javadoc.