由于本人需要对录入文本进行校验,所以决定使用TTS语音合成系统(看自己写的东西很难发现错误)。首先尝试在Linux系统下自带的festival和espeak,但使用后总觉得效果不理想。作为Linux用户还是喜欢用Linux原生程序,所以第二步尝试非系统自带,但对中文特别对待的ekho(余音),然而效果依然令人乍舌,在使用了半天后便决定更换为确实可用的文本朗读系统。这便不得不使用Wine来模拟运行Windows程序,经过一番不懈的努力,终于成功在Linux平台上实现了高质量的文本朗读效果。现在将安装方法记录下来,方便自己也方便大家。

此次进行安装的Linux系统为Ubuntu 16.04 Mate版本(其它发行版应该也没有问题)。因为需要和别人交换文档,所以不得不使用Word 2010(正版),因此系统里早已安装好了Wine,版本为1.8。

Wine的安装:

如果你还没有安装Wine,可通过

sudo apt-get install wine sudo apt-get install winetricks

进行安装。

英文语音引擎所需软件下载:

安装微软TTS引擎分为两部分,一部分为平台接口,一部分为语音包,注意下载时全部选择32位版本。

下载微软TTS语音平台SpeechPlatformRuntime:

下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=27225
本地下载:SpeechPlatformRuntime.msi

微软TTS语音包下载(有多种语言可供选择,下载你需要的,如英语ZiraPro和中文Huihui。)

首先安装英文语音包(MSSpeech_TTS_en-US_ZiraPro.msi),中文语音包(MSSpeech_TTS_zh-CN_HuiHui.msi)在按英文语音包的安装方法安装后并不能正常工作,需要额外的修复步骤。

下载语音包:

https://www.microsoft.com/en-us/download/details.aspx?id=27224
本地下载:
MSSpeech_TTS_en-US_ZiraPro.msi
MSSpeech_TTS_zh-CN_HuiHui.msi

下载语音播放软件:

当然下载了引擎后我们还需要语音播放软件balabolka
本地直接下载地址:balcon
直接下载地址为命令行版本,文件名为balcon.exe,本软件体积很小,不对Windows其它组件产生依赖。我没有对GUI版本测试。

以下的步骤必须在同一个终端窗口中进行,否则会出错。

Wine的设定:

接下来我们需要对Wine进行设定,因为balcon和TTS平台使用32位系统(64位系统我未测试),所以设定模拟构架为32位Windows,并指明Wine虚拟Windows的工作目录。

$export WINEARCH=win32 $export WINEPREFIX=~/.wine32tts

因对wine运行环境变量进行了设定,所以后续操作均需在该环境中,请勿更换命令操作窗口。
TTS引擎的安装文件为msi格式,所以需要msxml3以让wine正确处理msi文件。通过winetricks来安装msxml3。

$winetricks msxml3

安装TTS语音平台和英文语音包:

$wine msiexec /i SpeechPlatformRuntime.msi $wine msiexec /i MSSpeech_TTS_en-US_ZiraPro.msi

安装过程中会看到有错误提示,不必理会。此时的英文TTS引擎应该已经可以正常工作了。为测试TTS是否工作正常,我们可建立一个englishText.txt的文本文件,里面随意写入一些英文句子。然后通过以下命令进行测试:

$wine balcon.exe -n en-US -f englishText.txt

此时应该已可以听见高质量的英文语音合成。参数-n指明balcon.exe所需调用的声音,-f指明需要进行语音合成的文本文件名。关于balcon.exe的其它参数,可直接wine balcon.exe查看说明。

以上信息感谢来自reddit的dazoe

中文语音引擎的安装

接下来是关键的中文语音。通过以下命名安装微软Huihui中文语音包。

$wine msiexec /i MSSpeech_TTS_zh-CN_HuiHui.msi

准备一段包含中文文本的txt文件进行测试

$wine balcon.exe -n zh-CN -f chineseText.txt

结果却提示Error: OLE error 80004005错误,无声音输出。中文在计算机世界里总是多一层麻烦。
这是因为缺少了chsbrkr.dll (本地下载:chsbrkr.dll)和chtbrkr.dll(本地下载:chtbrkr.dll)两个文件,看文件名是用于简体中文和传统/繁体中文文本分割的。下载这两个文件并拷贝至

~/.wine32tts/drive_c/Program Files/Common Files/Microsoft Shared/Speech/TTS/v11.0

从网上下载时请注意版本,这里使用的是XP 32bit版本。
再次尝试运行,依然无法播放语音,错误信息更改为Error: OLE error 80040111。此时需要将Wine虚拟的Windows环境转换为Windows 8即可。输入命令

$winecfg

然后在“Application”选项卡下将“Windows Version”改为“Windows 8”,确定。

再次运行测试命令应该就可以听到清晰的中文了。如果听到内容与文本内容不相符,则可能是文件编码的问题,请转换文件编码。我主要是选择文本然后播放,所以需要通过快捷键来迅速播放被选中的文本。这需要让balcon读取剪贴板内容并生成语音,可以通过-c参数来实现。

创建朗读快捷键:

可以创建两个简单的脚本文件,一个用于播放英文文本,一个用于播放中文文本,脚本中注意加入wine运行环境的变量即可。

英文文本朗读脚本speakEn.sh:

#!/bin/sh export WINEARCH=win32 export WINEPREFIX=~/.wine32tts wine /usr/local/bin/balcon.exe -n en-US -k -c

其中-k参数是杀死其它正在运行的balcon进程,这样作可以通过选择一个汉字,然后使用快捷键迅速结束朗读。

中文文本朗读的脚本speakCN.sh:

#!/bin/sh export WINEARCH=win32 export WINEPREFIX=~/.wine32tts wine /usr/local/bin/balcon.exe -n zh-CN -k -c

最后利用的X桌面环境设定自己的快捷键来运行以上两个脚本。

小提示:如果你选择了文本,但balcon不播放声音,这是因为Linux下有三个剪贴板,鼠标选取内容存储到了Primary剪贴板中,而balcon调用的是Second剪贴板,因此可以用类似Diodon的剪贴板管理软件来自动同步三个剪贴板的内容。

好了,享受Linux下的高质量TTS朗读吧。

在此强烈谴责一下国内的百度、腾讯等IT厂商,中文TTS本已不错,你们不愿开源,至少发布一个Linux下闭源的免费个人版本吧!

来源:https://www.yesybl.com/?p=550