AudioRecord对象在项目未初始化

问题描述:

当我尝试使用下面的代码AudioRecord对象在项目未初始化

record = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRate, AudioFormat.CHANNEL_IN_MONO, AudioFormat.ENCODING_PCM_8BIT, BYTE_OF_SAMPLE * bufferSampleSize); 
record.startRecording(); 

然后我得到下面的logcat的例外透过我的Nexus 5录制音频:

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。这些解决方案都不起作用。

但它在另一个项目中工作。 有什么缺失?

找到完整的代码得到了解决: 最近我的手机更新到棉花糖。在棉花糖有一个新的许可制度。我在下面开启了这些权限,录音工作得很好。

enter image description here

+0

你是最棒的! –

+0

这就是我的问题! – StarWind0

+0

我的所有用户都必须进入设置并手动进行此操作吗?我不能以编程方式执行此操作。 – nilsi

我用它来记录。从这里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()); 
    } 
} 

Android Audio recording

+0

,因为我需要读取音频数据来创建频谱分析仪无法使用MediaRecorder。 – skabir