AudioRecord 对象未在项目中初始化
AudioRecord object not initializing in a project
当我尝试使用以下代码通过 Nexus 5 录制音频时
record = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, BYTE_OF_SAMPLE * bufferSampleSize);
record.startRecording();
然后我在 logcat 中收到以下异常:
E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
E/AndroidRuntime: FATAL EXCEPTION: Thread-855
E/AndroidRuntime: Process: com.*.*, PID: 14206
E/AndroidRuntime: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
E/AndroidRuntime: at android.media.AudioRecord.startRecording(AudioRecord.java:885)
E/AndroidRuntime: at com.*.*.MainActivity$Looper.run(MainActivity.java:265)
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x9e476d00
我在清单文件中添加了以下行。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
我测试过AudioRecord object not initializing。 None 这些解决方案有效。
但它在另一个项目中工作。
有什么遗漏吗?
我用这个来录音。从这里找到完整的代码 Android Audio recording example
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
mRecorder.setAudioEncodingBitRate(48000);
} else {
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(64000);
}
mRecorder.setAudioSamplingRate(16000);
mOutputFile = getOutputFile();
mOutputFile.getParentFile().mkdirs();
mRecorder.setOutputFile(mOutputFile.getAbsolutePath());
try {
mRecorder.prepare();
mRecorder.start();
mStartTime = SystemClock.elapsedRealtime();
mHandler.postDelayed(mTickExecutor, 100);
Log.d("Voice Recorder","started recording to "+mOutputFile.getAbsolutePath());
} catch (IOException e) {
Log.e("Voice Recorder", "prepare() failed "+e.getMessage());
}
}
得到解决方案:
最近我将 phone 更新为 Marshmallow。 Marshmallow 中有一个新的权限系统。我打开了这些权限,因为下面的录音效果很好。
当我尝试使用以下代码通过 Nexus 5 录制音频时
record = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, BYTE_OF_SAMPLE * bufferSampleSize);
record.startRecording();
然后我在 logcat 中收到以下异常:
E/AudioRecord: AudioFlinger could not create record track, status: -1
E/AudioRecord-JNI: Error creating AudioRecord instance: initialization check failed with status -1.
E/android.media.AudioRecord: Error code -20 when initializing native AudioRecord object.
E/AndroidRuntime: FATAL EXCEPTION: Thread-855
E/AndroidRuntime: Process: com.*.*, PID: 14206
E/AndroidRuntime: java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.
E/AndroidRuntime: at android.media.AudioRecord.startRecording(AudioRecord.java:885)
E/AndroidRuntime: at com.*.*.MainActivity$Looper.run(MainActivity.java:265)
E/Surface: getSlotFromBufferLocked: unknown buffer: 0x9e476d00
我在清单文件中添加了以下行。
<uses-permission android:name="android.permission.RECORD_AUDIO" />
我测试过AudioRecord object not initializing。 None 这些解决方案有效。
但它在另一个项目中工作。 有什么遗漏吗?
我用这个来录音。从这里找到完整的代码 Android Audio recording example
private void startRecording() {
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.HE_AAC);
mRecorder.setAudioEncodingBitRate(48000);
} else {
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setAudioEncodingBitRate(64000);
}
mRecorder.setAudioSamplingRate(16000);
mOutputFile = getOutputFile();
mOutputFile.getParentFile().mkdirs();
mRecorder.setOutputFile(mOutputFile.getAbsolutePath());
try {
mRecorder.prepare();
mRecorder.start();
mStartTime = SystemClock.elapsedRealtime();
mHandler.postDelayed(mTickExecutor, 100);
Log.d("Voice Recorder","started recording to "+mOutputFile.getAbsolutePath());
} catch (IOException e) {
Log.e("Voice Recorder", "prepare() failed "+e.getMessage());
}
}
得到解决方案: 最近我将 phone 更新为 Marshmallow。 Marshmallow 中有一个新的权限系统。我打开了这些权限,因为下面的录音效果很好。