单击按钮时,我编写了一些代码来播放简单的声音。我希望该声音甚至可以使用同一按钮在以前创建的声音上播放(例如,如果用户反复快速地单击该按钮。
现在,在完全创建完先前创建的声音之前,代码不会播放任何声音。
我尝试在单击按钮时先执行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;
}
});
如何在每次单击时播放声音并与以前创建的声音重叠? (如果用户足够快地单击按钮,则需要这样做)?
答案 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。