0

我是 Android 开发的新手,所以我想看看是否有更有效或更快的方法来使用 onTouch 方法切换 MediaPlayer 数据源。我正在尝试创建一种可以像长笛一样演奏的乐器,但是当我按下(触摸)按钮时,音频源的切换速度不够快。

我正在使用该playNote()方法在音频文件之间切换。任何建议表示赞赏。

public class PlayAggeion extends Activity {

ImageButton patC1;
int soundIsOn = 1;
MediaPlayer mp;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_play_aggeion);
    onConfigurationChanged(null);
    addListenerPatima();
    mp = new MediaPlayer();
    playNote(R.raw.aa);
}

public void addListenerPatima() {
    patC1 = (ImageButton) findViewById(R.id.patC1);
    patC1.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event) {
            switch(event.getAction())
            {
            case MotionEvent.ACTION_DOWN:
                playNote(R.raw.bb);
                return true;

            case MotionEvent.ACTION_UP:
                playNote(R.raw.aa);
                return true;
            }
            return false;
        };

    });
}

public void  playNote(int note){
    // Play note
    try {
        mp.reset();  
        mp.setDataSource(getApplicationContext(), Uri.parse("android.resource://" + getPackageName() + "/" + note));
        mp.prepare();
        mp.setLooping(true);
        mp.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }
}
4

1 回答 1

2

我认为你应该使用SoundPool而不是MediaPlayer. SoundPool让您可以预加载多个声音文件,并让您一个接一个地播放它们,而不会产生任何额外的延迟。它经常用于游戏和音板应用程序中,因此它似乎完全符合您的需求。

更多信息:http: //developer.android.com/reference/android/media/SoundPool.html

不错的教程: http ://www.vogella.com/articles/AndroidMedia/article.html#tutorial_soundpool

于 2013-05-05T22:41:22.167 回答