我有很多.mp3短文件,我想一个接一个地播放。我尝试使用onCompletion事件并启动下一个MP3,尽管这会导致两个MP3之间的短暂间隔。
代码如下:
void StartSound() {
mediaplayer = MediaPlayer.create(this, Uri.parse(FILE_PATH + counter + ".mp3"));
try {
mediaplayer.start();
mediaplayer.setOnCompletionListener(new OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mp) {
counter++;
try {
mp.reset();
mp.setDataSource(FILE_PATH + counter + ".mp3");
mp.prepare();
} catch (Exception e) {
e.printStackTrace();
}
mp.start();
}
});
} catch (Exception e) {
}
}
有办法解决这个问题吗?
最佳答案
有办法,但麻烦值不值得就看你了。
基本思想是将mp3文件解码到pcm缓冲区,将它们缝合在一个字节数组中,然后使用AudioTrack
播放。MediaPlayer
并不真正存在无缝MP3播放。不过,这可能是一种痛苦,如果你谈论的是完整的歌曲,可能会出现记忆问题。对于短剪辑,它可能工作,但SoundPool
可能是更好的选择。
如果您只是想缩小一点差距,可以尝试在MediaPlayer
之前准备以下onCompletionListener
对象。而不是等待完成,准备下两个,以便您可以开始播放更快。然后当您点击onCompletion
时,您可以翻转正在使用的对象并start()
。粗双缓冲,在某种程度上。
关于android - 如何在Android中播放一系列简短的mp3文件,而彼此之间没有间隙?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/12976905/