android支持pcm格式转换,Android中Pcm文件转Amr文件

这篇博客介绍了如何在Android中将Pcm格式的音频文件转换为Amr格式,利用Android自带的media_jni.so库,通过创建AmrInputStream和AmrEncoder类实现转换。此外,还提供了测试代码和转换效果,表明160KB的pcm文件压缩后为15KB,并可正常播放。
摘要由CSDN通过智能技术生成

Android中Pcm文件转Amr文件

Android

最经在做一个聊天的模块,聊天的模块很简单:录音-上传-接收-播放

录音

录音部分可以采用MediaRecord和AudioRecord两个类进行录音.但是各有优缺点.

MediaRecord已经封装了很多方法,方便使用.

AudioRecord能获取录音的原生数据,以便对录音二次加工.

在录音过程我采用的是AudioRecord.但是AudioRecord录音数据是PCM格式,数据占用存储空间很大.必须压缩后才能传输.项目中的压缩是项目其他成员写的一个so库进行压缩的,有点不太方便.在网上翻阅了下,其实Android系统内部已经携带有压缩的库文件了.

压缩库

Android自带的有一个Pcm转amr的库:media_jni.so.

但是由于是Android系统内部的库,无法直接使用.根据网上的说明,最终终于弄明白如何使用了.

AmrInputStream

在要使用压缩库的项目中新建包:

com.android.media

在此包中新建AmrInputStream类,代码如下:

publicfinalclassAmrInputStreamextendsInputStream{

static{

System.loadLibrary("media_jni");

}

privatefinalstaticStringTAG="AmrInputStream";

// frame is 20 msec at 8.000 khz

privatefinalstaticintSAMPLES_PER_FRAME=8000*20/1000;

// pcm input stream

privateInputStreammInputStream;

// native handle

privateintmGae;

// result amr stream

privatebyte[]mBuf=newbyte[SAMPLES_PER_FRAME*2];

privateintmBufIn=0;

privateintmBufOut=0;

// helper for bytewise read()

privatebyte[]mOneByte=newbyte[1];

/**

* Create a new AmrInputStream, which converts 16 bit PCM to AMR

* @param inputStream InputStream containing 16 bit PCM.

*/

publicAmrInputStream(InputStreaminputStream){

mInputStream=inputStream;

mGae=GsmAmrEncoderNew();

GsmAmrEncoderInitialize(mGae);

}

@Override

publicintread()throwsI

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值