我有很多.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/

10-15 00:48