gpt4 book ai didi

android - 目前无法在 Android 上实现无缝音频循环

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:25:23 24 4
gpt4 key购买 nike

我几乎尝试了所有方法,但未能在循环播放持续时间为 10-15 秒的单个轨道之间实现无缝音频播放。

我尝试过但失败的步骤:

  1. 不同的音频文件格式 .mp3 .wav .ogg 使用设置循环(真):

    MediaPlayer mp1 = MediaPlayer.create(MainActivity.this, R.raw.track1);
    mp1.setLooping(true);
    mp1.start();
  2. 创建两个媒体播放器并一个接一个循环使用setOnCompletionListener相同的失败循环没有间隙。

  3. 使用 setNextMediaPlayer(nextmp) 一些它是如何工作的,但只有两个循环是可能的。我们必须在前两个循环完成后重新开始准备。

    mp1.start();
    mp1.setNextMediaPlayer(mp2);
  4. 更新:@Jeff Mixon 回答的结果: Mediaplayer looping stops with an error Android .Jeff Mixon 工作正常,但此后仅适用于 10 或 20 个循环,由于一些垃圾收集问题,Mediaplayer 立即停止并留下如下所示的日志。我真的有点被困在这里 2 年了。提前致谢。

    E/MediaPlayer(24311): error (1, -38)
    E/MediaPlayer(23256): Error(1,-1007)
    E/MediaPlayer(23546): Error (1,-2147483648)

最佳答案

根据我所做的测试,这个解决方案工作正常,超过 150 个循环,13 秒 160 kbps MP3 没有任何问题:

public class LoopMediaPlayer {

public static final String TAG = LoopMediaPlayer.class.getSimpleName();

private Context mContext = null;
private int mResId = 0;
private int mCounter = 1;

private MediaPlayer mCurrentPlayer = null;
private MediaPlayer mNextPlayer = null;

public static LoopMediaPlayer create(Context context, int resId) {
return new LoopMediaPlayer(context, resId);
}

private LoopMediaPlayer(Context context, int resId) {
mContext = context;
mResId = resId;

mCurrentPlayer = MediaPlayer.create(mContext, mResId);
mCurrentPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mCurrentPlayer.start();
}
});

createNextMediaPlayer();
}

private void createNextMediaPlayer() {
mNextPlayer = MediaPlayer.create(mContext, mResId);
mCurrentPlayer.setNextMediaPlayer(mNextPlayer);
mCurrentPlayer.setOnCompletionListener(onCompletionListener);
}

private MediaPlayer.OnCompletionListener onCompletionListener = new MediaPlayer.OnCompletionListener() {
@Override
public void onCompletion(MediaPlayer mediaPlayer) {
mediaPlayer.release();
mCurrentPlayer = mNextPlayer;

createNextMediaPlayer();

Log.d(TAG, String.format("Loop #%d", ++mCounter));
}
};
}

要使用LoopMediaPlayer,您只需调用:

LoopMediaPlayer.create(context, R.raw.sample);

关于android - 目前无法在 Android 上实现无缝音频循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27001428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com