繁体   English   中英

如何循环播放我的mediaPlayer,而不会让声音互相播放?

[英]How do I loop threw my mediaPlayer on a delay without having sounds playing over one another?

我正在尝试创建一个应用程序,它将告诉用户“Ready Go”它会给用户两秒钟的设置,然后是随机的一段时间之后,它会说准备好,随后的一段时间后它会说去。 我得到了这个部分工作,但现在我想把它循环到用户只需要按一次按钮,它将继续播放。 然而,当我把它放在一个循环中时,它会立即通过它,并最终同时播放所有“Ready Go”。 我能做些什么来阻止这种情况吗?

public class MainActivity extends AppCompatActivity {
    public Context context;
    MediaPlayer mediaPlayer;
    MediaPlayer mediaPlayer1;

    public void start (View view) {
        play();
    }

    public void play() {
        //When I put a loop here I will get the audio playing over each other, I 
        //also tried to put it in the start method but I get the same result. Is 
        //there another way I should be going about this? Thanks for the help!

        long range = 2000L;
        Random r = new Random();
        long number = (long) (r.nextDouble() * range);
        long range1 = 1500L;
        Random rand = new Random();
        long number1 = (long) (r.nextDouble() * range);

        Handler handler = new Handler();
        handler.postDelayed(new Runnable() {
            @Override
            public void run() {
                Log.i("Info", "Ready");
                mediaPlayer.start();
            }    
        }, 2000 + number);
        Handler handler3 = new Handler();
        handler3.postDelayed(new Runnable() {
            @Override
            public void run() {
                Log.i("Info", "Go");
                mediaPlayer1.start();
            }
        }, 2200 + number + number1);
    }
}

把它放在onCreate方法中

mediaPlayer1.setOnCompletionListener(new OnCompletionListener() {
      @Override
      public void onCompletion(MediaPlayer mp) {
        play();
      }
    });

这将在完成mediaPlayer1再次调用play方法。 播放。

使用CompletionListener代替循环,在play()中调用playAudio1方法。 代码如下,

mediaPlayer1.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            playAudio2();
        }
    });


    mediaPlayer2.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(MediaPlayer mp) {
            playAudio1();
        }
    });

playAudio1和playAudio2方法,

private void playAudio2() {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.i("Info", "Go");
            mediaPlayer1.start();
        }
    }, 2200 + number + number1);
}

private void playAudio1() {
    new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            Log.i("Info", "Ready");
            mediaPlayer1.start();
        }
    }, 2000 + number);
}

在mediaPlayer.start()之前使用mediaPlayer.prepare()或mediaPlayer.prepareAsync()。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM