即使MediaPlayer已经在播放声音,如何在单击按钮时播放声音?

时间:2019-06-03 08:05:51

标签: android button audio android-mediaplayer

单击按钮时,我编写了一些代码来播放简单的声音。我希望该声音甚至可以使用同一按钮在以前创建的声音上播放(例如,如果用户反复快速地单击该按钮。

现在,在完全创建完先前创建的声音之前,代码不会播放任何声音。

我尝试在单击按钮时先执行player.pause()然后是player.seekTo(0),但是随后创建的声音被切断了。这不是我想要的。我希望所有声音都能全部完成。如果第一个声音仍在播放,我希望声音2(第二次快速按下按钮)在顶部播放(与声音3、4相同(用户可以在第一个声音结束之前单击5-6次。)我应该设定为6吗? mediaPlayer对象和onclick检查1st是否正在播放,如果正在播放2,如果2正在播放,则3,等等...?必须有一种更有效的方法。

此代码在之前的声音完全播放完之前不会播放声音:

    button = findViewById(R.id.button);
    player1 = MediaPlayer.create(this, R.raw.kick1);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player1.start();
            return;
        }
    });

此代码会切断以前创建的声音:

    button = findViewById(R.id.button);
    player1 = MediaPlayer.create(this, R.raw.kick1);

    button.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View v) {
            player1.pause();
            player1.seekTo(0);
            player1.start();
            return;
        }
    });

如何在每次单击时播放声音并与以前创建的声音重叠? (如果用户足够快地单击按钮,则需要这样做)?

2 个答案:

答案 0 :(得分:0)

您每次要播放声音时都必须创建一个新播放器,请尝试此操作。我没有测试。

button = findViewById(R.id.button);

button.setOnClickListener(new View.OnClickListener() {
    @Override
    public void onClick(View v) {
        MediaPlayer player = MediaPlayer.create(this, R.raw.kick1);
        player.start();
    }
});

答案 1 :(得分:0)

Dinesh的答案差不多存在,只是您需要保留创建的MediaPlayer。

MediaPlayer mPlayer = null;

    if (mPlayer != null && mPlayer.isPalying()) {
      mPlayer.stop();
      ...
    }
    mPlayer = MediaPlayer.create(mContext, raw);
    ...

因为如果您播放不同的原始文件,则会创建一个不同的MediaPlayer。