Страница 1 из 1

AudioRecorder объект. Не корректная работа.

Добавлено: 04 авг 2017, 10:27
MishanjaD
Всем привет форумчане!

Просто молю Вас о помощи с поиском причины следующей проблемы:

Имеем класс, задача которого во время входящего звонка начать запись звука, далее его преобразование и запись в PCM формате.

Имеем класс startRecording() который выполняет сию функцию.

Проблема в том, что при вызове метода recorder.StartRecording() метод recorder.getRecordingState() ИНОГДА!!! возвращает нам RECORDERSTATE_STOPPED.

Проблема заключается в том, что бывает 100 раз под ряд все работает хорошо, а бывает 40 хорошо, далее 20 раз не возможно начать запись - выходим из метода с дебаг логами, далее опять 40 хорошо. Никаких значимых влияющих факторов не нашел. Перезагрузка телефона помогает иногда. Иногда не помогает. Как видно из кода повторная инициализация не помогает. Повторная попытка запустить запись тоже.

Код: Выделить всё

 private void startRecording() {

        RLog.log(LogLevel.LOW, TAG, "startRecording()");

        //Create Recorder
        recorder = new AudioRecord(MediaRecorder.AudioSource.VOICE_DOWNLINK, 44100,  // (Rx audio source)
                AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_16BIT, BufferElements2Rec * BytesPerElement);
        //Check Recorder State
        if (recorder.getState() != AudioRecord.STATE_INITIALIZED) {
            recorder.release();
            recorder = null;
            log(LogLevel.LOW, TAG, "Audio preparation failed");
            return;
        }
        recorder.startRecording();
        log(LogLevel.LOW, TAG, "recorder.getRecordingState()" + recorder.getRecordingState());

        if(recorder.getRecordingState()==AudioRecord.RECORDSTATE_STOPPED){
            RLog.log(LogLevel.LOW, TAG, "AudioRecord.startRecording() failed. Try one more time");
            if(audioRecorderOneMoreTryFlag){
                recorder.release();
                recorder = null;
                audioRecorderOneMoreTryFlag = false;
                waitLoop(5);
                startRecording();
            }else{
                log(LogLevel.LOW, TAG, "AudioRecord object failed again. FAIL. ");

                //Debug info TODO: delete after fix
                log(LogLevel.LOW, TAG, "recorder.getRecordingState()" +recorder.getRecordingState());
                log(LogLevel.LOW, TAG, "recorder.getState()" +recorder.getState());
                log(LogLevel.LOW, TAG, "recorder.getAudioSessionId()" +recorder.getAudioSessionId());
                log(LogLevel.LOW, TAG, "recorder.getAudioSource" +recorder.getAudioSource());
             
                //EXIT 
                return;
               
       
            }
            return;
        }


В чем по Вашему может быть дело?
Буду благодарен любой помощи !