我正在开发一个鼓垫应用程序我想记录用户点击按钮并在用户单击记录按钮时将它们保存在ArrayList或数据库中并以编程方式模拟相同的点击以混合它们 我正在使用Soundpool和触摸事件
我花了很多时间搜索,却一无所获。
代码:
public class MainActivity extends Activity implements View.OnTouchListener {
Button btn_1, btn_2, btn_3, btn_4, btn_5, btn_6, btn_7, btn_8, btn_9, btn_10, btn_11, btn_12, rec_btn;
SoundPool sp;
int sound_1, sound_2, sound_3, sound_4, sound_5, sound_6, sound_7, sound_8, sound_9, sound_10, sound_11, sound_12;
boolean isRecording = false;
SeekBar seekBar;
int progress;
float sp_flot = 1f;
long startTime;
private final int MAX_STREAM = 10;
Animation anim;
@RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
setContentView(R.layout.activity_main);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
AudioAttributes attributes = new AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_GAME)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build();
sp = new SoundPool.Builder()
.setAudioAttributes(attributes)
.setMaxStreams(MAX_STREAM)
.build();
} else {
sp = new SoundPool(MAX_STREAM, AudioManager.STREAM_MUSIC, 0);
}
seekBar = (SeekBar) findViewById(R.id.seekBar);
anim = new AlphaAnimation(0.0f, 1.0f);
anim.setDuration(500); //You can manage the blinking time with this parameter
anim.setStartOffset(200);
anim.setRepeatMode(Animation.REVERSE);
anim.setRepeatCount(Animation.INFINITE);
btn_1 = (Button) findViewById(R.id.btn1);
btn_2 = (Button) findViewById(R.id.btn2);
btn_3 = (Button) findViewById(R.id.btn3);
btn_4 = (Button) findViewById(R.id.btn4);
btn_5 = (Button) findViewById(R.id.btn5);
btn_6 = (Button) findViewById(R.id.btn6);
btn_7 = (Button) findViewById(R.id.btn7);
btn_8 = (Button) findViewById(R.id.btn8);
btn_9 = (Button) findViewById(R.id.btn9);
btn_10 = (Button) findViewById(R.id.btn10);
btn_11 = (Button) findViewById(R.id.btn11);
btn_12 = (Button) findViewById(R.id.btn12);
rec_btn = (Button) findViewById(R.id.rec_btn);
btn_1.setOnTouchListener(this);
btn_2.setOnTouchListener(this);
btn_3.setOnTouchListener(this);
btn_4.setOnTouchListener(this);
btn_5.setOnTouchListener(this);
btn_6.setOnTouchListener(this);
btn_7.setOnTouchListener(this);
btn_8.setOnTouchListener(this);
btn_9.setOnTouchListener(this);
btn_10.setOnTouchListener(this);
btn_11.setOnTouchListener(this);
btn_12.setOnTouchListener(this);
sound_1 = sp.load(this, R.raw.drum_01, 1);
sound_2 = sp.load(this, R.raw.drum_02, 1);
sound_3 = sp.load(this, R.raw.drum_03, 1);
sound_4 = sp.load(this, R.raw.drum_04, 1);
sound_5 = sp.load(this, R.raw.drum_05, 1);
sound_6 = sp.load(this, R.raw.drum_06, 1);
sound_7 = sp.load(this, R.raw.drum_07, 1);
sound_8 = sp.load(this, R.raw.drum_08, 1);
sound_9 = sp.load(this, R.raw.drum_09, 1);
sound_10 = sp.load(this, R.raw.drum_10, 1);
sound_11 = sp.load(this, R.raw.drum_11, 1);
sound_12 = sp.load(this, R.raw.drum_12, 1);
seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() {
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
double fm = (double) progress / 10;
sp_flot = (float) fm;
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
});
rec_btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!isRecording) {
rec_btn.startAnimation(anim);
isRecording = true;
} else {
rec_btn.clearAnimation();
isRecording = false;
}
}
});
}
@Override
public boolean onTouch(View v, MotionEvent event) {
int pointerIndex = event.getActionIndex();
float x = event.getX(pointerIndex);
float y = event.getY(pointerIndex);
int v_id = v.getId();
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
startTime = System.currentTimeMillis();
switch (v_id) {
case R.id.btn1:
btn_1.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_1, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn2:
btn_2.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_1, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn3:
btn_3.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_3, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn4:
btn_4.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_4, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn5:
btn_5.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_5, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn6:
btn_6.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_6, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn7:
btn_7.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_7, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn8:
btn_8.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_5, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn9:
btn_9.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_9, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn10:
btn_10.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_9, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn11:
btn_11.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_11, 1, 1, 1, 0, sp_flot);
break;
case R.id.btn12:
btn_12.setBackgroundResource(R.drawable.sound_on);
sp.play(sound_12, 1, 1, 1, 0, sp_flot);
break;
}
break;
case MotionEvent.ACTION_UP:
switch (v_id) {
case R.id.btn1:
btn_1.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn2:
btn_2.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn3:
btn_3.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn4:
btn_4.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn5:
btn_5.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn6:
btn_6.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn7:
btn_7.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn8:
btn_8.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn9:
btn_9.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn10:
btn_10.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn11:
btn_11.setBackgroundResource(R.drawable.sound_off);
break;
case R.id.btn12:
btn_12.setBackgroundResource(R.drawable.sound_off);
break;
}
break;
}
return false;
}
}
答案 0 :(得分:0)
您不应该存储触摸事件,而是保存正在播放时间戳的声音ID,稍后您可以按顺序播放它们。您也可以在用户之间共享这些数据,它将在不同的设备上播放。