我目前正忙于创建一个电子游戏,作为一个小型附带项目,以确保我的编程技能可以上大学。电子游戏的一个方面是音效,而我却在思考如何在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/