Android:当 SAMPLERATE 设置为 44100 时,在未初始化的 AudioRecord 上调用 startRecording() [英] Android: startRecording() called on an uninitialized AudioRecord when SAMPLERATE set to 44100

查看:119
本文介绍了Android:当 SAMPLERATE 设置为 44100 时,在未初始化的 AudioRecord 上调用 startRecording()的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当我将 AudioRecord 对象的采样率设置为 44100 时,出现错误.当它是 22050 时它工作正常.

I get an error, when I set the sampling rate to 44100 for the AudioRecord object. When it's 22050 it works fine.

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/AudioRecord:frameCount 1024

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/AudioRecord﹕ frameCount 1024 < minFrameCount 1792

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/AudioRecord-JNI:创建AudioRecord实例时出错:初始化检查失败.

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/AudioRecord-JNI﹕ Error creating AudioRecord instance: initialization check failed.

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/android.media.AudioRecord:初始化原生 AudioRecord 对象时的错误代码 -20.

02-16 10:45:45.099 24021-24021/com.vlad.jackcomms E/android.media.AudioRecord﹕ Error code -20 when initializing native AudioRecord object.

02-16 10:45:45.109 24021-24021/com.vlad.jackcomms E/AndroidRuntime:致命

02-16 10:45:45.109 24021-24021/com.vlad.jackcomms E/AndroidRuntime﹕ FATAL

例外:主要进程:com.vlad.jackcomms,PID:24021java.lang.IllegalStateException: startRecording() 在未初始化的 AudioRecord 上调用.

EXCEPTION: main Process: com.vlad.jackcomms, PID: 24021 java.lang.IllegalStateException: startRecording() called on an uninitialized AudioRecord.

相关代码如下:

private static final int RECORDER_SAMPLERATE = 22050*2;
private static final int RECORDER_CHANNELS = AudioFormat.CHANNEL_IN_MONO;
private static final int RECORDER_AUDIO_ENCODING = AudioFormat.ENCODING_PCM_16BIT;

    recorder = new AudioRecord(MediaRecorder.AudioSource.MIC,
            RECORDER_SAMPLERATE, RECORDER_CHANNELS,
            RECORDER_AUDIO_ENCODING, BufferElements2Rec * BytesPerElement);

    recorder.startRecording();

推荐答案

不要忘记申请 AUDIO_RECORD 权限

Don't forget to ask for AUDIO_RECORD permission too

private void checkRecordPermission() {

    if (ActivityCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
            != PackageManager.PERMISSION_GRANTED) {

        ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.RECORD_AUDIO},
                123);
    }

这篇关于Android:当 SAMPLERATE 设置为 44100 时,在未初始化的 AudioRecord 上调用 startRecording()的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