循环音频文件的问题

时间:2013-05-05 05:35:57

标签: android loops audio media-player android-mediaplayer

如何从mp.setLooping(true)获得重复的值。我可以使用OnCompletionListener来获得重复次数,但它在循环之间产生1秒的延迟,这在面向音乐的应用程序中很烦人。 OnCompletionListener循环不顺畅{。}}。

有什么建议吗?提前谢谢。

循环之间有1秒延迟或间隙的代码:

mp.setLooping(true)

1 个答案:

答案 0 :(得分:3)

试试这个:

MediaPlayer mp1;
double play_times = 10;
int sound_length;
Handler handler;
boolean sound_playing = false;
int times_played = 0;

public void onCreate(Bundle b) {
    super.onCreate(b);
    setContentView(R.layout.home);
    handler = new Handler();
    mp1 = MediaPlayer.create(this, R.raw.soundfile);
    sound_length = mp1.getDuration();
    mpplay();

}
private void mpplay() {
    times_played = 0;
    mp1.setLooping(true);
    mp1.start();
    sound_playing = true;
    handler.postDelayed(loop_stopper, (int)(sound_length*(play_times-.5)));
    handler.postDelayed(counter, sound_length);

}
private Runnable loop_stopper = new Runnable() {
    public void run() {
        sound_playing = false;
        mp1.setLooping(false);
    }
};
private Runnable counter = new Runnable() {
    public void run() {
        if (sound_playing) {
            times_played++;
            handler.postDelayed(counter, sound_length);
        }
    }
};

handler.postDelayed(loop_stopper,(int)(sound_length *(play_times-.5)));

此行将在最后一个所需循环中途停止循环。因为这只是意味着它不会继续循环,所以声音文件仍会在最后一次重复播放时完全播放。

相关问题