【问题标题】:How to remove the gap between lopping an audio file Android如何消除Android音频文件之间的差距
【发布时间】:2013-05-05 10:37:57
【问题描述】:

我正在尝试播放音频文件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();
                }
            }
        }
    });
}

【问题讨论】:

  • nmaxCount 是全局声明的。
  • 添加线程和可运行处理程序以在第一个音频完成几毫秒之前播放第二个音频文件。

标签: android loops android-mediaplayer


【解决方案1】:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2011-07-05
  • 2011-11-16
  • 2018-11-20
  • 1970-01-01
  • 1970-01-01
  • 2011-11-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多