2017-01-02 11 views
0

私はフラッシュカードでアプリを構築しています。 「次へ」ボタンをクリックすると、サウンド(カードの名前)が再生され、カードをクリックすると同じサウンドが再生されます。唯一のことは、「次へ」ボタンをクリックすると同時に音を2回再生し、同時にロボットに聞こえることです。私は事故で音を2回呼んでいると仮定していますが、どこで修正するかは分かりません。私はその場所全体を見てきましたが、これを修正する方法を見つけることができません。助けのためのサウンドは一度しか再生されず、代わりに2回再生する必要があります

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 

ありがとう:
はここに私のコードです!

+0

注:実行中の場合は停止しますが、新しいサウンドは開始しません。あなたは 'if-else'を使っています。そうでないとコメントになります – AxelH

+0

新しい音が鳴ります。私の問題は、ボタンを押すと同時に2つの場所で同じ音が鳴ることです。だから、 "hello"のように聞こえるのではなく "h h e l l o o"のように聞こえます。 – HerbalPrincess

+0

'changeCard'と' playSound'からMediaPlayerを始めるには2通りの方法があります。それらが一緒に呼び出されないことは確かですか?デバッガを使用してコードがどこに渡っているかを確認したり、ログを使ってそれを確認したりします。私が見るものから、これは正しい – AxelH

答えて

0

ああ。私はそれを考え出した。私はそれは音そのもので厳密な問題だと思ったが、それは問題が判明し、この全体の時間はここにあった:

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(screennumber); btnnext.setEnabled(true);
呼ば

。愚かな間違い。とにかく助けてくれてありがとう!

関連する問題