我目前忙于创建一个视频游戏作为一个小型的项目,以保持我的编程技能在大学。电子游戏的一个方面是声音效果,我对如何在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个线程的线程数。
现在显然这是不受欢迎的行为,我想知道如何解决这个问题,并更有效地实施声音效果。有没有你们知道的方法或方法,这些方法或方法不会产生这种疯狂的大量线程,我可以一次播放大量的音效?真的很感激一些帮助!
答案 0 :(得分:1)
如果选择JavaFX,最好切换到它,因为它为音频播放提供了很多功能。来自官方文件:
AudioClip plonkSound = new AudioClip("http://somehost/path/plonk.aiff");
plonkSound.play();
您还可以使用.wav
文件,这是声音效果的热门选择。有关更多信息,请访问javadoc。