speex开源项目的学习
昨天讲了speex编译http://www.cnblogs.com/chef/archive/2012/07/19/2599067.html,今天又有空闲时间,简单分析一下项目中各工程的作用,以下为学习笔记。
项目是用C写的。solution中包含了以下10个project:
1.libspeex
speex动态库,核心project,用户使用的就是它,在solution中,接口头文件很贴心的放在了一个单独的文件夹中,名为Public Header Files。
2.libspeexdsp
静态库,从头文件名称可以看出,功能应该是回音抑制、抗抖动等专业算法,本以为它是由libspeex抽离出来的一个下层库,咱上层用户跟它是非耦合的。仔细看了看,发现它们并没有从属关系。后面看到的project 4依赖于1、2, 7、8、9只依赖于1,说明2和1是平级的关系,2为1的补充,当需要使用speex的一些高级功能选项时,就需要使用到2了。
3.speexdec
示例exe,功能比较全的speex解码控制台程序,输入是格式为raw PCM或者WAVE文件,输出是speex编码文件,我尝试了一下,VLC可以播放。搜索到main函数,可以看到一堆控制台参数提示信息。
4.speexenc
同上,只是编码换成解码了。
5.testdenoise
测试libspeexdsp中的噪音消除功能。
6.testecho
测试libspeexdsp中的AEC即回音抑制功能。
7.testenc
测试窄带编码。
8.testenc_uwb
使用SPEEX_MODEID_UWB初始化编码。
9.testenc_wb
测试宽带编码。
7、8、9的区别
speex三种主要的采样率8kHz、16kHz、32kHz,它们分别对应 narrowband、wideband、ultra-wideband(即7、9、8)。
那么7、8、9和4有什么区别呢?
其实它们都是很小的测试或示例程序,3可以通过控制台参数来控制编码选项(即上面所说的,使用了project 2)。个人感觉,看看9就可以动手写自己的代码了,日后需要用到一些选项时(应该是做优化工作)再去看manual手册+project 4。
10.testresample
这个工程有点搞,里面就一个名为testresample.c的文件,可是竟然不存在!这个工程依赖于libspeexdsp,个人感觉(我又开始猜了)应该是测试resample功能的。
manual手册关于resamper的说明:
在一些情况下,把音频从一种抽样率(sampling rate)转化成另一种是很有用的。比如说以下场景:混合不同抽样率的流,有的抽样率声卡不支持,转码等等。所以我们需要resampler。
后记:
speex项目中各工程作用就简单分析到这了,真要使用speex的话,看manual文档是必不可少的。日后如果有时间继续学习speex,我会把笔记分享上来的。