录音和内存不足异常

时间:2010-11-11 09:32:04

标签: android out-of-memory

喜  我在我的录音机中使用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();
        }   
}

3 个答案:

答案 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毫秒。

相关问题