gpt4 book ai didi

audio - 客户端OR E/MediaPlayer拒绝AUDIO_OUTPUT_FLAG_FAST:错误(1,-19)

转载 作者:行者123 更新时间:2023-12-03 01:45:08 25 4
gpt4 key购买 nike

我正在使用Libgdx创建游戏。我有很多MP3格式的小声音文件,由于文件太多,所以我不预加载它们。我只加载要使用的声音,就像这样:

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

上面的代码效果很好,但是不幸的是,我的其余声音却没有。上面的 Actor 有自己的职业,每次触摸都会播放不同的声音。

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

AUDIO_OUTPUT_FLAG_FAST denied by client



所有音频文件都具有相同的属性,并且已使用相同的麦克风和Audacity进行了录制。文件均为44100Hz,每个文件只有几kb。

我想知道为什么 Actor 播放声音而其他声音不播放?

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

E/MediaPlayer: Error (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)时,我会首先处理音乐。其他屏幕也使用音乐,并在需要时加载声音。当我回到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中使用Music,则可以正常工作(请参阅注释掉的代码)

在两种情况下,我尝试播放的声音都完全相同。处理我所有 Assets 加载的Assets类包含声音,并且由于我仍然获得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,但是现在声音正在播放而不是被拒绝。

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

最佳答案

您的链接包含有关错误的足够信息。

并不是每次在Game中创建Resource实例,一次创建一次并在整个游戏中全部创建用户的好方法,如果可能,请使用AssetManager

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

gameSound = Gdx.audio.newMusic(Gdx.files.internal(soundeffect));
Music具有 play()resume()和许多其他有用的 methods

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

关于audio - 客户端OR E/MediaPlayer拒绝AUDIO_OUTPUT_FLAG_FAST:错误(1,-19),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44150050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com