speex是一个开源的基于CELP算法的音频编解码器。这个算法早在1985年就已经公开了,应该不会遇到什么licence的问题了。相信做音频和voip的朋友对它一定都非常熟悉。
speex的主要特点如下:
(1)开源的软件,而且完全免费———如果你愿意赞助的话,可以通过与他们取得联系
(2)使用嵌入式比特流,使编解码器可以适应高带宽和低带宽的不用应用场合
(3)支持各种不同的比特率情况下的编解码(从2.15kbps到44kbps)
(4)支持动态比特率切换(AMR)和变比特率操作(VBR)
(5)在VBR中集成了语音活跃检测(VAD),支持不连续传输(DTX)
(6)支持混音(Variable complexity)
(7)嵌入宽带结构(支持可缩放的采样率)
(8)支持32KHz极端的宽频模式(Utra-wideband mode)
(9)支持增强双声道编码
(10)采用Fix-point实现方式,加快运行速度
不光如此,它还可以支持AEC,基于声学的回音消除功能。
那么这个东西如何在win32环境下面编译呢?我以我能拿到的最新版本speex-1.2beta2在vs2003环境下面的编译为例来说明一下:
(1)首先编译libspeex
这个库分为静态(lib)和动态(dll)两个版本,可以依照需要分别编译使用。
从他们的maillist可以看出,他们对于linux环境下面的speex还是比较放心的,但是没有更新win32下面的这些工程文件。这样势必导致我们编译的时候会遇到一些问题。
首先的问题就是#include 这个文件打不开,可以到 这里下载libogg,解压然后编译它的win32版本,这个还是没问题的。编译完毕后,会生成一个libogg_static_d.lib,我们把libogg的include路径和lib路径以及链接中需要添加的lib加到当前的libspeex工程中,这样第一步就差不多了。
编译还会提示没有找到medfilter.c这个文件,通过查看它的changelog就知道已经没用了,所以直接从解决方案管理器里面删除掉这个.c文件即可。
然后可以顺利编译了,但是要注意这些还没完根据change log,我们可以看到它还少了一个window.c这个文件,你可以从libspeex目录中找到,把它加入到当前的项目中即可(这个问题让我都要疯狂了,明明编译出来了lib但是在程序中总是提示什么unsolved external _lpc_window之类的云云)。原来问题在这里。
(2)然后编译几个自带的enc和dec程序
这里需要说明的是,在enc和dec工程中需要添加libogg_static_d.lib,libspeex.lib以及各自的include和lib的路径。然后,需要把src目录下面的skeleton.c和skeleton.h都添加到当前的enc或者dec项目中才有可能真正生成可以使用的exe程序。
这个东西总算可以用了,心情舒畅中!!但愿它能够帮助我解决voip中的回音问题。
阅读(6928) | 评论(2) | 转发(0) |