2

アクティビティの実行中に、多くの小さなサウンドを実行する必要があります。一部のファイルは、一定の時間間隔 (例: 5 秒) ごとに再生されます。一部のファイルは、画面をタッチすると、次の開始 (例: サウンド 1、サウンド 2、サウンド 3) が終了すると、シーケンスで再生されます。

総サウンドは約 35 の短い mp3 ファイル (最大 3 秒) です。

これを実装する最良の方法は何ですか?

ありがとう

4

2 に答える 2

2

通常、 SoundPoolは、複数の短いサウンドを再生するために使用されます。すべてのサウンドを onCreate() にロードして、それらの位置を HashMap に保存することができます。

サウンドプールの作成

public static final int SOUND_1 = 1;
public static final int SOUND_2 = 2;

SoundPool mSoundPool;
HashMap<Integer, Integer> mSoundMap;

@Override
public void onCreate(Bundle savedInstanceState){
  mSoundPool = new SoundPool(2, AudioManager.STREAM_MUSIC, 100);
  mSoundMap = new HashMap<Integer, Integer>();

  if(mSoundPool != null){
    mSoundMap.put(SOUND_1, mSoundPool.load(this, R.raw.sound1, 1));
    mSoundMap.put(SOUND_2, mSoundPool.load(this, R.raw.sound2, 1));
  }
}

次に、サウンドを再生する必要がある場合は、サウンドの定数値を使用して単純に playSound() を呼び出します。

/*
*Call this function from code with the sound you want e.g. playSound(SOUND_1);
*/
public void playSound(int sound) {
    AudioManager mgr = (AudioManager)mContext.getSystemService(Context.AUDIO_SERVICE);
    float streamVolumeCurrent = mgr.getStreamVolume(AudioManager.STREAM_MUSIC);
    float streamVolumeMax = mgr.getStreamMaxVolume(AudioManager.STREAM_MUSIC);
    float volume = streamVolumeCurrent / streamVolumeMax;  

    if(mSoundPool != null){
        mSoundPool.play(mSoundMap.get(sound), volume, volume, 1, 0, 1.0f);
    }
}
于 2012-07-07T16:03:13.647 に答える
1

MediaPlayer状態がPlaybackCompletedあるため、1 つのオーディオが終了したら、別のオーディオの再生を開始できます。

public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)

ソース

そして、私は別のオーディオラインを別々に再生しようThreadとしますAsyncTask

于 2012-07-07T12:40:53.403 に答える