我使用以下教程制作录音应用程序:
当我在我的测试设备(LG P970 Optimus Black)上启动时,我收到错误代码:
Error creating AudioRecord instance: initialization check failed.
Error code -20 when initializing native AudioRecord object.
我找到了一些“解决方案”,就像在RECORD_AUDIO
权限中添加清单一样
并使用.release()
方法。但所有这些东西都已经在源代码中了。
针对此问题的任何其他解决方案?它可能是设备吗?
答案 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和允许录制音频。这对我来说解决了问题