第一部分:
背景说明: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。很心痛,也把不完善的放在博客里备份一下吧,反正是没心思再重新移植一遍了,有问题欢迎讨论。