Linux下的词典软件当然是StarDict,功能、词库足够使用了,也有语音支持。但语音文件仅限于WAV格式。大家最常用的语音库是WyabdcRealPeopleTTS、OtdRealPeopleTTS。这两个库单词量严重不足,很多常用的词也不能发音。StarDict提供另外一套方案,即用TTS程序代替真人发音。这是没办法的办法,发音效果不是一般的差。
曾经由网上下载了一个据称有14万单词的库,还是有些单词不能发音。比如说,undisturbed、voluntarily,甚至有些常见的词也不能发音。
谷歌的在线词典还是很不错的,大多数单词都有发音。那么,在本地找不到的情况下,能不能让StarDict去下载Google在线词典的语音呢?答案是可以的。考虑:利用StarDict在找不到发音文件后启动TTS程序模拟发音的功能,让StarDict调用我们的自己的脚本。下面就是这个简单的脚本文件。
#!/bin/bash #filename:google-voice #下载的声音文件存放位置 VOICEPATH="/var/google-voice" #Google在线词典的音频文件URL VOICEURL="http://www.gstatic.cn/dictionary/static/sounds/lf/0" #声音文件扩展名 SUFFIX="mp3" declare -i fileExist #子程序:下载声音文件 function downloadvoice(){ let fileExist=0; wget -q -O $VOICEPATH/$1.$SUFFIX $VOICEURL/$2/$3/$4/$1%23_us_1.$SUFFIX if [ $? -ne 0 ]; then wget -q -O $VOICEPATH/$1.$SUFFIX $VOICEURL/$2/$3/$4/$1%23_gb_1.$SUFFIX fi if [ $? -ne 0 ]; then rm -rf $VOICEPATH/$1.$SUFFIX let fileExist=1 return fi if [ ! -d $VOICEPATH/$2 ]; then mkdir -p $VOICEPATH/$2 fi mv $VOICEPATH/$1.$SUFFIX $VOICEPATH/$2/$1.$SUFFIX } l1=`expr substr $1 1 1` l2=`expr substr $1 1 2` l3=`expr substr $1 1 3` if [ `expr length "$l3"` -lt 3 ]; then l3="$l3"_ fi #如果本地没有找到对应的声音文件,则去网络上下载。 if [ ! -e $VOICEPATH/$l1/$1.$SUFFIX ]; then downloadvoice $1 $l1 $l2 $l3 if [ $fileExist -ne 0 ]; then exit 1 fi; fi #本地有声音文件,则用mplayer播放。 mplayer -msglevel all=-1 -quiet $VOICEPATH/$l1/$1.$SUFFIX
使用方法
在StarDict音效选项中,选中使用TTS程序,然后填入:/path/to/google-voice %s
(/path/to为google-voice所在的目录)。
使用上面的这个脚本,也可以解决:StarDict不能播放MP3的问题。