Android - 按顺序播放多个声音

时间:2012-07-07 12:31:35

标签: android audio

我需要在活动运行时运行许多小声音。 某些文件每隔固定时间间隔播放一次(例如5秒) 当触摸屏幕时,一旦完成下一次开始(例如sound1,sound2,sound3),一些文件将按顺序播放。

总声音大约是35个短mp3文件(最多3秒)。

实施此方法的最佳方法是什么?

由于

2 个答案:

答案 0 :(得分:1)

MediaPlayer具有PlaybackCompleted状态,因此当一个音频完成后,您就可以开始播放另一个

public void setOnCompletionListener (MediaPlayer.OnCompletionListener listener)

source

我会尝试ThreadAsyncTask分别播放不同的音频线

答案 1 :(得分:1)

SoundPool通常用于播放多个短音。您可以在onCreate()中加载所有声音,并将它们的位置存储在HashMap中。

创建SoundPool

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

SoundPool mSoundPool;
HashMap<Integer, Integer> mHashMap;

@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);
    }
}