牵着老婆满街逛

严以律己,宽以待人. 三思而后行.
GMail/GTalk: yanglinbo#google.com;
MSN/Email: tx7do#yahoo.com.cn;
QQ: 3 0 3 3 9 6 9 2 0 .

speex开源项目的学习

转载自:http://www.cnblogs.com/chef/archive/2012/07/20/2600846.html

    昨天讲了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,我会把笔记分享上来的。

posted on 2012-11-23 11:37 杨粼波 阅读(1796) 评论(0)  编辑 收藏 引用 所属分类: 文章收藏


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理