Android:AudioRecord初始化本机AudioRecord对象时的错误代码-20

d-m*_*man 5 android avaudiorecorder android-audiorecord

Android:我想从麦克风中读取缓冲区,以便我可以对其执行处理,以下是我的代码

int sampleRateInHz = 8000;// 44100, 22050 and 11025
        int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;

        //int bufferSize =11025 + 
        int bufferSize = AudioRecord.getMinBufferSize(sampleRateInHz,channelConfig, audioFormat);


        short[] buffer = new short[bufferSize];

        AudioRecord audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz,channelConfig, audioFormat, bufferSize);

        if(audioRecord.getState()== AudioRecord.STATE_INITIALIZED){
            audioRecord.startRecording();
            Log.e("recording", "before");


            boolean flag = true;
            while (flag) {
                int bufferReadResult = audioRecord.read(buffer, 0, bufferSize);
                System.out.println(buffer);
            }

            audioRecord.stop();
            audioRecord.release();
        }
        Log.e("recording", "stopeed");


<uses-permission android:name="android.permission.RECORD_AUDIO"></uses-permission>
Run Code Online (Sandbox Code Playgroud)

每次我尝试测试程序时都会出现以下错误

06-04 00:18:17.222:E/AudioRecord-Java(488):[android.media.AudioRecord]初始化本机AudioRecord对象时的错误代码-20.

Jee*_*van 7

如果,也会引发此异常

  1. 录音已在进行中或
  2. 录音不可用或
  3. 应用程序没有适当的权限ex:App没有记录权限等

  • 第三个建议在这里很重要,因为错误根本不是描述性的.对于其他任何人,只需将其添加到您的清单:<uses-permission android:name ="android.permission.RECORD_AUDIO"/> (5认同)

use*_*581 1

据我了解, CHANNEL_CONFIGURATION_MONO 已贬值,在读入缓冲区时应使用 CHANNEL_IN_MONO 。我在实例化 AudioRecord 对象时遇到了类似的问题,这对我来说是解决方案。