eSpeak TTS 中英文真人发音引擎 Tcl/Tk 扩展与 eSpeak API 示例。
转载时请注明出处:http://www.tcltk.cn
这几天看残奥会真的是大受感动。现场有那么多观众能为残疾人运动员加油鼓劲,看到运动员在赛场上努力拼搏的情景,听到运动员们背后的故事,有时真是不禁让人眼眶发红。“每个人心里都有柔软的一面”----这句话说得一点都不错,看来兄弟我也不耐的紧。
扯远了,现在进入正题。一直在找能在 Linux 下发声的中文 TTS 引擎,这不,还真让我给找着了,而且还是国/粤双语的呢!这就是 eSpeak。今天看了下 eSpeak 的 API 后顺便用 SWIG 打包了个 Tcl/Tk 的扩展 tclespeak。当然,你也可以简单地修改一下 Makefile 文件,这样就能很方便地为 Python/Perl/Ruby/Lua/Java 等语言编译出各自的 eSpeak 扩展了。
tclespeak 扩展使用 LGPL 许可证,商业软件中也可放心地免费使用。对了,不知道有没有使用 Tcl/Tk 的同好看到啊?用 Tcl/Tk 强悍的快速开发能力结合 tclespeak 写一个 Linux 下的读书软件我想只用几天就可写就了,如果哪位有时间,就请写一个造福明眼人/盲人/老年人朋友们吧。多谢多谢。兄弟我是不成啦,今年的工作与学习计划已是排得满满的,真的是脚后跟打屁股---忙得不可开交。不过,开发中的小忙我还是帮得上的。
最后,关心残疾人,不能只看残奥会。请大家拿出自己的行动去同情、关心、帮助残疾人,在精神上鼓励、支持他们。谢谢。
编译 tclespeak 扩展:
如果你用的是 Ubuntu 可省去这步,直接下载编译好的:
http://tclespeak.googlecode.com/files/tclespeak1.0-ubuntu.tar.gz
-------------------------------
wget http://tclespeak.googlecode.com/files/tclespeak1.0.tar.gz
tar zxvf tclespeak1.0.tar.gz
cd tclespeak
sudo make install_dev_pkg
make
-------------------------------
为系统中的 eSpeak 添加国/粤双语支持(系统无关):
Windows 用户需要手工输入 Makefile 里的两条命令。
添加成功后可以在终端窗口测试一下命令:espeak -vzh "你好,世界!"
-------------------------------
wget http://tclespeak.googlecode.com/files/dictsource.tar.gz
tar zxvf dictsource.tar.gz
cd dictsource
sudo make
-------------------------------
Tcl/Tk 版本示例代码:
-------------------------------
package require espeak
set en_word "Hello, World."
set zh_word "你好,世界!"
eSpeak E
# 英文男声。
E lang "en"
E speak $en_word
# 英文女声。
E lang "en+f2"
E speak $en_word
# 国语中文男声。
E lang "zh"
E speak $zh_word
# 国语中文女声。
E lang "zh+f2"
E speak $zh_word
# 粤语中文男声。
E lang "zhy"
E speak $zh_word
# 粤语中文女声。
E lang "zhy+f2"
E speak $zh_word
-------------------------------
更多信息信息见:
tclespeak 项目主页 http://www.tcltk.cn
再看一下 C/C++ 版本的代码,写起来明显要复杂得多:
-------------------------------
#include
char en_word[] = "Hello, World.";
char zh_word[] = "你好,世界!";
espeak_Initialize(AUDIO_OUTPUT_PLAYBACK, 0, NULL,0);
// 英文男声。
espeak_SetVoiceByName("en");
espeak_Synth(word, strlen(en_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
// 英文女声。
espeak_SetVoiceByName("en+f2");
espeak_Synth(word, strlen(en_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
// 国语中文男声。
espeak_SetVoiceByName("zh");
espeak_Synth(word, strlen(zh_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
// 国语中文女声。
espeak_SetVoiceByName("zh+f2");
espeak_Synth(word, strlen(zh_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
// 粤语中文男声。
espeak_SetVoiceByName("zhy");
espeak_Synth(word, strlen(zh_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
// 粤语中文女声。
espeak_SetVoiceByName("zhy+f2");
espeak_Synth(word, strlen(zh_word)+1, 0, POS_CHARACTER, 0, espeakCHARS_UTF8, NULL, NULL);
espeak_Terminate();