语音合成(中文)

本文介绍了科大讯飞TTSSDK的离线语音合成SDK安装过程,espeak的命令行使用及中文包安装,以及pyttsx3库的安装和中文支持问题。作者对比了这些工具的优缺点,包括espeak只能命令行且发音机械,而pyttsx3在中文支持上的局限性。
摘要由CSDN通过智能技术生成

1 科大讯飞TTS SDK

PS:只能生成.wav文件,无法直接播报

  1. 科大讯飞官网下载离线语音合成(普通版)SDK

  2. 新建目录Demo,将SDK中bin、include、libs文件夹和sample里的64bit_make.sh、Makefile、tts_offline_sample.c复制到新建工程“Demo”文件夹下

  3. 修改libmsc.so库搜索路径

    1. 修改.sh文件:
    export LD_LIBRARY_PATH=$(pwd)/libs/x64/
    

    b. 修改makefile文件:

    DIR_INC = ./include
    DIR_BIN = ./bin
    DIR_LIB = ./libs
    

    c. 修改.c文件:

    #include "./include/qtts.h"
    #include "./include/msp_cmn.h"
    #include "./include/msp_errors.h"
    
  4. cd到demo目录下,执行“source 64bit_make.sh”完成编译

  5. cd到bin目录下运行目标文件,SDK启动后,bin/msc目录下会生成日志(注意:msc文件夹下需有msc.cfg文件)

  6. 如果第4步出现问题

(ros) jun@jun:~/catkin_ws/src/tts/bin$ ./tts_offline_sample
./tts_offline_sample: symbol lookup error: /lib/libmsc.so: undefined symbol: _ZTVN10__cxxabiv117__class_type_infoE

解决:sudo cp /home/jun/catkin_ws/src/tts/libs/x64/libmsc.so /usr/lib

2 espeak安装使用

  1. sudo apt install espeak
  2. 直接命令行使用:
    1. 中文播报:espeak -vzh "你好”
    2. 英文播报:espeak "hello”
  3. 代码调用
import os
# cmdline = 'espeak ' +  "hello" 
# 程序中说中文(注意格式,espeak与-vzh有空格, 中文:你好之前也有空格)
cmdline = 'espeak -vzh ' +  "你好"  
os.system(cmdline)
  1. 在命令行使用时发现

espeak -vzh 你好 #报错:Full dictionary is not installed for ‘zh’
espeak -vzhy 你好 #粤语,但说的不是人话

解决:

git clone https://github.com/caixxiong/espeak-data.git 
解压后直接替换 /usr/lib/x86_64-linux-gnu/espeak-data 这个目录即可
cd /usr/lib/x86_64-linux-gnu
sudo cp -r ~/XXX/espeak-data/* espeak-data
cd espeak-data
sudo espeak --compile=zh
sudo espeak --compile=zhy	# 成功,但是是蹩脚粤语
  1. 优缺点:
    1. 优点:支持中英文
    2. 缺点:只能命令行使用,机械音较重,不流畅

3 pyttsx3安装使用

我在使用过程中发现无法播报中文

  1. 安装中文TTS引擎,例如Festival或Flite。使用以下命令安装:

    sudo apt update
    sudo apt install festival # 或者 sudo apt-get install flite
    
  2. 安装中文语音包,例如Mandarin。使用以下命令安装:

    sudo apt-get install festvox-ellpc11k # 或者 sudo apt-get install festvox-cmu_us_slt_arctic_hts
    
  3. 安装pyttsx3库,使用以下命令:

    pip3 install pyttsx3
    
  4. 在Python脚本中使用pyttsx3库,可以按照以下示例代码编写一个简单的脚本:

    import pyttsx3
    
    engine = pyttsx3.init()
    engine.setProperty('voice', 'english+f3') # 设置英文发音
    engine.say('Hello, World!') # 播放英文语音
    engine.setProperty('voice', 'default') # 设置中文发音
    engine.say('你好,世界!') # 播放中文语音
    engine.runAndWait()
    
  5. 使用中发现无法播报中文,列举尝试解决的方法之一,如下:(其他方法大同小异,均失败)

    把系统里的可用语音包的信息print出来

    import pyttsx3
    engine = pyttsx3.init()
    voices = engine.getProperty('voices')
    for voice in voices:
    print("Voice:")
    print(" - ID: %s" % [voice.id](http://voice.id/))
    print(" - Name: %s" % [voice.name](http://voice.name/))
    print(" - Languages: %s" % voice.languages)
    print(" - Gender: %s" % voice.gender)
    print(" - Age: %s" % voice.age)
    

    然后把刚才代码输出的语音包ID信息储存起来

    zh_voice_id = "Mandarin"
    engine.setProperty('voice', zh_voice_id) # 用语音包ID来配置engine
    engine.say('这回可以了吧')
    engine.runAndWait()
    
  6. 优缺点:

    1. 优点:可以直接在代码中使用该库
    2. 缺点:无法播报中文(可能是我电脑的原因)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值