首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Android AMR-WB编码问题

Android AMR-WB编码问题
EN

Stack Overflow用户
提问于 2020-04-26 05:03:15
回答 1查看 195关注 0票数 0

我正在尝试使用Android Oreo的AMR-WB编码功能,使用AudioRecorder对实时麦克风捕获PCM进行编码。编码没有任何例外,但编码的语音数据似乎并不完美。下面是代码的样子:

我的AudioRecord设置:

代码语言:javascript
复制
        int audioSource = MediaRecorder.AudioSource.MIC;
        int sampleRateInHz = 8000;
        int channelConfig = AudioFormat.CHANNEL_IN_MONO;
        int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
        int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat);
        AudioRecord ar = new AudioRecord(audioSource, sampleRateInHz, channelConfig, audioFormat, bufferSize);

MediaCodec设置:

代码语言:javascript
复制
        MediaCodec mc = MediaCodec.createEncoderByType(MediaFormat.MIMETYPE_AUDIO_AMR_WB);
        MediaFormat mf = MediaFormat.createAudioFormat(MediaFormat.MIMETYPE_AUDIO_AMR_WB, 4000, 1);
        mf.setInteger(MediaFormat.KEY_BIT_RATE, 6600);
        mc.configure(mf, null, null, MediaCodec.CONFIGURE_FLAG_ENCODE);
        mc.start();

录制循环:

代码语言:javascript
复制
                    int srcLength = ar.read(buffer, 0, bufferSize); // reads 640 bytes


                    int ibufferId = mc.dequeueInputBuffer(-1);
                    ByteBuffer ibuffer = mc.getInputBuffer(ibufferId);
                    ibuffer.position();
                    ibuffer.put(buffer, 0, srcLength);
                    mc.queueInputBuffer(ibufferId, 0, srcLength, 0, 0);
                    int obufferId = mc.dequeueOutputBuffer(bufferInfo, -1);
                    if (obufferId == INFO_OUTPUT_FORMAT_CHANGED) {
                        obufferId = mc.dequeueOutputBuffer(bufferInfo, -1);
                    }
                    ByteBuffer obuffer = mc.getOutputBuffer(obufferId); // has 18 bytes                        

                    mc.releaseOutputBuffer(obufferId, false);

如果我将输出字节(obuffer)写入文件,并尝试使用VLC播放器播放它,它会比正常情况下更快地播放音频。

这个问题有没有可能的解决方案?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-26 06:44:16

我自己找到了答案。对于清晰的AMR音频,源PCM采样率必须为16000。我不知道为什么会这样。

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

https://stackoverflow.com/questions/61432575

复制
相关文章

相似问题

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