2011-06-08 198 views
2

我正在創建一個根據成功或失敗播放兩種聲音的爭奪文字遊戲應用程序。在猜測成功的情況下,遊戲播放一個聲音文件。在猜測失敗時,遊戲播放另一個聲音文件。我寫了下面的代碼如何在Android中播放聲音

public void checkWord() 
{ 
    MediaPlayer mp; 
    if(abcd.equals(etGuessedWord.getText().toString())) 
    { 
     WordLibrary.setMyInt(WordLibrary.getMyInt() + 10); 
     tvScore.setText(String.valueOf(WordLibrary.getMyInt())); 

     new AlertDialog.Builder(JumbledWords.this).setMessage("Awesome!!!") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 
      wordIdx = (wordIdx + 1) % getSize(); 
      sWord = getScrambledWord(word_list[wordIdx]); 
      tvScrambledWord.setText(sWord); 
      abcd = word_list[wordIdx]; 
      ++word_array_length; 
      etGuessedWord.setText(""); 

      if(word_array_length >= word_list.length) 
      { 
       new AlertDialog.Builder(JumbledWords.this).setMessage("Level Complete!!! ") 
       .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

       @Override 
       public void onClick(DialogInterface dialog, int which) { 
       // TODO Auto-generated method stub 
        start = 0; 
        finish();   
       } 
       }).create().show();  
      } 


     } 
     }).create().show(); 
     **mp = MediaPlayer.create(this, R.raw.clap);** 
     mp.start(); 

    } 
    else 
    { 

     new AlertDialog.Builder(JumbledWords.this).setMessage("Wrong. Try Again") 
     .setPositiveButton("OK", new DialogInterface.OnClickListener() { 

     @Override 
     public void onClick(DialogInterface dialog, int which) { 
     // TODO Auto-generated method stub 

      etGuessedWord.setText(""); 
     } 
     }).create().show(); 
     **mp = MediaPlayer.create(this, R.raw.oop);** 
     mp.start(); 
    } 
} 

代碼mp = MediaPlayer.create(this,R.raw.oop)給出異常。我盡我所能避免了異常,如IOException。應用程序暫停並給出「強制關閉」。代碼有什麼問題?有沒有其他的編程方式來加載聲音?請幫幫我。

回答

2

我通常使用SoundPool播放聲音,這對我來說更舒服。你可以查看這個鏈接:Sound Pool

祝你好運!

0

確保您嘗試播放的聲音文件具有適當的擴展名(例如clap.wav)。

+0

聲音文件位於res/raw文件夾中。這是通過R.raw.clap確定的 – 2011-06-08 14:53:58

+1

我的意思是文件名應該是'clap.wav',而不僅僅是'clap'(當然假設它是wav格式的)。 – 2011-06-08 14:57:05

3

問題是用於創建對象的上下文,「this」是活動上下文,並且在某些情況下,不包含對原始對象的引用。我遇到了使用應用程序上下文而不是活動上下文解決的相同問題。

試着改變你創建代碼以下:

語境appContext = getApplicationContext();

mp = MediaPlayer.create(appContext,resid);