频繁的音频占用太多 CPU - JavaFX
Frequent audio takes too much CPU - JavaFX
我正在尝试用 JavaFX 开发塔防。我的游戏运行良好,即使有很多炮塔和敌人,但当我开始使用音效进行塔式射击时,性能会在短时间内显着下降。我尝试过使用不同的方法。
public void shotSound() {
this.mediaPlayer = new MediaPlayer(this.hit);
this.mediaPlayer.setVolume(0.1);
this.mediaPlayer.play();
this.mediaPlayer.setOnEndOfMedia(() -> {
this.mediaPlayer.stop();
});
}
这是音效的方法。我什至尝试调整音频的持续时间,但无济于事,它仍然滞后(cpu 使用音频为我的炮塔使用猛增,并随着时间的推移增加到游戏变得无法播放的程度)。所以我问是否有比这样做更好的方法来播放频繁的声音,当然,音频文件比拍摄的执行时间短。我的炮塔在1秒内发射4次,我的音频文件的长度在100毫秒左右,所以应该没有问题。
我错过了什么吗?如有任何建议,我们将不胜感激。
每次拍摄都初始化一个新的 MediaPlayer
是非常低效的。正如@Slaw 在评论中所说, AudioClip
是一个更好的选择。只需确保提前设置好声音即可:不要在每次播放时都初始化 AudioClip
。
AudioClip
的一个重要好处是您可以多次调用它,同时播放声音。如果情况是为战斗中的枪击或激光爆炸提供提示,这是一个很大的优势。此外,AudioClip
允许您以不同的频率播放,因此您可以以略微不同的速度播放相同的声音效果,以模拟许多不同的武器开火,所有这些都在内存中保存一个提示。
Java Clip
与 AudioClip
的相似之处在于声音保存在内存中,可以重放。但不支持同时播放或不同音高播放。我编写了一个名为 AudioCue
的小型库,它允许并发播放并具有实时平移和音高变化,还包括一个可以在声音结束时触发的侦听器。但它只支持 16 位 44100fps 的 wav 文件。我做了一点comparison chart of four different clip-like options.
我正在尝试用 JavaFX 开发塔防。我的游戏运行良好,即使有很多炮塔和敌人,但当我开始使用音效进行塔式射击时,性能会在短时间内显着下降。我尝试过使用不同的方法。
public void shotSound() {
this.mediaPlayer = new MediaPlayer(this.hit);
this.mediaPlayer.setVolume(0.1);
this.mediaPlayer.play();
this.mediaPlayer.setOnEndOfMedia(() -> {
this.mediaPlayer.stop();
});
}
这是音效的方法。我什至尝试调整音频的持续时间,但无济于事,它仍然滞后(cpu 使用音频为我的炮塔使用猛增,并随着时间的推移增加到游戏变得无法播放的程度)。所以我问是否有比这样做更好的方法来播放频繁的声音,当然,音频文件比拍摄的执行时间短。我的炮塔在1秒内发射4次,我的音频文件的长度在100毫秒左右,所以应该没有问题。
我错过了什么吗?如有任何建议,我们将不胜感激。
每次拍摄都初始化一个新的 MediaPlayer
是非常低效的。正如@Slaw 在评论中所说, AudioClip
是一个更好的选择。只需确保提前设置好声音即可:不要在每次播放时都初始化 AudioClip
。
AudioClip
的一个重要好处是您可以多次调用它,同时播放声音。如果情况是为战斗中的枪击或激光爆炸提供提示,这是一个很大的优势。此外,AudioClip
允许您以不同的频率播放,因此您可以以略微不同的速度播放相同的声音效果,以模拟许多不同的武器开火,所有这些都在内存中保存一个提示。
Java Clip
与 AudioClip
的相似之处在于声音保存在内存中,可以重放。但不支持同时播放或不同音高播放。我编写了一个名为 AudioCue
的小型库,它允许并发播放并具有实时平移和音高变化,还包括一个可以在声音结束时触发的侦听器。但它只支持 16 位 44100fps 的 wav 文件。我做了一点comparison chart of four different clip-like options.