Audio 客户端或E/MediaPlayer拒绝音频输出标志快速:错误(1,-19)

Audio 客户端或E/MediaPlayer拒绝音频输出标志快速:错误(1,-19),audio,libgdx,Audio,Libgdx,我正在使用Libgdx创建一个游戏。我有很多MP3格式的小声音文件,因为太多了,所以我没有预先加载它们。我只在使用时加载我想要播放的声音,如下所示: actorSound = Gdx.audio.newSound(Gdx.files.internal(sound)); public void DelayedSounds(){ timer = timer + Gdx.graphics.getDeltaTime(); if(playitem == true &&am

我正在使用Libgdx创建一个游戏。我有很多MP3格式的小声音文件,因为太多了,所以我没有预先加载它们。我只在使用时加载我想要播放的声音,如下所示:

actorSound = Gdx.audio.newSound(Gdx.files.internal(sound));
    public void DelayedSounds(){
    timer = timer + Gdx.graphics.getDeltaTime();
    if(playitem == true && timer > 2){
        itemsound = "vinster/" + item + ".mp3";
        assets.manager.get(itemsound, Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal(itemsound));
        //sound.setVolume(volume);
        //sound.play();
        playitem = false;
    }
    if(playkeep == true && time > 3){
        assets.manager.get("dialog/VINSTEN.mp3", Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal("prizes/prize.mp3"));
        //sound.setVolume(volume);
        //sound.play();
        playkeep = false;
    }
}
上面的代码工作得很好,但我的其他声音却不太好。上面的演员有自己的职业,每次被触摸时都会播放不同的声音

当我尝试在游戏屏幕中播放声音时,我会出现以下错误:

06-02 07:47:09.774 6208-6282E/AndroidRuntime: FATAL EXCEPTION: GLThread 2935

Process: PID: 6208

java.lang.NullPointerException: Attempt to read from field 'com.badlogic.gdx.assets.AssetManager 
Assets.Assets.manager' on a null object reference
at DelayedSounds(RewardsScreen.java:538)  
at RewardsScreen.Update(RewardsScreen.java:567)
at Screens.RewardsScreen.render(RewardsScreen.java:577)
at Game.render(Game.java:46)
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:459)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1562)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1262)
06-02 07:47:13.823 6208-6208 E/AndroidGraphics: waiting for pause 
synchronization took too long; assuming deadlock and killing
音频\u输出\u标志\u快速被客户端拒绝

所有音频文件都具有相同的属性,并使用相同的麦克风和Audacity录制。这些文件都是44100Hz,每个文件的大小只有几kb

我想知道为什么演员扮演的声音起作用而其他声音不起作用

我决定试着把不工作的声音改成音乐,现在它们播放得很好——暂时就是这样。我可以玩一个完整的游戏,返回菜单并重新开始一个新游戏。当我第二次开始游戏时,我从游戏屏幕上只听到3种声音,然后除了演员的声音外,它是无声的。出现的错误如下所示:

actorSound = Gdx.audio.newSound(Gdx.files.internal(sound));
    public void DelayedSounds(){
    timer = timer + Gdx.graphics.getDeltaTime();
    if(playitem == true && timer > 2){
        itemsound = "vinster/" + item + ".mp3";
        assets.manager.get(itemsound, Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal(itemsound));
        //sound.setVolume(volume);
        //sound.play();
        playitem = false;
    }
    if(playkeep == true && time > 3){
        assets.manager.get("dialog/VINSTEN.mp3", Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal("prizes/prize.mp3"));
        //sound.setVolume(volume);
        //sound.play();
        playkeep = false;
    }
}
E/MediaPlayer:错误(1,-19)

我加载音乐的方式与加载声音的方式相同:

gameSound = Gdx.audio.newMusic(Gdx.files.internal(soundeffect));
我通过阅读下面的文章来研究这两个错误:

但我不知道该怎么做或改变来解决我的问题。如果可能的话,我更喜欢声音,但音乐是可以接受的解决方法

说到音乐,可能正如URL中所建议的,我不会发布媒体播放器。我不知道该怎么做

当我离开游戏屏幕进入另一个屏幕时,比如菜单屏幕或奖赏屏幕,我会先处理音乐。其他屏幕也使用音乐,并且在需要时加载声音。当我切换回游戏屏幕时,我再次处理,然后开始一个新游戏

有什么想法或建议吗?非常感谢您的帮助

