Speex说一种有损的语音压缩算法,可以极大的压缩语音文件大小。
官网地址
个人认为翻译文档最全的地址
简单说下个人理解:
- 我们需要知道speex的数据帧概念,还要知道音频的采样率、比特率等基本概念。
- speex默认的三种模式,nb,wb,uwb对应的采样率分别是8000,16000,32000;其对应的帧大小分别为:160,320,640.这点很重要。
- 我们需要知道不同采样率,不同压缩质量下,其对应的压缩前后数据大小,对于我们解压来说很重要。
网上目前大多数都是基于nb,也就是8000采样率的例子。本文是16000,也就是wb模式,压缩质量为8.其对应的帧、压缩前数据大小、压缩后数据大小为:320,640,70.我们这里采用的是定长压缩。没有用动态压缩,动态情况下,压缩后数据大小不可知。
环境介绍
- speex框架:开源的speex4j
- springboot 2.4.4
pom依赖
压缩代码很简单如下:
说明:
- 如果流式处理压缩,请使用SpeexEncoder和SpeexDecoder类,不要直接使用speexUtils类。
- 如果流式压缩,请在每次压缩/解压时传入帧数的整数倍,对于我们这里来说就是压缩时,每次传入640的整数倍数据,解压时传入71的整数倍。
- 来说下,为什么是71.上文说了,speex,wb模式,质量8,定长压缩的话,其压缩后数据大小是70.但是speex4j,自己在压缩数据头增加了一个字节用于记录当前压缩后数据大小。因此,使用speex4j会多出一个头字节。我们自己解压时也需要注意,将该字节剔除。
终端so库封装
可以参考上文里面提到的文档最全的地址。也可以参考本文,其实,本文就是参照上面内容来做的。
- 登录speex官网,下载源码,本文下载的是1.20版本
- 新建android项目
- 在项目根目录下,新建jni目录,并将speex的include和libspeex文件夹拷贝到该目录下:
- 进入jni/include/speex/目录,新建speex_config.type.h头文件。内容如下:
- 进入jni目录,新建Android.mk内容如下:
请注意,这里引入的c文件,一定适合include目录下对应的。请根据自己下载speex源码做增减。
- 新建Application.mk
这里我们编译全环境
- 创建我们自己的逻辑文件,speex_jni.cpp
版权声明:
本文来源网络,所有图片文章版权属于原作者,如有侵权,联系删除。
本文网址:https://www.mushiming.com/mjsbk/10719.html