伪语音合成(1)
2013-10-19今天在commandlinefu.com 上面看到一个函数的定义,挺有意思的,来看一下:
t2s() { wget -q -U Mozilla -O $(tr ' ' _ <<< "$1"| cut -b 1-15).mp3 "http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=$(tr ' ' + <<< "$1")"; }
下面注明了:
Usage: t2s 'how are you?'
这个函数很有意思,首先看这个函数的名字:t2s。
t2s是 Text to Speech 的缩写,也就是 语音合成 了,这个函数的功能正是语音合成,即将传入t2s函数的参数——文本,转换为语音。
再看看函数体:
wget -q -U Mozilla -O $(tr ' ' _ <<< "$1"| cut -b 1-15).mp3 "http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=$(tr ' ' + <<< "$1")";
没什么太复杂的东西,就是一条wget命令,不过其参数稍微复杂。
-q 选项是让wget以 quiet 模式运行, -U 指定浏览器(我也不知道为什么要指定,试了一下,不加的话结果会是错的……), -O 指定下载下来的文件名。
-O 选项的参数是一条shell命令的输出结果和 .mp3 这个后缀名的连接起来的结果:
tr ' ' _ <<< "$1" | cut -b 1-15
这条命令将函数t2s的第一个参数中的空格替换成下划线 _ ,然后最多取15个字符。
重点是后面那个网络地址:
http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=
这个是Google翻译的TTS的web api,通过它可以直接获取Google翻译界面的文本朗读功能对应的mp3文件。上面这个api要在后面加上要朗读的单词才是完整的——若有多个单词,则以 + 号连接。
然后我根据这个函数写了一个小脚本:
#!/bin/bash t2s() { wget -q -U Mozilla -O $(tr ' ' _ <<< "$1"| cut -b 1-15).mp3 "http://translate.google.com/translate_tts?ie=UTF-8&tl=en&q=$(tr ' ' + <<< "$1")"; } FILE=$(tr ' ' _ <<< "$1" | cut -b 1-15).mp3; t2s $1 && play $FILE -q && rm $FILE
我这里用了play命令来直接在终端中播放音频文件——play命令是sox工具包里的一个命令,要正确播放,还要安装mp3格式支持:
sudo apt-get install libsox-fmt-mp3
之所以标题是 伪语音合成 ,就是因为我这里只是单纯地下载了对应的音频文件进行播放而已……真正的语音合成的工作都是Google做的。
另外,这个脚本里的t2s函数只对英文语句起作用,所以下一步我想写一个功能更丰富的脚本,能处理中英文。