2

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

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

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

我找到了一些“解决方案”,例如向 Manifest 添加RECORD_AUDIO权限并使用该.release()方法。但是所有这些东西都已经在源代码中了。

这个问题还有其他解决方案吗?会不会是设备?

4

4 回答 4

2

我已经像这样解决了这个错误。因为我们可以像这样调用 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;
    }
于 2013-10-21T10:46:32.240 回答
2

将 AudioRecord 中的音频源更改为默认值.....我能够通过使用来解决这个问题

MediaRecorder.AudioSource.DEFAULT 
于 2015-01-25T07:55:36.520 回答
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");

       }
于 2014-10-01T10:55:11.963 回答
1

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

于 2017-08-29T11:03:57.927 回答