第一部分:
背景說明: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。很心痛,也把不完善的放在博客裏備份一下吧,反正是沒心思再重新移植一遍了,有問題歡迎討論。