【问题标题】:AUDIO_OUTPUT_FLAG_FAST denied by client OR E/MediaPlayer: Error (1,-19)AUDIO_OUTPUT_FLAG_FAST 被客户端或 E/MediaPlayer 拒绝:错误 (1,-19)
【发布时间】:2017-05-24 05:55:17
【问题描述】:

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

actorSound = Gdx.audio.newSound(Gdx.files.internal(sound));

上面的代码效果很好,但不幸的是我的其他声音没有。上面的 actor 有自己的类,每次触摸时都会播放不同的声音。

当我尝试在我的游戏屏幕中播放声音时,我收到以下错误:

AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝

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

我想知道为什么 Actor 播放的声音有效而其他声音无效?

我决定尝试将不工作的声音改为音乐,现在它们可以正常播放 - 有一段时间了。我可以玩完整游戏,返回菜单并重新开始新游戏。第二次开始游戏时,我只从游戏屏幕中听到 3 个声音,然后除了演员的声音外,它是无声的。出现的错误如下所示:

E/MediaPlayer:错误 (1,-19)

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

gameSound = Gdx.audio.newMusic(Gdx.files.internal(soundeffect));

我通过阅读以下帖子调查了这两个错误:

AUDIO_OUTPUT_FLAG_FAST denied by client

Mediaplayer error (-19,0) after repeated plays

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

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

当我离开 GameScreen 进入另一个屏幕(例如 MenuScreen 或 RewardScreen)时,我会首先处理 Music。其他屏幕也使用音乐,并在需要时加载声音。当我换回 GameScreen 时,我再次处理,然后开始新游戏...

有什么想法或建议吗?非常感谢任何帮助。

我按照建议添加了 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 方法如下所示:

    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 只会播放第一个声音,然后它似乎会在 NULL 对象引用上崩溃。

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

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

我搜索日志并找到它加载声音的位置:

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);

我仍然在我的日志中发现 AUDIO_OUTPUT_FLAG_FAST 被客户端拒绝,但现在声音正在播放而不是被拒绝。

关于如何解决这个问题的更多想法?

【问题讨论】:

    标签: audio libgdx


    【解决方案1】:

    您的链接包含足够的信息来解决您的错误。

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

    就像在游戏的 onCreate() 方法中创建 Music 实例一样。

    gameSound = Gdx.audio.newMusic(Gdx.files.internal(soundeffect));
    

    Music 拥有play()resume() 和许多其他有用的methods

    你也可以看看this,可能会有帮助。

    【讨论】:

    • 感谢您的回复。我在我的应用程序中添加了一个加载屏幕,它可以加载所有带有进度条的声音。这需要一点时间,所以我更喜欢另一种选择,但我愿意尝试一下。不幸的是,我仍然遇到错误,有些事情似乎效果更好,但肯定不是一切。我会用更多信息更新我的问题。
    • 现在似乎终于可以使用 AssetManager 了。我制作了一种方法来播放我的应用程序中的每一个声音。我发现了一个拒绝加载的小数字,所以我再次记录了它们,现在它可以正常工作了。我还在我的一个屏幕上注意到我忘记添加“this.assets = assets”。仍然有关于 AUDIO_OUTPUT_FLAG 的警告,但只要声音在播放,我就可以忍受。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多