0

基本的なサウンドボードを書いています。私はそれを私の電話に持っていて、それはうまくいきます。まあ、ほとんどの場合。最初の 7 つのボタンは機能しますが、8 番目と 9 番目のボタンは機能しません。私の唯一の考えは、それはメモリの問題であり、プログラムの開始時に同時に 9 つの mp をすべて作成するべきではないということです。おそらく、8 番目と 9 番目は少し多すぎて記憶に残りません。

次のコードで 8 番目と 9 番目のボタンが機能しない理由について何か考えがある人はいますか? それらはエミュレーターで動作しますが、私の電話をクラッシュさせます。私はコードが完璧ではないことを知っています - 私は学んでいます。しかし、正しい方向へのポイントは素晴らしいでしょう。

ご協力いただきありがとうございます。

package testing.Variables.Levack;

import android.app.Activity;
import android.os.Bundle;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Button;
import android.view.View.OnClickListener; 
import android.widget.Button;
import android.view.View;
import android.media.MediaPlayer;

public class TestingVariablesActivity extends Activity {
    /** Called when the activity is first created. */
    TextView tt;
    Button messageButton1,messageButton2,messageButton3,messageButton4,messageButton5,messageButton6,messageButton7,messageButton8,messageButton9;

  MediaPlayer mp1,mp2,mp3,mp4,mp5,mp6,mp7,mp8,mp9 = null;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mp1 = MediaPlayer.create(this, R.raw.baboon);
        mp2 = MediaPlayer.create(this, R.raw.backoff);
        mp3 = MediaPlayer.create(this, R.raw.dark6);
        mp4 = MediaPlayer.create(this, R.raw.dontneedroads);
        mp5 = MediaPlayer.create(this, R.raw.hua);
        mp6 = MediaPlayer.create(this, R.raw.hulk);
        mp7 = MediaPlayer.create(this, R.raw.itsaclipon);
        mp8 = MediaPlayer.create(this, R.raw.ht);
        mp9 = MediaPlayer.create(this, R.raw.truth1);

   messageButton1=(Button)findViewById(R.id.messageButton1);
   messageButton1.setOnClickListener(startListener);

   messageButton2=(Button)findViewById(R.id.messageButton2);
   messageButton2.setOnClickListener(startListener);

   messageButton3=(Button)findViewById(R.id.messageButton3);
   messageButton3.setOnClickListener(startListener);

   messageButton4=(Button)findViewById(R.id.messageButton4);
   messageButton4.setOnClickListener(startListener);

   messageButton5=(Button)findViewById(R.id.messageButton5);
   messageButton5.setOnClickListener(startListener);

   messageButton6=(Button)findViewById(R.id.messageButton6);
   messageButton6.setOnClickListener(startListener);

   messageButton7=(Button)findViewById(R.id.messageButton7);
   messageButton7.setOnClickListener(startListener);

  messageButton8=(Button)findViewById(R.id.messageButton8);
 messageButton8.setOnClickListener(startListener);

   //messageButton9=(Button)findViewById(R.id.messageButton9);
   //messageButton9.setOnClickListener(startListener);

    }

  private OnClickListener startListener =new OnClickListener()  {
    public void onClick(View v)
    { 

               switch(v.getId()) { 
                   case R.id.messageButton1: 
                        mp1.start();
                        break; 
                   case R.id.messageButton2: 
                         mp2.start();
                         break; 
                   case R.id.messageButton3: 
                        mp3.start();
                        break; 
                   case R.id.messageButton4: 
                        mp4.start();
                        break;  
                   case R.id.messageButton5: 
                        mp5.start();
                        break; 
                   case R.id.messageButton6: 
                        mp6.start();
                        break;  
                   case R.id.messageButton7: 
                        mp7.start();
                        break; 
                   case R.id.messageButton8: 
                        mp8.start();
                        break;
                //   case R.id.messageButton9: 
                       //   mp9.start();
                        //break; 

           } 


        }   
        };









    }
4

2 に答える 2

1

私は以前に同様の問題に遭遇したことがあります - 問題は何よりもサウンド固有のものであるように思われました. 私は MediaPlayers のコレクションを作成し、7 つ目以降、特定のデバイス (私の場合は Droid X2) を使用しているときにクラッシュしました。

X2 で MediaPlayer のさまざまなインスタンスを作成しているときに、8 番目に作成された MediaPlayer で Logcat が常にjava.io.IOException: Prepare failed.: status=0x1. 他のいくつかのデバイスでテストしたところ、エラーは表示されません。

mp1.release();補足として、MediaPlayer を使い終わったら、必ず呼び出してください。これらのリソースを解放できなかったために、多くのメモリ リークが発生していることを突き止めました。

于 2012-06-29T16:59:33.803 に答える
0

サウンドがそれほど長くない場合は、MediaPlayer ソリューションの代わりに SoundPool クラスを使用する必要があります。より多くのサウンドを同時に管理することもできます。

これはドキュメントです: http://developer.android.com/reference/android/media/SoundPool.html

これは始めるのに適した場所です: http://www.droidnova.com/creating-sound-effects-in-android-part-1,570.html

これは、SoundPool と MediaPlayer の違いについてのアイデアを提供する短い記事です http://www.stealthcopter.com/blog/2010/08/android-soundpool-vs-mediaplayer-focus-on-soundboards-and-memory-問題/

于 2012-06-29T15:38:40.037 に答える