Java中的声音效果?

时间:2016-09-24 08:54:43

标签: java multithreading audio javasound

我目前忙于创建一个视频游戏作为一个小型的项目,以保持我的编程技能在大学。电子游戏的一个方面是声音效果,我对如何在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类的问题是它为自己创建了一个新的Thread,它播放音频。因此,需要同时播放大量剪辑可能会增加创建的线程数量,甚至可能会冻结游戏一段时间。通过一些分析,我可以在同时播放大量音效时获得最多60个线程的线程数。

现在显然这是不受欢迎的行为,我想知道如何解决这个问题,并更有效地实施声音效果。有没有你们知道的方法或方法,这些方法或方法不会产生这种疯狂的大量线程,我可以一次播放大量的音效?真的很感激一些帮助!

1 个答案:

答案 0 :(得分:1)

如果选择JavaFX,最好切换到它,因为它为音频播放提供了很多功能。来自官方文件:

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

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