为什么Android AudioRecord初始化失败?

时间:2013-03-11 09:17:29

标签: java android eclipse audio-recording audiorecord

我使用以下教程制作录音应用程序:

当我在我的测试设备(LG P970 Optimus Black)上启动时,我收到错误代码:

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

我找到了一些“解决方案”,就像在RECORD_AUDIO权限中添加清单一样 并使用.release()方法。但所有这些东西都已经在源代码中了。

针对此问题的任何其他解决方案?它可能是设备吗?

4 个答案:

答案 0 :(得分:2)

我已经解决了这个错误。因为我们可以像这样调用AudioRecord对象。

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;
    }

答案 1 :(得分:2)

将AudioRecord中的音频源更改为默认值..... 我能够通过使用

来解决这个问题
MediaRecorder.AudioSource.DEFAULT 

答案 2 :(得分:1)

由于您在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");

       }

答案 3 :(得分:0)

这可能是因为您的Android设备阻止了您的应用权限。转到Android设备的设置>权限> Your_App和允许录制音频。这对我来说解决了问题