Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Android > AudioRecorder класс. Не корректное поведение


Автор: MishanjaD 4.8.2017, 10:21
Всем привет форумчане!

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

Имеем класс, задача которого во время входящего звонка начать запись звука, далее его преобразование и запись в 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;
        }





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

Автор: iillyyaa2033 4.8.2017, 13:02
Сейчас развернутый ответ дать не успею; вкратце - мне помог https://stackoverflow.com/a/18505806.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)