【问题标题】:AudioRecord object not initializing in a projectAudioRecord 对象未在项目中初始化
【发布时间】:2016-01-18 16:31:35
【问题描述】:

当我尝试使用以下代码通过我的 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。这些解决方案都不起作用。

但它在另一个项目中工作。 有什么遗漏吗?

【问题讨论】:

    标签: java android sampling


    【解决方案1】:

    我用它来录音。从这里找到完整的代码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());
        }
    }
    

    【讨论】:

    • 我无法使用 MediaRecorder,因为我需要读取音频样本来创建频谱分析仪。
    【解决方案2】:

    找到解决方案: 最近,我将手机更新为 Marshmallow。在 Marshmallow 中有一个新的权限系统。我打开了这些权限,因为录音效果很好。

    【讨论】:

    • 这正是我的问题!
    • 我的所有用户都必须进入设置并手动允许吗?我不能以编程方式执行此操作。
    猜你喜欢
    • 2011-06-18
    • 1970-01-01
    • 2012-06-08
    • 2018-09-14
    • 2011-05-08
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多