0

また、私は常にそれを再インスタンス化する必要がありますか?同じインスタンスからサウンドリソース(MediaPlayer)を複数回同時に再生できる方法はありますか?

私は、船が爆破するたびに爆発するサウンドファイルを持っていますが、同時に3つ以上の船が同時に爆破することがありますので、同じサウンドクリップを重ねてください。私は、新しいインスタンスを作成しない限り、そうしないことに気付きます。私が行方不明のものがあるのか​​、それを行う唯一の方法なのでしょうか?

//declaration 
private final MediaPlayer[] explosionSound = new MediaPlayer[5]; 

//constructor 
for (int i = 0; i < 5; i++) 
{ 
    explosionSound[i] = MediaPlayer.create(app, R.raw.explosion); 
} 

//in program where I want to use it (when I want to play the sound) 
for (int i = 0; i < 5; i++) 
{ 
    if (!explosionSound[i].isPlaying()) 
    { 
     explosionSound[i].start(); 
     break; 
    } 
} 

//onDestroy() method to release the media 
for (int i = 0; i < 5; i++) 
{ 
    explosionSound[i].release(); 
} 

私は匿名で新しいものをインスタンス化しようとしたが、それは(あなたがonDestroy()メソッドでそれを解放するときにエラーが消える)にリリースされていないことについて不平を言いました。私はすぐにそれを解放することはできませんし、そうでなければ、音はまったく再生されません。私は自分自身を5つの爆発に制限したくない。今私はメモリ問題についても心配しています。

これを行う簡単な方法はありますか?

答えて

1

MediaPlayerは、実際に小さくて重なっているオーディオクリップの問題を解決するものではありません。これは、オーディオとビデオの両方で長時間実行されるメディアのためのものです。

あなたの特定の状況に適したツールは、SoundPoolです。このツールは、お客様のために特別に設計されています。

+0

私はSoundPoolを使用することに気付きました。私はまた、API21を必要とするAudioAttributesを使用する必要があります。今、MediaPlayerでは、私の8つの最小APIが動作します。 SoundPoolはAPI 21以上を必要とする唯一のオプションですか?私のアプリは古い携帯電話でも動作するようにしたい。 –

+0

SoundPoolのすべてのメソッドはAPIレベル8以降で使用できます。あなたは私がリンクしているドキュメントの中でそれを見ることができます。 –

関連する問題