脚本的调用顺序是dict-notify-send.sh -> human_voice.sh-> network_human_voice.sh
1、网络音频发声脚本
更加输入的单词自动到dict、有道、dreye下载音频并播放
音频默认下载到/opt/HumanVoice目录
请先执行如下命令
sudo mkdir /opt/HumanVoice || sudo chmod 777 /opt/HumanVoice
network_human_voice.sh
--------------------
#!/bin/bash
# name: Network Human Voice
# version: 1.0
#
# author: vangie.du
# mailto: duwan@yahoo.cn
# website: http://duwan.spaces.live.com
#exit code
SUCCESS=0
E_NOARGS=65
INVALID_ARGS=128
#human voice dir
HV_DIR="/opt/HumanVoice"
#check argument
if [ -z "$1" ] #noargs
then
echo "Usage: `basename $0` word"
exit $E_NOARGS
elif [ ! `echo "$1" | grep ^[a-zA-Z]` ] #not a word
then
echo -e "The argument $1 not a word.\nA word must start with a letter."
exit $INVALID_ARGS
fi
#word
WORD=$1
#lowcase word
LOWERCASED_WORD=`echo $WORD | sed ‘s/.*/\L&/’`
#get the first letter
INITIALS=${LOWERCASED_WORD:0:1}
#the path of voice
VOICE_PATH="$HV_DIR/$INITIALS/$LOWERCASED_WORD.mp3"
function create_dir_if_need(){
local DIR=$1;
if [ ! -d "$DIR" ]
then
mkdir -p $DIR
fi
}
function youdao_voice(){
local orignal_word=$1;
local VOICE_PATH=$2;
local YOUDAO_DICT_URL="http://dict.youdao.com/search?client=deskdict&doctype=xml&xmlVersion=3.1&q=$orignal_word"
local YOUDAO_USER_AGENT="Yodao Desktop Dict (Windows 5.1.2600)"
local YOUDAO_VOICE_CODE=`wget -q -U $YOUDAO_USER_AGENT $YOUDAO_DICT_URL -O- | sed -e "/<speech>/!d" -e "s/^.*>\(.*\)<\/.*$/\1/"`
local YOUDAO_VOICE_URL="http://dict.youdao.com/speach?audio=$YOUDAO_VOICE_CODE"
if [ -n "$YOUDAO_VOICE_CODE" ]
then
wget -q -t3 -T10 -U $YOUDAO_USER_AGENT $YOUDAO_VOICE_URL -O $VOICE_PATH
return 1
else
return 0
fi
}
function dict_voice(){
local orignal_word=$1;
local VOICE_PATH=$2;
local DICT_URL="http://dict.cn/mini.php?q=$orignal_word"
local DICT_CODE=`w3m -dump_source -no-cookie $DICT_URL | iconv -f GB2312 -t UTF-8 | sed -e ‘/<\/script><br \/>/!d’ -e "s/.*insertaudio..’\(.*\)’,.*/\1/"`
local DICT_VOICE_URL="http://dict.cn/mp3.php?q=$DICT_CODE"
if [ -n "$DICT_CODE" ]
then
wget -q -t3 -T10 $DICT_VOICE_URL -O $VOICE_PATH
return 1
else
return 0
fi
}
function dreye_voice(){
local orignal_word=$1;
local VOICE_PATH=$2;
local LOWERCASED_WORD=`echo $orignal_word | sed ‘s/.*/\L&/’`
local UPCASE_INITIALS=`echo $orignal_word | sed -e ‘s/^\(.\).*/\U\1/’`
local DREYE_VOICE_URL="http://www.dreye.com.cn/dict/audio/$UPCASE_INITIALS/$LOWERCASED_WORD.mp3"
local VOICE_EXIST=`wget –spider $DREYE_VOICE_URL 2>&1 | grep HTTP | sed -e ‘s/[^0-9]//g’`
if [ $VOICE_EXIST -eq "200" ]
then
wget -q -t3 -T10 $DREYE_VOICE_URL -O $VOICE_PATH
return 1
else
return 0
fi
}
function pronounce(){
local VOICE_PATH=$1;
if [ -f "$VOICE_PATH" ]
then
mpg123 -q $VOICE_PATH
return 1
else
return 0
fi
}
#if have downloaded , pronounce direct and exit
pronounce "$VOICE_PATH" || exit $SUCCESS
#create voice dir
create_dir_if_need "$HV_DIR/$INITIALS"
#download voice
dict_voice "$WORD" "$VOICE_PATH" && dreye_voice "$WORD" "$VOICE_PATH" && youdao_voice "$WORD" "$VOICE_PATH"
#pronounce voice
pronounce "$VOICE_PATH" || exit $SUCCESS
------------------------------
2、本地真人语音发声脚本
需要下载安装 WyabdcRealPeopleTTS真人语音包
human_voice.sh
------------------------------
#!/bin/bash
# name: Human Voice
# version: 1.0
#
# author: vangie.du
# mailto: duwan@yahoo.cn
# website: http://duwan.spaces.live.com
E_NOARGS=65
HV_DIR="/usr/share/WyabdcRealPeopleTTS"
#check argument
if [ -z "$1" ]
then
echo "Usage: `basename $0` wav-file"
exit $E_NOARGS
fi
#word
WORD=$1
#lowcase word
LOWERCASED_WORD=`echo $WORD | sed ‘s/.*/\L&/’`
#get the first letter
INITIALS=${LOWERCASED_WORD:0:1}
VOICE_PATH="$HV_DIR/$INITIALS/$LOWERCASED_WORD.wav"
#check file
if [ -f "$VOICE_PATH" ]
then
#pronounce
play -q $VOICE_PATH
else
network_human_voice.sh $WORD
fi
--------------------------
3、一键查词脚本
在ubuntu-tweak中将某一快捷键设置为调用脚本dict-notify-send.sh,并且把上面三个脚本放置到$PATH目录,赋予执行权限。
dict-notify-send.sh
--------------------------
#!/bin/bash
a=`xsel -o`
word=`w3m -dump -no-cookie http://dict.cn/mini.php?q="$a" | sed -e ‘$d’ -e ‘s/</ /g’ -e ‘s/>/ /g’`
notify-send -u critical -t 5000 -i ‘/home/vangie/.icons/Mashup/apps/accessories-dictionary.png’ "$a" "$word"
human_voice.sh "$a"
--------------------------