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

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

speex在stm32f407单片机上的移植

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

1.獲取speex源碼

官方下載:
官方地址

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

2.添加源碼文件到工程

解壓源碼包需要保證有以下幾個(gè)文件和目錄即可(圖中與移植無(wú)關(guān)的選項(xiàng)已經(jīng)刪掉,可以參考步驟1中博主移植用的源碼)

打開需要移植的工程,添加新的分組speex,把源碼目錄libspeexdsp下的.c文件全部添加進(jìn)來(lái)

其中test開頭的幾個(gè)文件可以暫時(shí)不包含,或者直接移除

添加頭文件路徑,指定源碼目錄下的include目錄

添加配置文件和相關(guān)宏

把源碼根目錄下的config.h.in文件復(fù)制到源碼的include目錄下,并改名為config.h
修改后的源碼/include目錄如下圖

把源碼/include/speex目錄下的speexdsp_config_types.h.in文件改名為speexdsp_config_types.h
修改后的源碼/include/speex目錄如下圖

在工程選項(xiàng)中添加宏HAVE_CONFIG_H,這個(gè)宏表示使用config.h文件對(duì)庫(kù)進(jìn)行配置

打開剛剛復(fù)制的config.h文件(隨便打開一個(gè).c文件,一般是第一個(gè)包含的文件,右鍵open即可),修改以下三個(gè)宏,相關(guān)功能參考文件中的注釋

#undef EXPORT --> #define EXPORT extern
#undef FLOATING_POINT–> #define FLOATING_POINT
#undef USE_SMALLFT–> #define USE_SMALLFT


打開speexdsp_config_types.h,補(bǔ)全以下幾行:

typedef short spx_int16_t;
typedef unsigned short spx_uint16_t;
typedef int spx_int32_t;
typedef unsigned int spx_uint32_t;

編譯

編譯時(shí)一定要在工程選項(xiàng)中選上c99mode,取消勾選use microlib


最后點(diǎn)擊組建即可,正常的話會(huì)是0錯(cuò)誤和若干個(gè)警告,也就是移植成功了,庫(kù)的使用手冊(cè)位于源碼/doc目錄下,參考它使用庫(kù)中的API

追加

后來(lái)調(diào)試發(fā)現(xiàn)不勾選use microlib的話程序一直不運(yùn)行,無(wú)奈只能選上,但是會(huì)報(bào)exit函數(shù)未定義的錯(cuò)誤,博主的解決辦法是在config.h的最后添加這個(gè)函數(shù)的宏定義

#define exit(a) ;

還有speex_alloc函數(shù)也是個(gè)麻煩,經(jīng)常申請(qǐng)失敗,博主后來(lái)改用了正點(diǎn)原子的外部RAM申請(qǐng)函數(shù)才勉強(qiáng)把回聲消除給跑起來(lái)了(之前回聲消除連輸出都沒(méi)有),但是串口一直提示:“started acting funny and got slapped (reset). It swears it will behave now.”,而且消除的效果和沒(méi)消基本沒(méi)差,我試著把尾部大小調(diào)大些,但是調(diào)大以后又沒(méi)有輸出了,可能內(nèi)存又吃緊了,可是能夠運(yùn)行的范圍以內(nèi)效果也并不好啊。

總結(jié)

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

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。