喜 我在我的录音机中使用mediarecorder类进行录音,但是当我达到2米时,我的内存异常是我的极限。我在下面给出了我的代码。
时间
private static void audiorecding() { if(audio_recding_stop_flag == 0){ audio_recding_stop_flag = 1;
recorder.stop();
recorder.reset();
recorder.release();
recorder=new MediaRecorder();
int maxtime = audio_seekbar_play_indication.getMax();
audio_seekbar_progress = 0;
audio_seekbar_incr = maxtime/ AngiesData.gettotalaudiorecdingtimeinseconds(audio_recding_time.getText().toString());
audio_recding_time.stop();
recd_stop_audio.setBackgroundResource(R.drawable.rec_btn);
audio_play_pause.setEnabled(true);
delete_recding.setEnabled(true);
AngiesData.angiesListContext.setAudioRecd(true);
AngiesData.angiesListContext.setAudioRecdingTime((String) audio_recding_time.getText());
}
else {
audio_recding_stop_flag = 0;
try {
audio_play_pause.setEnabled(false);
delete_recding.setEnabled(false);
recd_stop_audio.setBackgroundResource(R.drawable.recording_stop);
audio_recding_time .setBase(SystemClock.elapsedRealtime());
audio_recding_time.start();
recorder = new MediaRecorder();
recorder.setAudioSource(MediaRecorder.AudioSource.MIC); // AudioSource
recorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); // OutputFormat
recorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
path = InitialValueLoader.sanitizePath("Audio/VoiceReport");
InitialValueLoader.filecheck(path);
recorder.setOutputFile(path);
recorder.setMaxDuration(120000);
recorder.prepare();
recorder.start();
} catch (Exception e) {
e.printStackTrace();
}
}
答案 0 :(得分:2)
我会尝试使用AudioRecord-Class(http://developer.android.com/reference/android/media/AudioRecord.html),使用read() - 函数和while循环,并继续前进,直到你得到2分钟。样本(检查sampleRate,例如44.1 Khz => 44100 smpls / sec => 60 * 44100 smpl / min)。确保你有2分钟。在计时器的帮助下音频不是一个好主意。对于定时器,你永远不能确定精度,如果另一个线程干扰你的计时器将在以后被唤起,并且在音频样本中说它可能会很晚。
答案 1 :(得分:1)
我建议使用计时器代替计时器
答案 2 :(得分:0)
在编程中,如果必须处理时序,通常所有时间值都以毫秒为单位。您试图在两秒钟后停止录制,而不是两分钟,即120000
毫秒。