这个问题已被多次询问,但到目前为止,我已尝试过每一个解决方案,包括自定义解决方案,结果并不理想。
我正试图在应用程序中实现一致的无间隙音频循环,到目前为止我只是不一致地实现了它。
我有一个应用程序可循环播放14秒/ 14200毫秒的音频文件。 (我把它们全部输出到.ogg,长度都是一样的。
mediaPlayer.setLooping(真);无论文件格式如何,都无法实现无间隙循环。我为每个解决方案尝试过.mp3,.wav和.ogg。
mediaPlayer1.setOnCompletionListener和2个媒体播放器之间的交替也是如此。
我的自定义解决方案(目前是我最好的解决方案)是:
我计算文件的持续时间(以毫秒为单位)(14200),并启动一个可在14200 - 30毫秒内延迟启动的可运行文件。然后,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();
}
};
这段代码实际上很有效,但不是每次都有。例如,第一个循环可能有一点间隙,但第二个循环完美地超时。我的猜测是,这与实际手机处理代码的时间更长或更短有关。这有意义吗?
我试过了soundpool,它不能用于14秒的文件。
如果有人对CONSISTENT无缝循环14秒文件有任何其他建议,我很乐意听到它们。