“让别人读书给你听”,在某些情况下是一种需求。从程序员的角度来说,就是要把“人”换成“程序”,让程序来朗读文字。满足这个需求的关键技术点,是“文本转换成语音”,简称TTS。
这次介绍的,并不是TTS实现的原理,而是TTS的应用,也就是基于特定的库或开源项目的使用。对于原理的东西,小程在准备好理论的知识后再尝试讲解清楚。
TTS的实现,有不少项目,这里介绍的是eSpeak。
本文介绍如何通过eSpeak来实现文本转换成语音的功能。
eSpeak是一个语音生成(合成)器,它的官网地址是:
<http://espeak.sourceforge.net/>
在官网上,可以看到eSpeak的介绍是这样的:
eSpeak的可执行程序的下载页面是:
<http://espeak.sourceforge.net/download.html>
在下载页面选择相应平台的程序包,下载,解压后,可以看到这样的程序目录结构:
小程下载的是mac平台的eSpeak-1.45.04版本。
在执行eSpeak之前,有什么准备工作要做吗?小程觉得,有几个知识点是要注意到的:
* 在eSpeak目录下面找到speek,这个是命令行的可执行程序,通过运行它来实现功能。读者也可以给它设置一个环境变量,这样就可以在任何路径都能执行到这个程序。
* 目录espeak-data,是语音包,支持什么语言,就看这个目录下面有什么内容了。
* 执行speek程序时,可以用参数--path来指定speek使用的语音包,如果没有指定,则默认在/usr/share目录下面查找espeak-data,如果找不到会提示出错。
* 读者需要安装portaudio,因为eSpeak依赖这个库。小程在装备其它环境时,就已经顺带安装过portaudio了,读者可以按照下面这个引导来安装portaudio:
portaudio是一个跨平台的音频输入输出库。在安装portaudio之前,如果是在macos上,则先要安装好xcode,并且保证“command line developer tools”已经安装上,因为需要使用xcode的编译器来make install。可以使用命令xcode-select --install来检测是否已经安装好command line developer tools,如果没有就按提示安装。
然后用brew来安装portaudio:
brew install portaudio
其中,espeak-data是语音包。小程再重点介绍下它里面的内容,可以参考下面几个eSpeak程序目录的截图:
一切准备就绪之后,就可以执行speak命令行程序了。
speak的功能,就是把文本读出来,或把“读出来”的语音保存成wav文件。
至于,读什么文本(从哪里读)、以什么语言读、以什么语速读(等等),都可以通过参数来设置。
可以先看一下eSpeak有什么样的参数(./speak -h):
了解这些参数后,就可以执行speak来“朗读”了,比如:
./speak -stdout "1 2 3 4 5 6 7" --path="./" -s 200 -v zh+f5
表示以中文女声来数数,指定了语音包的位置,以及朗读的速度。
再比如这些命令的截图:
小程在macos上,下载下来的espeak,默认就支持中文语音即zh。但对于粤语,虽然在语音包中有zh-yue文件,但执行时听不到声音(espeak-1.45.04版本),小程没有细究其中的原因。
最后,小程先让eSpeak“读出”一个wav文件,再让读者听一听,命令如下:
./speak -stdio "1 2 3 4 5 6 7 多劳多得!欢迎关注广州小程微信公众号" --path="./" -s 140 -v zh+f5 -w "welcome.wav"
读者如果是在微信公众号(广州小程)打开这篇文章,那可以听一下以下的wav文件(小程上传的文件)。
总结一下,本文介绍了如何使用eSpeak来做到“读出”文本,主要是一些参数的了解与使用,难度系数为低。
原文地址:http://blog.51cto.com/13136504/2088690