日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

speex在stm32f407单片机上的移植

發布時間:2023/12/2 编程问答 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 speex在stm32f407单片机上的移植 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近做的網絡語音的項目需要用到speex中的一些功能,查了一下資料發現移植給mcu的經驗大多零零碎碎,自己搗鼓了一晚上總算是移植好了,寫個博客記錄一下。

1.獲取speex源碼

官方下載:
官方地址

博主移植用的源碼以及移植好的工程下載:
提取碼552i

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.”,而且消除的效果和沒消基本沒差,我試著把尾部大小調大些,但是調大以后又沒有輸出了,可能內存又吃緊了,可是能夠運行的范圍以內效果也并不好啊。

總結

以上是生活随笔為你收集整理的speex在stm32f407单片机上的移植的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。