在android中播放或暂停多个音频文件

时间:2013-04-30 12:15:48

标签: android android-mediaplayer

我有一个关于在Android中播放/暂停多个音频文件的问题。我们的应用程序使用restful api从服务器加载音频文件。在api中,将有访问音频文件的链接(如http://www.common.com/folder/folder1/file1.mp4)。我们的应用程序将在Android活动的列表视图中列出音频文件的名称。一旦用户点击file1,文件1就开始播放。当用户点击另一个文件时,file1暂停播放并开始播放所点击的文件。这应该发生在所有文件中。

我们的疑问是,我们是否需要使用多个媒体播放器实例来播放不同的音频文件。像每个文件的新MediaPlayer()对象一样?我们可以使用单个MediaPlayer实例来处理这种情况吗? SoundPool在这种情况下有帮助吗?

1 个答案:

答案 0 :(得分:1)

是的,Soundpool如果你想进行这种播放/暂停过程可能会有所帮助。

首先创建一个在活动实例中保留的声音管理器,以及一个将音频文件链接到ID的地图。

// Replace 10 with the maximum of sounds that you would like play at the same time.
SoundPool soundPool = new SoundPool(10, AudioManager.STREAM_MUSIC, 100); 
HashMap<String, Integer> stringToSoundID = new HashMap<String, Integer>();
HashMap<Integer, Integer> soundIdToStreamID = new HashMap<Integer, Integer>();
Integer streamIDbeingPlayed= -1;

然后将所有声音加载到soundPool中,在文件和声音ID之间保持链接。

for(String filePath: Files) {
  int soundID = soundPool.load(filePath, 1);
  stringToSoundID.put(filePath, soundID );
}

然后你可以让你的功能播放/暂停这样的文件:

void playFile(String filePath) {
  if(streamIDbeingPlayed!= -1) {
    soundPool.pause(streamIDbeingPlayed);
  }
  Integer soundID = stringToSoundID.get(filePath);
  Integer streamID = soundIdToStreamID.get(soundID);
  if(streamID == null) {
    streamIDbeingPlayed = soundPool.play (soundID, 1, 1, 1, -1, 1);
    soundIdToStreamID.put(soundID, streamIDbeingPlayed);
  } else {
    soundPool.resume(streamID);
    streamIDbeingPlayed = streamID;
  }
}