我正在构建一个录音机应用程序,并且我使用了onTouch方法来捕获声音,然后它会自动播放捕获的声音。有两个问题:
首先,如果您立即停止触摸按钮,该应用程序将无法记录您输入的最后几位,因此您必须记录音频,然后等待约2秒钟的静音,然后再移动手指,该应用程序将记录完整的音频减去最后一个静音位。
第二,如果用户点击或触摸触摸按钮,应用程序将崩溃。
通过某种方式增加按钮点击的等待时间(在用户拉出手指后,按钮在指定的几秒钟内保持按下状态),这两个问题都将得到解决。
代码如下:
mRecordBtn.setOnTouchListener(new View.OnTouchListener(){
@Override
public boolean onTouch(View view, MotionEvent motionEvent) {
if ((motionEvent.getAction() == MotionEvent.ACTION_DOWN)) {
startRecording();
mRecordLabel.setText("Recording...");
}
else if (motionEvent.getAction() == MotionEvent.ACTION_UP) {
stopRecording();
mRecordLabel.setText("Recording Stopped...");
MediaPlayer soundPlayer = MediaPlayer.create(getApplicationContext(), Uri.parse(fileName));
soundPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
soundPlayer = new MediaPlayer();
try {
soundPlayer.setDataSource(fileName);
soundPlayer.prepare();
}
catch (IOException e){
e.printStackTrace();
}
soundPlayer.start();
mRecordLabel.setText("Do it again!");
}
return false;
}
});
记录方法:
private void startRecording() {
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC);
recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
recorder.setOutputFile(fileName);
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
try {
recorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
recorder.start();
}
private void stopRecording() {
recorder.stop();
recorder.release();
recorder = null;
}