2

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

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

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

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

我的代码:

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();
                }
            }
        }
    });
}
4

1 回答 1

2

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

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();
}
于 2013-05-05T02:37:57.753 回答