android - 如何消除 Android 音频文件剪切之间的间隙

标签 android loops android-mediaplayer

我正在尝试播放音频文件 x 次,并向用户显示 x 的值。我的问题是我可以使用 mp.setLooping(true) 来循环播放音频,循环之间没有任何间隙,但我无法处理它的重复次数。所以我使用了 OnCompletionListener 一切都很好,但它在每次重复的结束或开始时产生 1 秒的间隙。

如果我使用mp.setLooping(true),则循环之间没有间隙。

如果我使用OnCompletionListener,循环之间会有明显的差距。

该差距仅在 Android 4.x.x 和 3.x.x 上产生。我怎样才能摆脱这个差距?提前致谢..

我的代码:

int n = 1;
int maxCount = 15; //This value changes according to user input.
private void mpplay() {
    // TODO Auto-generated method stub
    mp.start();
    mp.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n <= maxCount) {
                mp.start();
                n++;
                tv.setText("Counter:" + n);
                if (n >= maxCount) {
                    n = 1;
                    mp.stop();
                }
            }
        }
    });
}

最佳答案

您可以尝试使用两个媒体播放器:

int n = 1;
int maxCount = 15; //This value changes according to user input.

MediaPlayer mp1 = new MediaPlayer();
mp1.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n <= maxCount) {
                mp2.start();
                mp1.setDataSource(<File>);
                mp1.prepare();
                n++;
                tv.setText("Counter:" + n);
                if (n >= maxCount) {
                    n = 1;
                    mp2.stop();
                }
            }
        }
    });


MediaPlayer mp2 = new MediaPlayer();
mp2.setOnCompletionListener(new OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            if (n <= maxCount) {
                mp1.start();
                mp2.setDataSource(<File>);
                mp2.prepare();
                n++;
                tv.setText("Counter:" + n);
                if (n >= maxCount) {
                    n = 1;
                    mp1.stop();
                }
            }
        }
    });

private void mpplay() {
    mp1.setDataSource(<File>);
    mp1.prepare();
    mp1.start();
}

关于android - 如何消除 Android 音频文件剪切之间的间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16371718/

相关文章:

java - 媒体播放器不播放音频

swift - 如何延迟迭代

java - 尝试用随机值填充 boolean 矩阵

安卓媒体播放器 : onErrorListener and onCompletionListener working ab-normally

java - Android MediaPlayer 错误(在状态 1 中开始调用;错误 (-38, 0);错误 (-38,0))

Android Exoplayer : What is 'playWhenReady' in "onPlayerStateChanged(boolean playWhenReady, int playbackState)" method

Android:使用替代支付服务

android - 如何在Android应用程序中与shell(BusyBox)交互

java - 小部件未更新?

c++ - C++ 中循环的替代方案