导航

    全志在线开发者论坛

    • 注册
    • 登录
    • 搜索
    • 版块
    • 话题
    • 在线文档
    • 社区主页

    嵌入式 TTS 语音引擎 ---- ekho嵌入式Linux编译全过程

    其它全志芯片讨论区
    ttsy引擎 ekho
    1
    3
    3155
    正在加载更多帖子
    • 从旧到新
    • 从新到旧
    • 最多赞同
    回复
    • 在新帖中回复
    登录后回复
    此主题已被删除。只有拥有主题管理权限的用户可以查看。
    • M
      memory LV 7 最后由 whycan 编辑

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

      原文链接:https://blog.csdn.net/qq_23235811/article/details/103275193

      1 条回复 最后回复 回复 引用 分享 0
      • M
        memory LV 7 最后由 编辑

        http://www.eguidedog.net/ekho.php

        试了一下 ekho 在线文字转语音引擎,感觉效果好尴尬。

        比起百度和讯飞,效果不是差一点点。

        1 条回复 最后回复 回复 引用 分享 0
        • M
          memory LV 7 最后由 编辑

          linux——ekho7.7.1(最新版)语音合成库的安装与编译
          前言

          TTS技术,TTS是Text To Speech的缩写,即“从文本到语音”。它将计算机自己产生的、或外部输入的文字信息转变为可以听得懂的、流利的汉语口语(或者其他语言语音)输出的技术,隶属于语音合成(SpeechSynthesis)。

          Ekho(余音)是一个免费、开源的中文语音合成(TTS)软件。它目前支持粤语、普通话(国语)、广东台山话、诏安客语、藏语、雅言(中国古代通用语)和韩语(试验中),英语则通过eSpeak或Festival间接实现。Ekho支持Linux、Windows和Android平台。

          下载源码包
          下载地址:http://www.eguidedog.net/ekho.php

          Ekho支持Linux和Windows平台,使用时需要同时下载源文件和声音数据,解压到"jyutping"或"pinyin"。(以jyutping开头的声音数据是粤语,而以pinyin开头的声音数据是国语。文件名中的44100和16000表示的是采样率。采样率高意味着声音质量高。)

          支持库的安装

          sudo apt-get install libespeak-dev libsndfile1-dev libpulse-dev \
          libncurses5-dev libestools-dev festival-dev libvorbis-dev \
          libmp3lame-dev libdotconf-dev texinfo
          

          配置、编译及安装:
          如果需要阅读英语,则需要配置编译Festival,在configure选项中加上–enable-festival,如果需要编译speech-dispatcher API和支持屏幕阅读的话,就加上–enable-speechd。(speech-dispatcher是一个平台独立的语音合成API,其框架是基于client/server模型的,两者通信是通过TCP连接使用Speech Synthesis Independent Protocol (SSIP)协议通信或者接口库通信的。)
          解压源码包:
          $ tar xvf ekho-7.7.1.tar.xz

          源码包里的主要文件如下;
          speechd-api:speech-dispatcher API(平台独立的语音合成API);
          sonic:一个语音变速的算法实现;
          ekho-data:ekho的字典文件和声音数据,TTS是通过文本分析,再查找字典,找到对应的声音数据,然后通过语音合成出来的;
          Utfcpp:处理Unicode编码字符串的库。
          src:(ekho的主要实现)和lib(上面说的这几部分的静态链接库*.a)了,就没什么特别的了。

          编译安装:

          $ ./configure
          $ make
          $ sudo make install
          

          安装后,ekho这个可执行文件和声音数据ekho-data都会复制到系统目录下。但是好像头文件(除ekho.h外)和库等就没有复制进去,所以编程链接时需要注意指定位置。

          指令使用及测试
          ekho指令的使用方法如下:

          Ekho text-to-speech engine.
          Version: 7.7.1
          
          Syntax: ekho [option] [text]
          -v, --voice=VOICE
                  Specified language or voice. ('Cantonese', 'Mandarin', 'Toisanese', 'Hakka', 'Tibetan', 'Ngangien' and 'Hangul' are available now. Mandarin is the default language.)
          -l, --symbol
                  List phonetic symbol of text. Characters' symbols are splited by space.
          -f, --file=FILE
                  Speak text file. ('-' for stdin)
          -o, --output=FILE
                  Output to file.
          -t, --type=OUTPUT_TYPE
                  Output type: wav(default), ogg or mp3
          -p, --pitch=PITCH_DELTA
                  Set delta pitch. Value range from -100 to 100 (percent)
          -a, --volume=VOLUME_DELTA
                  Set delta volume. Value range from -100 to 100 (percent)
          -s, --speed=SPEED
                  Set delta speed. Value range from -50 to 300 (percent)
          --english-speed=SPEED
            Set English delta speed. Value range from -50 to 150 (percent)
          --server
                  Start Ekho TTS server.
          --request=TEXT
                  Send request to Ekho TTS server.
          --port
                  Set server port. Default is 2046.
          --version
                  Show version number.
          -h, --help
                  Display this help message.
          
          Please report bugs to Cameron Wong (hgneng at gmail.com)
          

          如上,-v是选择语种,-p是设置音高(与声音的频率相关),-a是设置音量,-s是设置语速。
          下面来测试一个很魔性的声音,当时测试乐了半天,O(∩_∩)O哈哈~

          ekho -p 200 "改革春风吹满地 中国人民真争气"
          

          1
          编程举例,依据网站(http://www.eguidedog.net/doc/doc_programme_with_ekho.php) 的指导一个测试例子try.cpp。

          try.cpp文件:

          #include "config.h"
          #include "ekho.h"
          
          using namespace ekho;
          
          int main ( int argc , char **argv)
          {
                  Ekho wong("Cantonese");
                  wong.blockSpeak("改革春风吹满地 中国人民真争气");
          
                  return 0;
          }
          

          编译的话,因为依赖的库比较多,所以最好在该目录下写个sheel脚本build.sh,如下:

          g++ try.cpp libekho.a -pthread \
            -I. -Iutfcpp/source -Isonic -lsndfile \
            `pkg-config --libs libpulse-simple` `pkg-config --cflags libpulse-simple`
          

          运行./build.sh后报错了:

          从上面的错误提示可知,缺少espeak库和musicxml库,添加-lespeak和./libmusicxml/libmusicxml2.a即可。

          g++ try.cpp libekho.a ./libmusicxml/libmusicxml2.a -pthread \
            -I. -Iutfcpp/source -Isonic -lsndfile -lespeak\
            `pkg-config --libs libpulse-simple` `pkg-config --cflags libpulse-simple`
          

          运行a.out,播放了测试程序中文本对应的语音。

          ————————————————

          原文: https://blog.csdn.net/u014470361/article/details/84771720

          1 条回复 最后回复 回复 引用 分享 0
          • 1 / 1
          • First post
            Last post

          Copyright © 2024 深圳全志在线有限公司 粤ICP备2021084185号 粤公网安备44030502007680号

          行为准则 | 用户协议 | 隐私权政策