最近公司一个项目需要实现Centos系统上的文本转语音即TTS功能,经过一番研究发现只有微软的转换效果最好,发音标准,且支持多达20多个国家的语言。有没有一种办法可以通过微软Windows平台下的SDK实现Linux系统Centos下的TTS功能呢?答案是有,那就是Wine。
Wine是“Wine Is Not an Emulator”的缩写,这表明Wine不是任何一种类型的模拟器。Wine不会模拟任何硬件环境,因此它的性能要比虚拟机和容器要好得多。实际上,Wine是一个系统调用的翻译层,负责将应用程序的Windows系统调用转换为Linux系统调用。这种方式会有一定的性能损失,但实际上较新版本的Windows要兼容较老的应用程序,也会在系统中引入类似的系统调用翻译层,所以性能损失几乎可以忽略不计。
下面就让我们看一下如何在虚拟环境下的CentOS系统中安装和使用Wine,实现微软的TTS文本转语言功能。
如何在CentOS 64上安装和使用Wine
一. 安装必要的依赖包
由于微软的SDK只支持32位,所以我们需要编译32位Wine,不过由于小C用的Centos 64位操作系统,在64位系统下32位的Wine编译安装会依赖64位的Wine,因此必须同时安装64位和32位的依赖包。 当然,如果你是32位的操作系统,就不需要安装64位Wine,直接编译安装32位的即可。
在Shell中运行以下命令
yum install flex.x86_64 bison.x86_64 glibc-devel.i686 dbus-devel.i686 freetype-devel.i686 pulseaudio-libs-devel.i686 libX11-devel.x86_64 libX11-devel.i686 mesa-libGLU-devel.i686 libICE-devel.i686 libXext-devel.i686 libXcursor-devel.i686 libXi-devel.i686 libXxf86vm-devel.i686 libXrender-devel.i686 libXinerama-devel.i686 libXcomposite-devel.i686 libXrandr-devel.i686 mesa-libGL-devel.i686 mesa-libOSMesa-devel.i686 libxml2-devel.i686 libxslt-devel.i686 zlib-devel.i686 gnutls-devel.i686 ncurses-devel.i686 sane-backends-devel.i686 libv4l-devel.i686 libgphoto2-devel.i686 libexif-devel.i686 lcms2-devel.i686 gettext-devel.i686 isdn4k-utils-devel.i686 cups-devel.i686 fontconfig-devel.i686 gsm-devel.i686 libjpeg-turbo-devel.i686 pkgconfig.i686 libtiff-devel.i686 unixODBC.i686 openldap-devel.i686 alsa-lib-devel.i686 audiofile-devel.i686 freeglut-devel.i686 giflib-devel.i686 gstreamer-devel.i686 gstreamer-plugins-base-devel.i686 libXmu-devel.i686 libXxf86dga-devel.i686 libieee1284-devel.i686 libpng-devel.i686 librsvg2-devel.i686 libstdc++-devel.i686 libusb-devel.i686 unixODBC-devel.i686 qt-devel.i686 libpcap-devel.i686 -y
二. 下载Wine源码包
在Shell中运行以下命令,下载Wine的源码包:
cd /root/Downloads/
wget http://mirrors.ibiblio.org/wine/source/1.8/wine-1.8.7.tar.bz2
三. 编译安装Wine
在Shell中运行以下命令,编译安装Wine(注意,编译耗时较长,耐心等待):
tar xjf wine-1.8.7.tar.bz2
cd wine-1.8.7
mkdir -p wine32 wine64
cd wine64
../configure --enable-win64
make -j8
等待64位Wine编译完成,然后编译32位Wine:
cd ../wine32
PKG_CONFIG_PATH=/usr/lib/pkgconfig ../configure --with-wine64=../wine64
make -j8
make install
cd ../wine64 && make install
四. 64位和32位Wine编译安装完成,然后进入配置:
执行
WINEARCH=win32 WINEPREFIX=~/.wine32 winecfg
过程中一直点取消不下载任何东西,最后设置系统为win7即可
五. 英文语音引擎所需软件下载:
安装微软TTS引擎分为两部分,一部分为平台接口,一部分为语音包,注意下载时全部选择32位版本。
下载微软TTS语音平台SpeechPlatformRuntime:
下载地址为:https://www.microsoft.com/en-us/download/details.aspx?id=27225
微软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
下载语音播放软件:
当然下载了引擎后我们还需要语音播放软件balabolka:
本地直接下载地址:balcon
直接下载地址为命令行版本,文件名为balcon.exe,本软件体积很小,不对Windows其它组件产生依赖。我没有对GUI版本测试。
六. 将这些软件放入指定目录:
将 balcon.exe, SpeechPlatformRuntime.msi, 和MSSpeech_TTS_en-US_ZiraPro.msi等语言包放在/usr/local/bin目录下
七. 下载Winetricks
Winetricks是一个很方便的工具脚本,当需要通过Wine运行某些程序时,这个脚本便可用于下载和安装各种必需的可再发行的运行时库。这些运行时库可能会使用一些闭源的库文件替换Wine的某些组件。注意,这个脚本下载和安装的软件全部都是32位平台的,即使是在Wine64的环境下,其安装的软件也都是32位的。在Shell中运行以下命令,下载和安装Winetricks:
cd /root/Downloads
wget https://raw.githubusercontent.com/Winetricks/winetricks/master/src/winetricks
chmod 755 winetricks
mv winetricks /usr/local/bin
八. 安装msxml3
TTS引擎的安装文件为msi格式,所以需要msxml3以让wine正确处理msi文件。通过winetricks来安装msxml3。
执行命令
WINEPREFIX=~/.wine32 winetricks msxml3
安装msxml3
九. 安装语言平台
执行命令
WINEPREFIX=~/.wine32 wine msiexec /i SpeechPlatformRuntime.msi
安装语音平台
十. 安装语言包
执行命令
WINEPREFIX=~/.wine32 wine msiexec /i MSSpeech_TTS_en-US_ZiraPro.msi
安装英语语言包
执行命令
WINEPREFIX=~/.wine32 wine balcon.exe -k -n en-US -t "Hello world."
测试英语是否能正常使用
安装其他语言包也是同样步骤
十一. 安装中文语言包主要事项
安装中文语言包后,还需要将
chsbrkr.dll (本地下载:chsbrkr.dll)和chtbrkr.dll(本地下载:chtbrkr.dll) 文件拷贝至~/.wine32/drive_c/Program Files/Common Files/Microsoft Shared/Speech/TTS/v11.0/目录
十二. 删除编译文件
转到wine32和wine64目录分别执行make clean并删除整个编译源目录
参考:
http://ghoulich.xninja.org/2016/08/09/install-and-use-wine-on-centos/