HowTo文档
如何在 XSwitch 中使用 Edge TTS
在如何使用 XSwitch 内置的离线 ASR 及 TTS中我们已经学会如何使用离线 ASR 及 TTS,但由于espeak-ng
放出来的声音不好听,在我们不懈努力下,终于找到一个声音更加清晰流畅且可以免费使用的的 TTS 引擎edge-tts。
文末有edge-tts
和espeak-ng
生成的音频实例,以供大家参考。
本文中所讲 TTS 是基于mod_tts_commandline
模块实现的,上一篇文章已经说明如何使用该模块,不再赘述。
为了防止XSwitch
镜像体积过大,XSwitch 中默认不带edge-tts
,如果需要使用,可以自行安装:
make bash # 进入XSwitch容器 apt-get update # 更新Linux软件源数据 apt-get install python3-pip # 安装Python pip pip install edge-tts # 安装edge-tts
安装完成后,可以在容器内使用以下命令测试是否成功:
edge-tts --text "Hello world" --write-media /tmp/hello.mp3
可以在宿主机上使用如下命令将该文件从容器中 Copy 出来:
docker cp xswitch:/tmp/hello.mp3 .
如果这个声音文件正常,那表示 edge-tts 已经安装成功了。如果有其它问题可以参见edge-tts。
接下来我们开始改造它,目的是能让它根据Voice
类型自动选择需要使用的TTS
模型。
配置路由规则
上一篇文章中我们提到在“文本”框中填入以下内容:
answer speak tts_commandline|zh|你好,欢迎致电烟台小樱桃网络科技有限公司
上面这种方式使用的是默认TTS
引擎是espeak-ng
,XSwitch 内置,但是不大好听。
接下来我们修改“文本”框中的内容如下:
answer speak tts_commandline|zh-CN-XiaoxiaoNeural|你好,欢迎致电烟台小樱桃网络科技有限公司
其中zh-CN-XiaoxiaoNeural
是edge-tts
提供的Voice
。下面是edge-tts
常用的部分Voice
列表:
ShortName | Gender | Locale |
---|---|---|
zh-CN-XiaoxiaoNeural | Female | zh-CN |
zh-CN-XiaoyiNeural | Female | zh-CN |
zh-CN-YunjianNeural | Male | zh-CN |
zh-CN-YunxiNeural | Male | zh-CN |
zh-CN-YunxiaNeural | Male | zh-CN |
zh-CN-YunyangNeural | Male | zh-CN |
zh-TW-HsiaoChenNeural | Female | zh-TW |
zh-HK-HiuMaanNeural | Female | zh-HK |
en-IE-EmilyNeural | Female | en-IE |
en-US-AriaNeural | Female | en-US |
en-US-GuyNeural | Male | en-US |
en-US-JennyNeural | Female | en-US |
en-GB-SoniaNeural | Female | en-GB |
cy-GB-NiaNeural | Female | cy-GB |
可通过edge-tts --list-voice
查询全部的Voice
。
然后当我们呼叫tts
测试时,mod_tts_commandline
会识别到我们使用的Voice
是zh-CN-XiaoxiaoNeural
,它会自动选用edge-tts
为我们播放离线TTS
语音。
注意,由于edge-tts
合成的音频文件格式为.mp3
,需要确保在 XSwitch 中提前加载了mod_shout
模块,否则会出现不支持mp3
格式的报错!
tts.sh
实例如下,也可根据你的实际需要进行修改:
#!/bin/sh voice=$1; file=$2; text=$3; if [ -f "$file" ]; then exit fi case "$voice" in "zh-CN-XiaoxiaoNeural" \ | "zh-CN-YunyangNeural" \ | "zh-CN-YunxiNeural" \ | "zh-CN-XiaoyiNeural" \ | "zh-CN-YunjianNeural" \ | "zh-CN-YunxiaNeural" \ | "zh-TW-HsiaoChenNeural" \ | "zh-HK-HiuMaanNeural" \ | "en-IE-EmilyNeural" \ | "en-US-AriaNeural" \ | "en-US-GuyNeural" \ | "en-US-JennyNeural" \ | "en-GB-SoniaNeural" \ | "cy-GB-NiaNeural") edge-tts --text "$text" --voice "$voice" --write-media "$file" ;; *) espeak-ng -s 220 -v "$voice" -w "$file" "$text"; esac exit
音频示例
俗话说百闻不如一见,但这里,不管怎么说都不如一“闻”,听听有什么区别。
- edge-tts
- espeak-ng
小结
edge-tts
好听,但需要连网espeak-ng
可以离线使用,但听着有点难受- 两者都支持中、英文等多种语言
- 两者都可以免费使用,在开发、测试时用起来很方便