我目前正忙于创建一个电子游戏,作为一个小型附带项目,以确保我的编程技能可以上大学。电子游戏的一个方面是音效,而我却在思考如何在Java中做到最好。

目前,我正在使用Clip类来产生声音效果,这是我正在使用的(非常基本和常见)代码的预览:

        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类的问题在于,它为自己创建了一个新线程,并在该线程上播放音频。因此,需要同时播放大量剪辑,可能会增加创建线程的数量,甚至可能使游戏冻结几秒钟。经过一些分析,当同时播放许多声音效果时,我得到的线程数最多可以达到60个线程。

现在显然这是不想要的行为,我想知道如何解决这个问题并更有效地实现声音效果。你们是否知道有没有方法或方法无法创建如此多的线程,而我却无法立即播放很多声音效果?一些帮助将不胜感激!

最佳答案

如果可以选择JavaFX,则最好切换到它,因为它提供了许多音频播放功能。根据官方文档:

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

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

关于java - Java中的音效?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39674463/

10-10 12:31