我最近制作了自己的键盘,始终向用户显示。 我也发现了如何在按键的同时播放声音,但是如果我按下一个然后按下另一个,则只播放第一个声音。 是否有任何方法可以在每次按键时播放声音,即使它们之间的间隔为0.1毫秒? 这是我的代码:
final MediaPlayer mp = MediaPlayer.create(this, R.raw.sn_tecla);
final MediaPlayer mpspc = MediaPlayer.create(this, R.raw.sn_spc);
texto1.setTypeface(fuente);
//This is for each key.
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mp.start();
texto1.setText(texto1.getText() + "1");
}
});
提前谢谢。
答案 0 :(得分:1)
使用soundpool http://developer.android.com/reference/android/media/SoundPool.html
SoundPool sp = new SoundPool(5, AudioManager.STREAM_MUSIC, 0);
/** soundId for Later handling of sound pool **/
int soundId = sp.load(MainActivity.this, R.raw.windows_8_notify, 1); // in 2nd param u have to pass your desire ringtone
sp.play(soundId, 1, 1, 0, 0, 1);
答案 1 :(得分:0)
您可以通过为每个按钮声明一个mediaPlayer对象来解决您的问题(略微开销,但它有效)。 另外,使用 onTouchListener 代替 onClickListener 。
例如:如果您有2个按钮且每个按钮必须发出相同的声音,您的代码将如下所示:
final MediaPlayer[] mediaPlayers = new MediaPlayer[2];
for(int i =0;i<2;i++){
//if both buttons ought to have the same sound
mediaPlayers[i] = MediaPlayer.create(getApplicationContext(), R.raw.beep);
mediaPlayers[i].setLooping(true);
}
button1.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
//when the user presses the button
if(event.getAction() == MotionEvent.ACTION_DOWN)
{
mediaPlayers[0].start();
texto1.setText(texto1.getText() + "1");
}
//when the user releases the button
if(event.getAction() == MotionEvent.ACTION_UP){
mediaPlayers[0].pause();
}
return false;
}
});
button2.setOnTouchListener(new View.OnTouchListener() {
@Override
public boolean onTouch(View v, MotionEvent event) {
if (event.getAction() == MotionEvent.ACTION_DOWN)
{
mediaPlayers[1].start();
texto1.setText(texto1.getText() + "1");
}
if (event.getAction() == MotionEvent.ACTION_UP) {
mediaPlayers[1].pause();
}
return false;
}
});
希望这适合你!