首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android:初始化原生AudioRecord对象时AudioRecord错误码-20

Android:初始化原生AudioRecord对象时AudioRecord错误码-20
EN

Stack Overflow用户
提问于 2012-06-04 02:22:13
回答 3查看 7.6K关注 0票数 5

Android:我想从麦克风中读取缓冲区,这样我就可以在它上面执行进程了,下面是我的代码

代码语言:javascript
复制
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>

每次我尝试测试这个程序时,我都会得到以下错误

06-04 00:18:17.222: E/ AudioRecord -Java(488):初始化原生AudioRecord对象时,android.media.AudioRecord错误代码-20。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-04 03:06:46

据我所知,CHANNEL_CONFIGURATION_MONO是折旧的,您应该在读入缓冲区时使用CHANNEL_IN_MONO。我在实例化AudioRecord对象时遇到了类似的问题,事实证明这就是我的解决方案。

票数 1
EN

Stack Overflow用户

发布于 2013-05-17 15:14:47

如果出现以下情况,也会引发此异常

  1. 音频录制已在进行中,或者
  2. 录制不可用,或者
  3. 应用程序没有适当的权限例如:应用程序没有录制权限等
票数 7
EN

Stack Overflow用户

发布于 2021-08-31 22:04:42

A这可能是答案吗?

参数:

audioSource -记录源。有关记录源的定义,请参阅MediaRecorder.AudioSource。

sampleRateInHz -采样率,以赫兹表示。44100 as是目前保证在所有设备上工作的唯一速率,但其他速率,如22050、16000和11025可能在某些设备上工作。

AudioFormat.SAMPLE_RATE_UNSPECIFIED意味着使用依赖于路由的值,该值通常是源的采样率。getSampleRate()可用于检索所选的实际采样率。

channelConfig -描述音频通道的配置。参见AudioFormat.CHANNEL_IN_MONO和AudioFormat.CHANNEL_IN_STEREO。AudioFormat.CHANNEL_IN_MONO保证可以在所有设备上运行。

audioFormat -返回音频数据的格式。请参见AudioFormat.ENCODING_PCM_8BIT、AudioFormat.ENCODING_PCM_16BIT和AudioFormat.ENCODING_PCM_FLOAT。

bufferSizeInBytes -录制期间写入音频数据的缓冲区总大小(以字节为单位)。新的音频数据可以在比这个大小更小的块中从这个缓冲区中读出。有关成功创建AudioRecord实例所需的最小缓冲区大小,请参阅getMinBufferSize(int,int,int)。使用小于getMinBufferSize()的值的将导致初始化失败。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10872751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档