안녕하세요
버튼을 하나 생성하여, Record버튼을 터치시 소리를 인식하여 데시벨을 측정하고 1초마다 텍스트뷰에 해당 데시벨 값을 출력하는 프로그램을 만들어 보고 있습니다.
코드는 문제없이 돌아가지만, 처음에 Record버튼을 터치 하면 Infinity라는 값이 먼저 출력이 되는데,
이게 보기 상당히 거슬려서 없애고 싶습니다.ㅠㅠ
아래는 버튼 클릭시 동작과 데시벨 값을 측정하는 코드입니다.
btn_record.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
btn_record.setEnabled(false); //두번 누를 수 있으니까
btn_stop.setEnabled(true);
isRecording = true;
mediaRecorder = new MediaRecorder();
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.VOICE_RECOGNITION); //마이크로 녹음하겠다
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); //저장파일 형식 녹음파일은 3gp로 저장
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); //인코딩 방식설정
mediaRecorder.setOutputFile(path); //경로설정
try {
mediaRecorder.prepare(); //녹음을 준비함 : 지금까지의 옵션에서 문제가 발생했는지 검사함
mediaRecorder.start();
Toast.makeText(getApplicationContext(), "녹음시작", Toast.LENGTH_LONG).show();
timer = new Timer();
timer.schedule(new CustomTimer(), 2000, 1000);
} catch (IOException e) {
e.printStackTrace();
}
}
});
public double getAmplitude() {
double db = Math.abs(20 * Math.log10(mediaRecorder.getMaxAmplitude() / 16.0));
if (mediaRecorder != null) {
return db;
}
else
return 0;
}