Android Gapless Audio Looping

use*_*720 5 java audio android

这个问题已被问过几次,但到目前为止,我已经尝试过每一个解决方案,包括自定义的解决方案,结果并不理想.

我试图在应用程序中实现一致的无间隙音频循环,到目前为止我只是不一致地实现了它.

我有一个应用程序循环音频文件,长度为14秒/ 14200毫秒.(我把它们全部输出到.ogg,长度都是一样的.

mediaPlayer.setLooping(真); 无论文件格式如何,都无法实现无间隙循环.我为每个解决方案尝试过.mp3,.wav和.ogg.

mediaPlayer1.setOnCompletionListener也是如此,并且在两个媒体播放器之间交替.

我的自定义解决方案(目前是我最好的)是这样的:

我计算文件的持续时间(毫秒)(14200)并启动一个可在14200 - 30毫秒内延迟启动的runnable.然后,play3 runnable将启动mediaplayer1并继续循环.

相关代码:

    durationHandler.postDelayed(play2, mediaPlayer1.getDuration() - 30);
    mediaPlayer1.start();

}

private Runnable play2 = new Runnable() {
    public void run() {
        durationHandler.postDelayed(play3, mediaPlayer2.getDuration() - 30);
            mediaPlayer2.start();

    }
};
Run Code Online (Sandbox Code Playgroud)

这段代码实际上很有效,但不是每次都有.例如,第一个循环可能有一点间隙,但第二个循环完美地超时.我的猜测是,这与实际手机处理代码的时间更长或更短有关.那有意义吗?

我尝试了soundpool,它不适用于14秒的文件.

如果有人对CONSISTENT无缝循环14秒文件有任何其他建议,我很乐意听到它们.