完全是新手练习, bug 多多, 大家别见笑.
PS:自动下载歌词的那个网站歌词质量不怎么好.
占 小于0.7%的CPU和 小于600k的内存.
没有实用价值, 只为学习Shell
代码: 全选
#!/bin/bash
TMPDIR=$HOME/.lrcache
LRCDIR=$HOME/lrc
STARTPLAYER(){
ps -e | grep rhythmbox >> /dev/null 2>&1
if [ $? -ne "0" ] ; then
rhythmbox-client --no-present
sleep 0.2
rhythmbox-client --hide
fi
rhythmbox-client --play
return $?
}
GETNAME(){
rhythmbox-client --print-playing --no-start | \
awk '{ gsub(/\.mp3|\.wma|\.MP3|\.WMA/,"",$NF);print $NF }'
}
DOWNLRC(){
[ -d $TMPDIR ] || mkdir -p $TMPDIR
NM=$(GETNAME)
echo $NM
SNM=`echo $NM | iconv -f utf8 -t gbk`
wget "http://lrc.bzmtv.com/so.asp?go=go&y=1&key=$SNM" \
-O $TMPDIR/$NM".tmp" >> /dev/null 2>&1
iconv -f gbk -t utf8 $TMPDIR/$NM".tmp" > $TMPDIR/$NM
egrep "> *$NM *<" $TMPDIR/$NM >> /dev/null 2>&1
if [ $? -ne "0" ] ; then
echo "not found "
rm -f $TMPDIR/$NM $TMPDIR/$NM".tmp"
sleep 15
else
URL=`awk -F"> *$NM *<" \
'{if (FLAG == 1 && $0 ~/lrc.gif/ ) \
{ h=index($0,"lrc_db");n=index($0,".lrc")-h+4; \
print substr($0,h,n);exit; \
}else if (NF > 1 ) FLAG=1 }' $TMPDIR/$NM `
URL="http://lrc.bzmtv.com/$URL"
[ -d $LRCDIR ] || mkdir -p $LRCDIR
wget "$URL" -O "$LRCDIR/$NM" ## >> /dev/null 2>&1
iconv -f gbk -t utf8 "$LRCDIR/$NM" > $LRCDIR/$NM".lrc"
rm -f $LRCDIR/$NM
echo "download success"
rm -f $TMPDIR/$NM
fi
}
READLRC(){
ifs=$IFS
IFS="NOTSPACE"
[ -d $TMPDIR ] || mkdir -p $TMPDIR
awk '! /(\] *.?)$|^( *)$|^[^\[]/' $LRCDIR/$(GETNAME)".lrc" | while read LINE
do
echo $LINE | awk -F"]" '{ \
if (NF > 2){ \
for (i = 1; i < NF; i++){ \
print $i"]"$NF; \
}
}else{ print $0; }\
}'
done | sort > $TMPDIR/$NM
IFS=$ifs
}
DISPLAY(){
NM=$(GETNAME)
LAST=""
N=1
LRC="$(< $TMPDIR/$NM)"
clear
echo -e "\033[;34m****** $NM ****** \033[0m "
echo " "
while [ true ] ; do
if [ $NM != $(GETNAME) ] ; then
NM=$(GETNAME)
while [ ! -s $LRCDIR/$NM".lrc" ] ; do
DOWNLRC
NM=$(GETNAME)
done
[ -s $LRCDIR/$NM".lrc" ] && [ ! -s $TMPDIR/$NM ] && READLRC
LRC="$(< $TMPDIR/$NM)"
clear
echo -e "\033[;34m****** $NM ****** \033[0m "
echo " "
N=1
fi
TM=`rhythmbox-client --print-playing-format %te --no-start`
[ "$TM" = "" ] && break
NOW=`echo "$LRC" | sed -n "/$TM/p" |cut -d"]" -f 2`
if [ "$NOW" != "" -a "$NOW" != "$LAST" ] ; then
N=`expr $N + 1`
if [ $N -ge "9" ] ; then
N=1
clear
echo -e "\033[;34m****** $NM ****** \033[0m "
echo " "
echo $LAST
echo " "
fi
LAST=$NOW
echo $NOW
echo " "
fi
sleep 0.3
done
}
[ "$1" = "reload" ] && rm -f "$TMPDIR/*"
clear
STARTPLAYER
NM=$(GETNAME)
while [ ! -s $LRCDIR/$NM".lrc" ] ; do
DOWNLRC
NM=$(GETNAME)
done
if [ -s $LRCDIR/$NM".lrc" ] ; then
READLRC
DISPLAY
fi