Почему происходит сбой инициализации Android AudioRecord?

Я использовал следующий учебник, чтобы сделать приложение для записи звука:

Когда я запускаю его на своем тестовом устройстве (LG P970 Optimus Black), я получаю код ошибки:

 Error creating AudioRecord instance: initialization check failed.
 Error code -20 when initializing native AudioRecord object.

Я нашел несколько «решений», таких как добавление в манифест разрешения RECORD_AUDIO и использование метода .release(). Но все это уже было в исходном коде.

Любые другие решения этой проблемы? Может быть это устройство?


person user2043332    schedule 11.03.2013    source источник
comment
stackoverflow.com/questions/4843739/   -  person Jay Mayu    schedule 11.03.2013
comment
Спасибо, но я не могу комментировать решение @Dustin в этой теме. Я попробовал это решение, и теперь я получаю сообщение об ошибке getMinBuferSize() Invalid audio format   -  person user2043332    schedule 11.03.2013
comment
Вы не можете использовать 8-бит с getMinBufferSize() в последний раз, когда я проверял. Вместо этого используйте 16-битный   -  person alrikai    schedule 12.10.2013


Ответы (4)


Я решил эту ошибку, как это. Потому что мы можем вызывать объект AudioRecors следующим образом.

private AudioRecord findAudioRecord() {
        // TODO Auto-generated method stub
           for (int rate : mSampleRates) {

               for (short audioFormat : new short[] { AudioFormat.ENCODING_PCM_8BIT, AudioFormat.ENCODING_PCM_16BIT }) {

                   for (short channelConfig : new short[] { AudioFormat.CHANNEL_IN_MONO, AudioFormat.CHANNEL_IN_STEREO }) {

                       try {

                           Log.d("AudiopRecording", "Attempting rate " + rate + "Hz, bits: " + audioFormat + ", channel: "

                                   + channelConfig);

                           int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);

                           if (bufferSize != AudioRecord.ERROR_BAD_VALUE) {

                               // check if we can instantiate and have a success

                               AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                               if (recorder.getState() == AudioRecord.STATE_INITIALIZED)

                                   return recorder;

                           }

                       } catch (Exception e) {

                           Log.e("AudiopRecording", rate + "Exception, keep trying.",e);

                       }

                   }

               }

           }


        return null;
    }
person user3114805    schedule 21.10.2013

изменить источник звука в AudioRecord по умолчанию..... я смог решить эту проблему с помощью

MediaRecorder.AudioSource.DEFAULT 
person Hash_S    schedule 25.01.2015

Эта ошибка возникает из-за размера буфера, который вы указываете в конструкторе AudioRecord.

bufferSizeInBytes — общий размер (в байтах) буфера, в который записываются аудиоданные во время записи. Новые аудиоданные могут быть прочитаны из этого буфера меньшими порциями, чем этот размер. См. getMinBufferSize(int, int, int) для определения минимально необходимого размера буфера для успешного создания экземпляра AudioRecord. Использование значений меньше, чем getMinBufferSize(), приведет к сбою инициализации.

Поэтому всегда используйте AudioRecord следующим образом:

     try {

       int bufferSize = AudioRecord.getMinBufferSize(rate, channelConfig, audioFormat);



       AudioRecord recorder = new AudioRecord(AudioSource.DEFAULT, rate, channelConfig, audioFormat, bufferSize);

                       if (recorder.getState() == AudioRecord.STATE_INITIALIZED){

                               return recorder;

                       }

       } catch (Exception e) {

       Log.i("AudioRecording", "Error in Audio Record");

       }
person DreamCoder    schedule 01.10.2014

Это может быть связано с тем, что ваше устройство Android блокирует разрешение вашего приложения. Перейдите в «Настройки вашего устройства Android»> «Разрешения»> «Ваше_приложение» и «Разрешить запись звука». Это решенная проблема для меня, хотя

person Naung9    schedule 29.08.2017