2012-12-14 10 views
10

ボタンをタッチした後で音を再生したいと思います。 MediaPlayerは正常に動作しますが、私はこのライブラリが(音楽のような)長い.wav用であることをどこかに読んでいます。短い.wavファイルを再生する - Android

短い.wav(2-3秒)を再生するには、より良い方法がありますか?

+4

[SoundPool'](http://developer.android.com/reference/android/media/SoundPool.html)が行く方法です。 – kcoppock

答えて

24

SoundPoolは、このための正しいクラスです。以下のコードは、それを使用する方法の例です。それは私がサウンドを管理するために私のいくつかのアプリケーションで使用するコードでもあります。あなたは好きなように(またはメモリが許す限り)音を出すことができます。

public class SoundPoolPlayer { 
    private SoundPool mShortPlayer= null; 
    private HashMap mSounds = new HashMap(); 

    public SoundPoolPlayer(Context pContext) 
    { 
     // setup Soundpool 
     this.mShortPlayer = new SoundPool(4, AudioManager.STREAM_MUSIC, 0); 


     mSounds.put(R.raw.<sound_1_name>, this.mShortPlayer.load(pContext, R.raw.<sound_1_name>, 1)); 
     mSounds.put(R.raw.<sound_2_name>, this.mShortPlayer.load(pContext, R.raw.<sound_2_name>, 1)); 
    } 

    public void playShortResource(int piResource) { 
     int iSoundId = (Integer) mSounds.get(piResource); 
     this.mShortPlayer.play(iSoundId, 0.99f, 0.99f, 0, 0, 1); 
    } 

    // Cleanup 
    public void release() { 
     // Cleanup 
     this.mShortPlayer.release(); 
     this.mShortPlayer = null; 
    } 
} 

あなたが呼び出すことで、これを使用します。

SoundPoolPlayer sound = new SoundPoolPlayer(this); 

をあなたの活動の中でのonCreate()(またはいつでも後)。あなたが音で終わったら

sound.playShortResource(R.raw.<sound_name>); 

最後に、呼び出し:その後、音の単純なコールを再生するには

sound.release(); 

は、リソースを解放します。

+0

それはうまく動作しますが、私は2つの質問があります。 1.私は毎回(MediaPlayerのように)使用した後にリベースする必要があります。 2.サンプルを止める方法はありますか? – CookieMonssster

+0

あなたはアプリケーションセッション全体のサウンドを再生したときにのみそれをリリースする必要があります(onDestroy()は良い選択です)。 SoundPoolsの[pause()メソッド](http://developer.android.com/reference/android/media/SoundPool.html#pause(int))を使用するpause()メソッドを追加できます。 –

+0

これはとても簡単でした。 FWIW、Eclipseは、より良いパフォーマンスのために 'mSounds'に' SparseIntArray() 'を提案しました。 –

関連する問題