是否有更快的方式来切换MediaPlayer的数据源?

时间:2013-05-05 22:32:11

标签: android media-player datasource

我是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();
    }
}

1 个答案:

答案 0 :(得分:2)

我认为您应该使用SoundPool代替MediaPlayerSoundPool可让您预先加载一些声音文件,让您可以一个接一个地播放它们而不会有任何额外的延迟。它经常用于游戏和音板应用程序,因此它似乎完全符合您的需求。

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

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