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

简介: 笔记

需求


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

  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编码就正常了。

目录
相关文章
|
7月前
|
开发工具 Android开发
Android平台GB28181设备接入端语音广播支持PS格式
对接Android平台GB28181设备接入端语音广播的时候,我们有遇到过INVITE SDP需要PCMA格式的audio,对方同时回了PS和PCMA两种,然后,发数据的时候,直接发了PS的。
132 0
|
4月前
|
XML JSON Java
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
Android App网络通信中通过okhttp调用HTTP接口讲解及实战(包括GET、表单格式POST、JSON格式POST 附源码)
170 0
|
10月前
|
Java 开发工具 Android开发
Android dx工具(jar包转成dex格式二进制jar包工具)
Android dx工具(jar包转成dex格式二进制jar包工具)
620 0
|
Shell Android开发
Android 如何将 data 分区格式由 ext4 转为 f2fs
Android 如何将 data 分区格式由 ext4 转为 f2fs
601 0
|
JSON IDE API
Android AAB 格式介绍
Google 自8月起要求 Google Play 上架的应用必须采用 AAB 的新格式,这是否是西方敌对势力为了打压鸿蒙而出台又一策略?
1127 0
|
编解码 vr&ar Android开发
Android FFmpeg 转换MP3格式
Android FFmpeg 转换MP3格式
200 0
|
API Android开发 内存技术
android 采集PCM音频数据并播放(支持USB摄像头MIC)
android 采集PCM音频数据并播放(支持USB摄像头MIC)
457 0
|
Android开发
Android中对格式控制符的支持
Android中对格式控制符的支持
|
Android开发
安卓中显示表格并将表格数据以excel格式导出
安卓中显示表格并将表格数据以excel格式导出
367 0
|
Android开发 内存技术
嵌入式实践教程--Android音视频开发(二)-OpenSLES播放PCM数据
嵌入式实践教程--Android音视频开发(二)-OpenSLES播放PCM数据