2011-12-30 26 views
3

SoundPoolで2つのサウンドを再生しようとしています。Android:SoundPoolで無限にサウンドを再生すると、停止後に2回目が再生されない

次のテストコードは、サウンドなしで2番目の再生をレンダリングしました。 この現象は、HTC Heroデバイスとエミュレータの両方で、無限にサウンドを再生した場合にのみ発生します。私はアンドロイド1.6を使用しています。

最初の音のために、あなたのコード内でこの行を見ると
... 
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
int soundId1 = soundPool.load(getApplicationContext(), R.raw.sound1, 1); 
int soundId2 = soundPool.load(getApplicationContext(), R.raw.sound2, 1); 

// the first one plays 
int streamId = soundPool.play(soundId1, 1.0f, 1.0f, 1, -1, 1.0f); 
try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
soundPool.stop(streamId); 

// the second one doesn't play 
streamId = soundPool.play(soundId2, 1.0f, 1.0f, 1, -1, 1.0f); 
try { 
    Thread.sleep(3000); 
} catch (InterruptedException e) { 
    // TODO Auto-generated catch block 
    e.printStackTrace(); 
} 
soundPool.stop(streamId); 
... 

答えて

0

...

int streamId = soundPool.play(sound1, 1.0f, 1.0f, 1, -1, 1.0f);

According to this link、第五パラメータは、ループモードを定義します。 ループなしまたは-1 for for forever。あなたのコードは-1と言っています。そのため、最初のサウンドは永遠にループしているので、2番目のサウンドは再生されません。最初の音のループ・モードを無音に変更してみてください。 0

編集:私はあなたの問題を知っていると思います。サウンドを再生しようとすると、サンプルは準備ができていないため、onLoadCompleteListenerを実装して、準備ができたらサンプルを再生する必要があります。例。

SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 0); 
soundPool.setOnLoadCompleteListener(new OnLoadCompleteListener() { 

     @Override 
     public void onLoadComplete(SoundPool soundPool, int sampleId, 
          int arg2) { 
       streamId = soundPool.play(sampleId, 1.0f, 1.0f, 1, -1, 1.0f); 
       } 

     }); 
    int soundId1 = soundPool.load(getApplicationContext(), R.raw.tick, 1);  
    int soundId2 = soundPool.load(getApplicationContext(), R.raw.tock, 1); 

これらのサウンドがロードされた後、それらが再生されます。私はこれをテストし、両方のサウンドが再生される前にロードされていることをリスナーが保証しているため、サウンドが再生されます。

このコードを自分のものに統合すると、問題が解決するはずです。そうでない場合は、私に知らせて、私は別の解決策を見つけることを試みるでしょう:)

+0

どういう意味ですか?最初のサウンドは無限ループで再生されますが、2番目のサウンドを再生する前に停止します。コードを見てください。 – Genry

+0

@goryachevそれについては気にしないで、これはどうですか?アンドロイドのドキュメントでは、playメソッドの最初のパラメータは、loadメソッドから返されるものでなければならないと言います。あなたのコードでは、 'soundId1'と' soundId2'はあなたが演奏で使うべき変数ですが、代わりに 'sound1'とsound2'を使っていますか...それとも単に打ち間違いですか? – Ogen

+0

はい、これはタイプミスです。ありがとう。質問が更新されました。 – Genry

関連する問題