speex在stm32f407单片机上的移植

    最近做的网络语音的项目需要用到speex中的一些功能,查了一下资料发现移植给mcu的经验大多零零碎碎,自己捣鼓了一晚上总算是移植好了,写个博客记录一下。

1.获取speex源码

官方下载:
官方地址

博主移植用的源码以及移植好的工程下载:
点此免费下载

2.添加源码文件到工程

解压源码包需要保证有以下几个文件和目录即可(图中与移植无关的选项已经删掉,可以参考步骤1中博主移植用的源码)
在这里插入图片描述
打开需要移植的工程,添加新的分组speex,把源码目录libspeexdsp下的.c文件全部添加进来
在这里插入图片描述
其中test开头的几个文件可以暂时不包含,或者直接移除
在这里插入图片描述
添加头文件路径,指定源码目录下的include目录
在这里插入图片描述

添加配置文件和相关宏

把源码根目录下的config.h.in文件复制到源码的include目录下,并改名为config.h
修改后的源码/include目录如下图
在这里插入图片描述

把源码/include/speex目录下的speexdsp_config_types.h.in文件改名为speexdsp_config_types.h
修改后的源码/include/speex目录如下图
在这里插入图片描述

在工程选项中添加宏HAVE_CONFIG_H,这个宏表示使用config.h文件对库进行配置
在这里插入图片描述
打开刚刚复制的config.h文件(随便打开一个.c文件,一般是第一个包含的文件,右键open即可),修改以下三个宏,相关功能参考文件中的注释

#undef EXPORT --> #define EXPORT extern
#undef FLOATING_POINT–> #define FLOATING_POINT
#undef USE_SMALLFT–> #define USE_SMALLFT
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

打开speexdsp_config_types.h,补全以下几行:

typedef short spx_int16_t;
typedef unsigned short spx_uint16_t;
typedef int spx_int32_t;
typedef unsigned int spx_uint32_t;
在这里插入图片描述

编译

编译时一定要在工程选项中选上c99mode,取消勾选use microlib
在这里插入图片描述
在这里插入图片描述
最后点击组建即可,正常的话会是0错误和若干个警告,也就是移植成功了,库的使用手册位于源码/doc目录下,参考它使用库中的API
在这里插入图片描述

追加

后来调试发现不勾选use microlib的话程序一直不运行,无奈只能选上,但是会报exit函数未定义的错误,博主的解决办法是在config.h的最后添加这个函数的宏定义

#define exit(a) ;
在这里插入图片描述
还有speex_alloc函数也是个麻烦,经常申请失败,博主后来改用了正点原子的外部RAM申请函数才勉强把回声消除给跑起来了(之前回声消除连输出都没有),但是串口一直提示:“started acting funny and got slapped (reset). It swears it will behave now.”,而且消除的效果和没消基本没差,我试着把尾部大小调大些,但是调大以后又没有输出了,可能内存又吃紧了,可是能够运行的范围以内效果也并不好啊。

  • 4
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快点长大

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值