我按照建议添加了AssetManager,现在我有了一个加载所有声音的存储屏幕。我把它们当作声音而不是音乐来加载,这是我喜欢的方式

这些声音在实际游戏中效果很好,但一旦我进入奖励屏幕,只会播放第一个声音,然后应用程序崩溃,出现以下错误:

06-02 07:47:09.774 6208-6282E/AndroidRuntime: FATAL EXCEPTION: GLThread 2935

Process: PID: 6208

java.lang.NullPointerException: Attempt to read from field 'com.badlogic.gdx.assets.AssetManager 
Assets.Assets.manager' on a null object reference
at DelayedSounds(RewardsScreen.java:538)  
at RewardsScreen.Update(RewardsScreen.java:567)
at Screens.RewardsScreen.render(RewardsScreen.java:577)
at Game.render(Game.java:46)
at com.badlogic.gdx.backends.android.AndroidGraphics.onDrawFrame(AndroidGraphics.java:459)
at android.opengl.GLSurfaceView$GLThread.guardedRun(GLSurfaceView.java:1562)
at android.opengl.GLSurfaceView$GLThread.run(GLSurfaceView.java:1262)
06-02 07:47:13.823 6208-6208 E/AndroidGraphics: waiting for pause 
synchronization took too long; assuming deadlock and killing
DelayedSounds方法如下所示:

actorSound = Gdx.audio.newSound(Gdx.files.internal(sound));
    public void DelayedSounds(){
    timer = timer + Gdx.graphics.getDeltaTime();
    if(playitem == true && timer > 2){
        itemsound = "vinster/" + item + ".mp3";
        assets.manager.get(itemsound, Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal(itemsound));
        //sound.setVolume(volume);
        //sound.play();
        playitem = false;
    }
    if(playkeep == true && time > 3){
        assets.manager.get("dialog/VINSTEN.mp3", Sound.class).play(volume);
        //sound = Gdx.audio.newMusic(Gdx.files.internal("prizes/prize.mp3"));
        //sound.setVolume(volume);
        //sound.play();
        playkeep = false;
    }
}
可以看出,我现在使用AssetManager,并且出于测试目的注释掉了我的旧代码。我在主类中定义AssetManager,然后将其传递给所有其他使用声音的类。 RewardsScreen将只播放第一个声音,然后它会在一个空对象引用上崩溃

如果我将代码改回使用RewardsScreen中的音乐,它可以正常工作(请参阅注释中的代码)

在这两种情况下,我尝试播放的声音完全相同。处理我所有资产加载的Assets类包含声音,并且由于我仍然得到一个空对象,我假设一个或多个项目无法加载

我搜索日志并在加载声音的地方找到:

06-02 08:05:09.360 9844-9888/E/WVMExtractor: Failed to open libwvm.so: dlopen failed: library "libwvm.so" not found
06-02 08:05:09.395 9844-9888/ E/NdkMediaExtractor: sf error code: -1010
06-02 08:05:09.395 9844-9888/ E/SoundPool: Unable to load sample
也许这和我的问题有关? 我以相同的方式加载所有声音,而且最确定的是,加载是正常的:

    manager.load("prizes/cash.mp3", Sound.class);
我仍然在我的日志中发现客户端拒绝了音频输出标志,但现在声音正在播放,而不是被拒绝


关于如何解决这个问题还有什么想法吗?

你的链接中有足够的信息来解决你的bug

在游戏中每次创建资源实例,创建一次并在游戏中使用用户,如果可能的话,这不是一个好方法

比如在游戏的
onCreate()
方法中创建
Music
实例

gameSound = Gdx.audio.newMusic(Gdx.files.internal(soundeffect));
音乐
具有
play()
resume()
和许多其他有用的功能


您也可以查看,可能会有所帮助。

谢谢您的回复。我在我的应用程序中添加了一个加载屏幕,可以加载所有的声音,并且还有一个进度条。这需要一点时间,所以我会选择另一个选择,但我愿意给这个适当的尝试。不幸的是,我仍然会犯错误,有些事情似乎做得更好,但肯定不是所有的事情。我将用更多信息更新我的问题。现在终于可以使用AssetManager了。我制作了一个方法,可以播放我应用程序中的每个声音。我发现了一个拒绝加载的小数字,所以我再次记录了它们,现在它工作正常。我还注意到,在我的一个屏幕上,我忘记添加“this.assets=assets”。还有一个关于音频输出标志的警告,但我可以接受,只要声音还在播放。