2013-03-11 83 views
2

我用下面的教程制作录音应用程序:为什么Android AudioRecord初始化失败?

当我启动我的测试设备(LG P970 Optimus的黑色),我得到一个错误代码上:

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

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

这个问题的其他解决方案?它可能是设备吗?

+0

http://stackoverflow.com/questions/4843739/audiorecord-object-not-initializing – 2013-03-11 09:25:14

+0

谢谢,但我不能评论@Dustin在这个主题的解决方案。我试过这个解决方案,现在我得到错误getMinBuferSize()无效的音频格式 – user2043332 2013-03-11 11:09:19

+0

你不能使用8位getMinBufferSize()最后我检查。使用16位而不是 – alrikai 2013-10-11 23:16:18

回答

2

我已经解决了这个错误像this.becuse我们可以像这样调用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; 
    } 
+0

完美答案100%正常工作。伟大的工作bro \ – 2017-11-16 07:13:00

1

这个错误你是因为你在AudioRecord构造函数中指定缓冲区的大小得到。

bufferSizeInBytes记录过程中写入音频数据的缓冲区的总大小(以字节为单位)。新的音频数据可以以比这个尺寸更小的块读取。请参阅getMinBufferSize(int,int,int)以确定成功创建AudioRecord实例所需的最小缓冲区大小。 使用小于getMinBufferSize()的值将导致初始化失败。

这就是为什么总是用AudioRecord这样的:在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"); 

     } 
2

改变音频源作为默认..... 我能够通过使用

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

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