美文网首页Android专题
安卓并行录音:PCM编码为AMR格式

安卓并行录音:PCM编码为AMR格式

作者: DD_Dog | 来源:发表于2019-02-20 10:52 被阅读99次

需求

项目中需要进行并行录音,即:

  1. 录音PCM数据,通过Socket发送到客户端
  2. 本地保存一份amr格式的音频文件

可行的方法

安卓中有两种方式可以录制音频:

  1. AudioRecorder 更灵活,如果需要特定格式的音频需要自己来做工作
  2. MediaRecorder 封装性更好,可以直接录音特定格式的音频,但是拿不到原始PCM数据

但是有一点AudioRecorder和MediaRecorder在安卓系统中不能同时工作,所以我采用的方法是:通过AudioRecorder录制,再进行编码为AMR格式。

实现

  1. 首先是要使用AudioRecorder进行录制,这个网上很多用例。
  2. PCM编码为AMR格式,使用的是一个开源库opencore-amr-android,它可以直接把PCM数据转为AMR格式

遇到的问题

由于PCM要求为16K采样率,16BIT精度,而AMR_NB格式为8k采样,所以如果直接进行编码会导致声音低沉且速度变慢。
这时就需要重采样,即把16K采样率下采样为8K采样率,具体算法如下 :

    /**
     * 下采样 16K-8K
     *
     * @param in
     * @return
     */
    private short[] downSample(short[] in) {
        short[] down = new short[in.length / 2];
        for (int i = 0, j = 0; i < in.length; i += 2, j++) {
            down[j] = in[i];
        }
        return down;
    }

进行重采样后再进行AMR编码就正常了。

相关文章

  • 安卓并行录音:PCM编码为AMR格式

    需求 项目中需要进行并行录音,即: 录音PCM数据,通过Socket发送到客户端 本地保存一份amr格式的音频文件...

  • iOS PCM转成WAV

    最近做录音的时候为了和安卓端统一,需要将pcm格式的录音文件转为wav格式的文件。 背景知识 PCM PCM (P...

  • 安卓录制MP3(一) - 数字音频基础

    在安卓上实现录音功能有两种方式使用AudioRecord录制PCM裸流,或者用MediaRecorder录制编码后...

  • Android音频开发之MediaRecord/Player

    /** 已经集成了录音、编码、压缩等,支持少量的录音音频格式,大概有.aac(API = 16) .amr .3g...

  • 使用amr.js播放"amr"格式的录音文件

    问题所在:做项目的时候,要求能在平台端播放app上传而来的录音文件,而安卓端目前只能录制"amr"、"3gp"格式...

  • vue.js实现audio播放amr格式音频

    纯前端解码、播放、录音、编码 AMR 音频,无须服务器支持,基于 [amr.js]注意:由于使用了 amr.js ...

  • NDK--利用AudioTrack播放FFmpeg解码后的音频流

    上次已经得到PCM编码的音频流,今天来实现播放PCM音频流,使用安卓提供的AudioTrack,方法很简单,在na...

  • PCM WAV

    pcm(不压缩),也称为raw格式。音频输入最原始的格式,不用再解码。 wav(不压缩,pcm编码):在pcm文件...

  • benz-amr-recorder

    benz-amr-recorder 纯前端解码、播放、录音、编码AMP音频,无需服务器支持,基于amr.js和Re...

  • iOS 音频开发(录音转换上传)

    最近做的项目有需要录音上传的功能。遇到一些坑,在此记录下。 ios的录音格式默认的为wav。但是这个格式安卓无法读...

网友评论

    本文标题:安卓并行录音:PCM编码为AMR格式

    本文链接:https://www.haomeiwen.com/subject/uxecyqtx.html