我是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();
}
}
答案 0 :(得分:2)
我认为您应该使用SoundPool
代替MediaPlayer
。 SoundPool
可让您预先加载一些声音文件,让您可以一个接一个地播放它们而不会有任何额外的延迟。它经常用于游戏和音板应用程序,因此它似乎完全符合您的需求。
更多信息: http://developer.android.com/reference/android/media/SoundPool.html
很好的教程: http://www.vogella.com/articles/AndroidMedia/article.html#tutorial_soundpool