LibGdx声音多次加载GameScreen后开始出现错误

我有一个LibGdx游戏,用户在屏幕上点击,声音会播放。 当用户点击屏幕时,一个纹理会“发射”另一个纹理作为导弹,并且可以击中目标,当这个目标“死亡”时,另一个声音将会播放。

我经常在游戏中使用这两个声音,拍摄声音和击中声音。 当我加载游戏时,一切工作正常 – 当我加载1级声音/纹理的多个实例声音没有得到一个错误 – 所以它似乎不涉及内存,因为这个错误可能会出现时我使用的声音/纹理实例较less,但是当我多次加载“游戏画面”时,它开始出现。

错误只与两个声音文件相关,一个是用户点击屏幕时,另一个是“目标”死亡。 所以它只发生在我加载声音很多次。

这个问题只发生在我上级的时候,并且多加载游戏画面。 我反复加载相同的游戏画面,只有更多的“目标”实例。

错误:

W/SoundPool﹕ Sample was not loaded. Waiting for 30ms. W/AudioTrack﹕ AUDIO_OUTPUT_FLAG_FAST denied by client com.mygdx.game.android E/AudioTrack﹕ AudioFlinger could not create track, status: -12 com.mygdx.game.android E/SoundPool﹕ Error creating AudioTrack 

我加载我的声音是这样的:

  Sound playDeadSound; public void playDeadSound(){ soundDead = Gdx.audio.newSound(Gdx.files.internal("dead.ogg")); soundDead.play(); soundDead.dispose(); } 

我已经尝试过的东西

  • 在create方法中实例化声音文件,然后反复使用同一个对象。
  • 我曾尝试调用soundDead.resume(); 而不是play(); 加载声音。
  • 我试图重新采样我的audio到48KHz,并最低(这是约5-8KHz IIRC)。
  • 我试着从40个目标出发,没有出现任何错误,我试图从5个目标开始,当我走高一些,目标是10-15时,错误开始出现。
  • 我试图删除所有其他的声音,除了创建错误的声音之一(拍摄声音/击中声音)。
  • 我试图停下来,然后处理声音,然后创建它,当我打电话。
  • 我已经尝试了两个声音文件,然后一个接一个地调用它们,所以它们不能同时使用。

这些文件每个都是5KB,大约1秒。 任何想法可能会导致此错误? 谢谢!

解:

问题是,当我开始一个新的水平时,我一遍又一遍地重新加载声音,因此,当我在1级时,问题从未发生过。当我在整个应用程序的一生中使用相同的声音时,问题得到了解决。 非常感谢Alesegdia提出的答案。

如果你只是处理声音,你正在尝试播放一些未知的东西。

另外,这是一个糟糕的做法,因为在播放时不断创建和销毁声音,这是不必要的。 试着让游戏结束,把你的声音放在可用的地方,然后在需要时播放或停止。

这是一些草图代码,并不是说这是最好的devise方法。

 public class Sfx { private static Sound deadSound; private static long deadID; public static void Initialize() { deadSound = Gdx.audio.newSound(Gdx.files.internal("deadSound.wav")); deadID = deadSound.play(0); } public static void PlayDeadSound() { deadSound.stop(deadID); deadID = deadSound.play(1f); } } ... // at Game::create(), make sure it's called just **ONCE** Sfx.Initialize(); // somewhere at your game Sfx.PlayDeadSound();