2017-05-24 14 views
0

私はLibgdxを使用してゲームを作成しています。私は、MP3形式でたくさんの小さなサウンドファイルを持っています。AUDIO_OUTPUT_FLAG_FASTがクライアントまたはE/MediaPlayerによって拒否されました:エラー(1、-19)

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

上記のコードは素晴らしい作品が、私の音の残りの部分は、残念ながらない:私は、私はそれがこのように、使用するときに再生するサウンドをロードします。上記の俳優は、独自のクラスを持ち、触れるたびに異なる音を出します。

私は私のGamescreenでサウンドを再生しようとすると、私は次のエラーを取得する:

AUDIO_OUTPUT_FLAG_FAST denied by client

はすべてaudiofilesは同じ性質を持ち、同じマイク&はAudacityを使用して記録されています。ファイルはすべて44100Hzで、サイズはわずか数kbです。

私は俳優が演奏する音が他の音とは違うのはなぜですか?

私は、代わりに音楽に変わってしまう音を音楽に変えようと決心しましたが、今はうまくいきます。私は完全なゲームをプレイし、メニューに戻り新しいゲームを再開することができます。ゲームを2回目にすると、ゲーム画面から3つのサウンドしか得られず、俳優からのサウンド以外はサイレントです。私はこれらのように読んで投稿によって2つのエラーに見てきました

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

私は音とちょうど同じように音楽を読み込む

E/MediaPlayer: Error (1,-19)

:表示されたエラーは、このようになります。

AUDIO_OUTPUT_FLAG_FAST denied by client

Mediaplayer error (-19,0) after repeated plays

しかし私は自分の問題を解決するために何をやるべきか、あるいは何を変えるべきか分かりません。可能であればサウンドが好きですが、音楽は許容可能な回避策です...

音楽に関して言えば、おそらくURLにはメディアプレイヤーはリリースされていません。私はそれをどうやって行うのか分からないのですか?

GameScreenを別の画面(MenuScreenやRewardScreenなど)にしておくと、まずMusicを処分します。他の画面でも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で音楽を使用しての私のコードを変更した場合、それが正常に動作します(アウトcommmentedされているコードを参照してください)

音はどちらの場合もまったく同じです。すべての私の資産の読み込みを処理するAssetsクラスにはサウンドが含まれていますが、まだNULLオブジェクトがあるので、1つ以上のアイテムが読み込まれないと思いますか?

私はログを検索し、それが音をロードするところこれを見つける:

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を見つけることが、今の音があることの代わりにプレイしている

拒否されました。

これ以上解決する方法はありませんか?

答えて

0

あなたのリンクはあなたのバグに十分な情報を持っています。

ゲームで毎回リソースインスタンスを作成するのは良い方法ではありません。あなたのゲーム全体で1度だけ作成してください。可能であればAssetManagerを使用してください。

同じようにゲームのonCreate()の方法でMusicインスタンスを作成します。

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

Musicplay()resume()および他の多くの有用なmethodsを持ちます。

thisもご覧ください。役立つかもしれません。

+0

ご返信ありがとうございます。プログレスバーを持つすべてのサウンドを読み込む読み込み画面をアプリケーションに追加しました。しばらく時間がかかりますので、別のオプションを選ぶことをお勧めしましたが、これを適切に試してみます。私はまだ残念ながらエラーが発生しますが、いくつかのことはうまくいくようですが、確かにすべてではありません。私はより多くの情報で私の質問を更新します。 – Arnulf

+0

最後に、AssetManagerを使用して動作するようです。私は自分のアプリでそれぞれの音を演奏する方法を作りました。私はロードすることを拒否する小さな番号を見つけたので、私はそれらをもう一度記録し、今は正常に動作します。私はまた私の画面の一つで、 "this.assets = assets"を追加するのを忘れていたことに気づいた。 AUDIO_OUTPUT_FLAGについての警告はまだありますが、サウンドが再生されている限り、それを存続させることができます。 – Arnulf

関連する問題