Java 声音只能播放一次,但应播放两次
我正在用闪存卡构建一个应用程序。当您单击“下一步”按钮时,它会播放一个声音(卡的名称),如果您单击卡,它也会播放相同的声音。唯一的问题是,当我点击“下一步”按钮时,它会同时播放两次声音,使声音听起来像机器人。我想我两次呼叫的声音是偶然的,但我不知道在哪里或如何修复它。我已经到处找了,但找不到解决办法。Java 声音只能播放一次,但应播放两次,java,android,Java,Android,我正在用闪存卡构建一个应用程序。当您单击“下一步”按钮时,它会播放一个声音(卡的名称),如果您单击卡,它也会播放相同的声音。唯一的问题是,当我点击“下一步”按钮时,它会同时播放两次声音,使声音听起来像机器人。我想我两次呼叫的声音是偶然的,但我不知道在哪里或如何修复它。我已经到处找了,但找不到解决办法。 这是我的密码: private String[] soundfile={"aa.m4a","bb.m4a... public void onClick(View arg0) {... //
这是我的密码:
private String[] soundfile={"aa.m4a","bb.m4a...
public void onClick(View arg0) {...
//when btnplay is clicked
else if(arg0.getId()==R.id.imagenumber){
//call the method playsound
playSound(soundfile[screennumber].toString());
}//end btnsound clicked
//begin changeCard
private void changeCard(int screen){
switch (screen){
case 0: imagenumber.setImageResource(aa);
mediap2 = MediaPlayer.create(this, R.raw.aa);
break;...
mediap2.start();
}//end changeCard
//begin playSound on click
public void playSound(String soundName){
Boolean mpPlayingStatus;
try{//try to check MediaPlayer status
mpPlayingStatus=mp.isPlaying();
}
catch (Exception e){
mpPlayingStatus=false;
}
if(mpPlayingStatus==true){//if the MediaPlayer is playing a voice, stop it to play new voice
mp.stop();
mp.release();//remove sound from memory
}
else{
try
{
mp = new MediaPlayer();
AssetFileDescriptor afd = getAssets().openFd(soundName);
mp.setDataSource(afd.getFileDescriptor(), afd.getStartOffset(), afd.getLength());
mp.prepare();
mp.start();//play sound
}//try block
catch(Exception e) {
Log.i("Error playing sound: ", e.toString());
}
}
}//end playSound
谢谢你的帮助 噢,哇。我想出来了。这段时间我一直认为这完全是声音本身的问题,但事实证明问题就在这里:
if(arg0.getId()==R.id.btnprevious){
screennumber--;//minus 1 to the screennumber
changeNumber(screennumber);
if(screennumber==0){
//disable btnprevious
btnprevious.setEnabled(false);
}else{
//enable btnprevious
btnprevious.setEnabled(true);
}
changeNumber(screennumber);
btnnext.setEnabled(true);
}
在这里我调用了changeNumber(屏幕号码);
btnnext.setEnabled(真)代码>
两次。愚蠢的错误。无论如何,谢谢你的帮助 注意:如果它正在运行,您将停止但不会启动新声音。您正在使用if-else
。评论还说,它确实播放了新的声音。我的问题是,当我按下按钮时,它同时在两个地方播放相同的声音。因此,我认为启动MediaPlayer有两种方法,一种是changeCard
,另一种是playSound
。如果您确定这些不是一起调用的,您可以使用调试器检查代码传递的位置,或者使用日志查看代码传递的位置。据我所见,这是正确的