2011-08-24 38 views
0

现在,我尝试构建一个钢琴应用程序。这个概念是发挥声音,我必须触摸一个按钮。现在,我有7个按钮,每个按钮播放一个声音文件。这是代码。音频[MediaPlayer]不适用于我的钢琴应用程序

package com.andikurnia.piano; 

import android.app.Activity; 
import android.media.MediaPlayer; 
import android.os.Bundle; 
import android.view.MotionEvent; 
import android.view.View; 
import android.widget.ImageView; 

public class IsaronActivity extends Activity { 
    /** Called when the activity is first created. */ 

    ImageView button1; 
    ImageView button2; 
    ImageView button3; 
    ImageView button4; 
    ImageView button5; 
    ImageView button6; 
    ImageView button7; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     final MediaPlayer sound_6 = MediaPlayer.create(this, R.raw.saron_6); 
     final MediaPlayer sound1 = MediaPlayer.create(this, R.raw.saron1); 
     final MediaPlayer sound2 = MediaPlayer.create(this, R.raw.saron2); 
     final MediaPlayer sound3 = MediaPlayer.create(this, R.raw.saron3); 
     final MediaPlayer sound5 = MediaPlayer.create(this, R.raw.saron5); 
     final MediaPlayer sound6 = MediaPlayer.create(this, R.raw.saron6); 
     final MediaPlayer sound11 = MediaPlayer.create(this, R.raw.saron11); 

     button1 = (ImageView) findViewById(R.id.one); 
     button1.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View v, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound_6.isPlaying()){ 
        sound_6.stop(); 
        sound_6.seekTo(0); 
       }else{ 
        sound6.start(); 
       } 
       return true; 
      } 
     }); 

     button2 = (ImageView) findViewById(R.id.two); 
     button2.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View two, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound1.isPlaying()){ 
        sound1.stop(); 
        sound1.seekTo(0); 
       }else{ 
        sound1.start(); 
       } 
       return true; 
      } 
     }); 

     button3 = (ImageView) findViewById(R.id.three); 
     button3.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View three, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound2.isPlaying()){ 
        sound2.stop(); 
        sound2.seekTo(0); 
       }else{ 
        sound2.start(); 
       } 
       return true; 
      } 
     }); 

     button4 = (ImageView) findViewById(R.id.four); 
     button4.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View four, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound3.isPlaying()){ 
        sound3.stop(); 
        sound3.seekTo(0); 
       }else{ 
        sound3.start(); 
       } 
       return true; 
      } 
     }); 

     button5 = (ImageView) findViewById(R.id.five); 
     button5.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View five, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound5.isPlaying()){ 
        sound5.stop(); 
        sound5.seekTo(0); 
       }else{ 
        sound5.start(); 
       } 
       return true; 
      } 
     }); 

     button6 = (ImageView) findViewById(R.id.six); 
     button6.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View six, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound6.isPlaying()){ 
        sound6.stop(); 
        sound6.seekTo(0); 
       }else{ 
        sound6.start(); 
       } 
       return true; 
      } 
     }); 

     button7 = (ImageView) findViewById(R.id.seven); 
     button7.setOnTouchListener(new View.OnTouchListener() { 

      @Override 
      public boolean onTouch(View seven, MotionEvent touchEvent) { 
       // TODO Auto-generated method stub 
       if(sound11.isPlaying()){ 
        sound11.stop(); 
        sound11.seekTo(0); 
       }else{ 
        sound11.start(); 
       } 
       return true; 
      } 
     }); 
    } 
} 

问题是当我触摸一个按钮(例如button1)的音频文件调用和正常播放。但是,当我移动手指触摸其他按钮时,该按钮上的声音只播放一半,当我回到按钮之前,它不能再播放声音。任何人都可以帮助分析我的代码..? :(

回答

0

你需要释放MediaPlayer的情况下,你用它做以后。

来实现,这将是一个更好的方法(此代码可能无法编译..但它应该帮助你开始)

private MediaPlayer mp; 
public boolean onTouch(View v, MotionEvent touchEvent) { 
    switch(v.getId()) { 
     case button1: 
      if(null == mp){ 
       mp = MediaPlayer.create(this, R.raw.saron1); 
      } else { 
       //mediaplayer is already created so release it 
       //you may also want to consider stopping it.. 
       mp.release(); 
       mp = MediaPlayer.create(this, R.raw.saron1);      
      } 
      mp.start(); 
      break; 
      //.. 
      //.. 
      //.. and so on 
    } 
} 
+0

因此,不建议在程序中创建一个以上的MediaPlayer ...?如果是这样,我必须创建一个数组来实现我的按钮。好吧,我来试试。 – andikurnia

+0

都能跟得上多不支持MediaPlayer的实例 – bluefalcon

+0

呵呵,我明白了,那么我刚开始开发一个android程序,谢谢你的帮助:) 我也是博主,来到我的位置(http://blog.andikurnia.com) – andikurnia

相关问题