伪语音合成(2)
2013-10-20今天实现了中英文的选择,当然,并没有对可能出现的错误情况进行处理,比如说选项指明是英文而文本内容是中文……
首先,昨天写的那个脚本有点问题,先来看一下:
#!/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
当文本是用空格分开时,这个脚本会出错,原因是传递给函数的参数会严格按照空格进行划分,也就是说,类似
'how are you'
这样本来预期作为t2s函数的第一个参数会被分割成 how、are、you三个部分并将其作为t2s函数的 三个参数 ,导致错误。
正确的做法是将$1用双引号包裹起来。
这是今天修改后的脚本代码:
#!/bin/bash FILE="" t2s() { first="$1"; lang=""; FILE=$(tr ' ' _ <<< "$first"| cut -b 1-15).mp3; shift; while getopts "ez" arg do case $arg in e) lang="en"; ;; z) lang="zh"; ;; ?) echo "Usage : t2s <text> -e/-z"; echo " -e : in English"; echo " -z : in Chinese"; exit 1; ;; esac done wget -q -U google-chrome -O $FILE "http://translate.google.com/translate_tts?ie=UTF-8&tl=$lang&q=$(tr ' ' + <<< "$first")"; } t2s "$1" $2 && play $FILE -q && rm $FILE
当然了……脚本参数的处理是很直接简单的处理方式。
另外,Google的中文语音合成效果不怎么样啊,不过其他的语音产品貌似不提供像Google这样的API,那也没办法了。