ekho嵌入式Linux移植全過程

第一部分:
背景說明:Ekho(餘音)是一個把文字轉換成聲音的軟件。它目前支持粵語、普通話(國語)、
詔安客語、藏語、雅言(中國古代通用語)和韓語(試驗中),英文則通過Festival間接實現。
ekho的大致框架流程是
1:讀取文本字符
2: 查字典匹配對應的音頻信號數據
3:將音頻信號通過pulseaudio送入聲卡發聲。


第二部分,配置,交叉編譯
相關依賴的關係
ekho   ---->libsndfile
       
       ---->libespeak -->libportaudio
       
       ---->pulseaudio 不編譯該庫的話,可以使用--without-pulseaudio禁用
       
下載源碼相關的源碼
portaudio_v18_1.zip,espeak-1.48.04-source.zip,libsndfile-master.zip,ekho-7.7.1.tar.xz
交叉工具鏈相關
CC=aarch64-xx-gcc
CXX=aarch64-xx-g++
AR=aarch64-xx-ar
STRIP=aarch64-xx-strip

1)編譯portaudio_v18_1.zip
unzip portaudio_v18_1.zip
cd portaudio_v18_1
修改文件格式轉換:configure、config.sub、config.guess、Makefile(後面./configure生成),以configure爲例,
在linux下移植修改方式如下:
vi configure
:set ff = unix
:wq
./configure --prefix=/a64/core/software/tts/dinstall --host=aarch64-linux CC=aarch64-linux-gcc 
CXX=aarch64-linux-g++  AR=aarch64-linux-ar STRIP=aarch64-linux-strip

修改Makefile
1.1  在CFLAGS加上-fPIC解決動態庫重定向的問題,具體爲:CFLAGS = -g -O2 -Ipa_common -fPIC
1.2  解決libportaudio.so.0.0.18目標找不到,  具體操作:將bin:mkdir bin 和 lib:mkdir lib修改爲bin/: mkdir bin lib/: mkdir lib
make all
make install或者手動拷貝下庫和資源文件

2)編譯espeak-1.48.04-source.zip
unzip espeak-1.48.04-source.zip
cd espeak-1.48.04-source/src
make CC=aarch64-linux-gcc LDFLAGS=-L/a64/core/software/tts/dinstal/lib CPPFLAGS=-I/a64/core/software/tts/dinstal/include 
CXX=aarch64-linux-g++ AR=aarch64-linux-ar STRIP=aarch64-linux-strip
make install或者手動拷貝下庫和資源文件

3)編譯libsndfile-master.zip
unzip libsndfile-master.zip
cd libsndfile-master.zip
./configure --prefix=/a64/core/software/tts/dinstal/ --host=aarch64-linux-gcc CXX=aarch64-linux-g++  
AR=aarch64-linux-ar STRIP=aarch64-linux-strip
make
make install

4)編譯ekho-7.7.1.tar.xz
tar xvJf ekho-7.7.1.tar.xz
cd ekho-7.7.1
./configure --prefix=/a64/core/software/ekho/  
--host=aarch64-linux  CC=aarch64-linux-gcc CXX=aarch64-linux-g++ 
--enable-festival --enable-speechd --enable-shared

LDFLAGS=-L/a64/buildroot-2019.02.4/output/staging/usr/lib 
CPPFLAGS=-I/a64/buildroot-2019.02.4/output/staging/usr/include 
CFLAGS=-I/a64/buildroot-2019.02.4/output/staging/usr/include

先修改下Makefie編譯libmusicxml
修改libmusicxml/samples下的Makefile中的gcc修改爲交叉編譯工具鏈
cd libmusicxml/linux
make clean 
make CC=aarch64-linux-gcc CXX=aarch64-linux-g++
cd ekho-7.7.1
註釋掉config.h文件中define malloc rpl_malloc的宏定義
make clean
make  CFLAGS="$CFLAGS -g -O0 -rpath"

注:

在Linux下ekho需要pulseaudio的支持,沒有pulseaudio的話ekho即使編譯過了也是不能發聲的。我這裏目前使用了buildroot2019直接在make menuconfig的時候選中pulseaudio就行,另外建議這些依賴的源碼包的安裝目錄最好放在buildroot的sysroot目錄下,編譯ekho直接鏈接到buildroot的sysroot目錄編譯就行。另外上面有些源碼包也是可以在buildroot裏面直接選中的,可以多找找,能夠通過buildroot編譯的就不要自己手動移植,都9012年還一個個源碼包手動移植就太落後了哈哈哈哈哈。也可能還漏了一兩個buildroot裏沒有源碼包的手動移植。

 測試命令:

ekho -v English -a -70 -s -40 -f filename

詳細命令信息請ekho -h

目前這個文檔是我很久以前弄的不完善的一個,完善的那個貌似被自己隨手刪了T-T。很心痛,也把不完善的放在博客裏備份一下吧,反正是沒心思再重新移植一遍了,有問題歡迎討論。


 

發佈了16 篇原創文章 · 獲贊 3 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章