分页: 14 / 20

发表于 : 2008-09-20 0:11
toawinner47
请问楼主,能把歌词显示设置成卡拉ok(颜色渐变)的效果吗?

发表于 : 2008-09-20 1:34
solcomo
toawinner47 写了:请问楼主,能把歌词显示设置成卡拉ok(颜色渐变)的效果吗?
不行呢
gnome-osd不支持

发表于 : 2008-09-20 17:51
airdragon
不错 收藏了/

发表于 : 2008-09-20 21:51
keky
居中是什么?MS middle 不好使哦!难道拼错了
solcomo 写了:
wmxs1988 写了:太棒了
顺变问下怎么改变歌词显示的位置
谢谢支持
修改~/.config/mlrc.conf文件

代码: 全选

vposition=bottom
halignment=left
改成自己需要的

发表于 : 2008-09-20 22:14
SecretZero
我非常想要楼主的桌面!

发表于 : 2008-09-20 22:22
solcomo
keky 写了:居中是什么?MS middle 不好使哦!难道拼错了
solcomo 写了:
wmxs1988 写了:太棒了
顺变问下怎么改变歌词显示的位置
谢谢支持
修改~/.config/mlrc.conf文件

代码: 全选

vposition=bottom
halignment=left
改成自己需要的
center

发表于 : 2008-09-20 22:25
solcomo
SecretZero 写了:我非常想要楼主的桌面!

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-09-26 19:09
Dill
Screenshot-4.png
非常好...谢谢

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-04 21:25
realaddin
我的osd模式为什么字体总是不清楚?

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-04 21:47
kukunya
标记……

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-04 23:29
solcomo
realaddin 写了:我的osd模式为什么字体总是不清楚?
点阵字体..就是这样的

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-05 18:35
laputa
学习了楼主solcomo的mlrc脚本,xiooli的lrcshow脚本和lorosd脚本,进行了一些整合和小的改动:
1.将默认存放文件的路径细化为 $LRCDIR/$aritst/$title.lyric 用这个路径并且将文件名后缀改为.lyric是为了共享sevevever的rhythmbox歌词插件ttplyrics从千千静听上下载的歌词。
2.将输出用函数包装,更简洁些。
3.下载,用搜狗还是百度?我想用千千静听,但不知如何写。
4.将显示改动了一下。看来是默认进行四次下载了。
大致想起这么多了。具体还是看脚本吧。


#!/bin/bash
#先初始化NM,然后进入循环:保存原NM,刷新得到新NM,比较两NM,如果相同,则检查是否有歌词文件,若有,则显示,否则,下载;如果不同,则取新值
#
#下载的歌词默认保存在~/.lyrics/$artist/$title.lyric
LRCDIR=~/.lyrics
[ -d $LRCDIR ] || mkdir -p ~/.lyrics
USAGE()
{
cat <<EOF

Usage: lrc [options] [arguments]
Options
-d, --download - download lyrics
osd - auto check player and show lyrics on OSD mod
cli - auto check player and show lyrics on CLI mod
-h, --help - display this

EOF
}
#显示OSD歌词的函数
SHOW()
{
#lrcosd风格
#gnome-osd-client -f "<message id='myplugin' osd_fake_translucent_bg='off'>`echo "$*"`</message>"
#mlrc原风格
[ "$mode" = "osd" ] && gnome-osd-client -f "<message id='mymusic' osd_fake_translucent_bg='off' osd_vposition='$vposition' osd_halignment='$halignment' animations='$animations' hide_timeout='$timeout'><span size='$size' foreground='$foreground'>`echo "$*"`</span></message>"
[ "$mode" = "cli" ] && echo "$*"
#gnome-osd-client "<span size="18000" foreground='$foreground'>`echo "$*"`</span>"
#gnome-osd-client example风格
#gnome-osd-client -f "<message id='myplugin' osd_fake_translucent_bg='on' osd_vposition='center' animations='off' hide_timeout='1000' osd_halignment='right'>`echo "$*"`</message>"

#sleep 0.5
return 0
}
#显示标题
SHOWTITLE()
{
GETNAME
clear
[ "$mode" = "osd" ] && SHOW "****** $NM ******"
[ "$mode" = "cli" ] && echo -e "\033[;32m****** $NM ****** \033[0m "
return 0 #返回值为true
}
noid=0
nolrc=0
#获取歌曲名字
GETNAME()
{
case "$player" in
'download')
;;
'mpd')
if [ "$readname" = "filename" ] ; then
sn="`mpc playlist | grep "^>" | sed -e 's/).*//' -e 's/>//'`"
: $((fn=$sn-1))
if [ -e ~/.mpdconf ] ; then
state="`cat ~/.mpdconf | grep "^state_file" | awk -F'"' '{print $2}'`"
cat "$state" | grep "^$fn" | sed -e 's/.*://' -e 's/.mp3//' -e 's/[0-9]\+[/./-]//g'
else
state="`cat /etc/mpd.conf | grep "^state_file" | awk -F'"' '{print $2}'`"
cat "$state" | grep "^$fn" | sed -e 's/.*://' -e 's/.mp3//' -e 's/[0-9]\+[/./-]//g'
fi
else
csipartist=`mpc playlist | grep "^>" | sed -e "s/.*)\ //" -e "s/.mp3//" -e "s/\ -.*//g"`
csiptitle=`mpc playlist | grep "^>" | sed -e "s/.mp3//" -e "s/.*-\ //g"`
if [ -n "`mpc playlist | grep "^>" | sed -e "s/.*)\ //" | grep ".mp3"`" ] ; then
noid=1
else
noid=0
fi
fi
NM="$csipartist - $csiptitle"
;;
'mocp')
if [ "$readname" = "filename" ] ; then
echo "`mocp -i | grep -i "^File" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"`"
else
if [ "`mocp -i | grep "^SongTitle:" | sed -e "s/.*:\ //"`" = "" ] ; then
echo "`mocp -i | grep -i "^File" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"`"
noid=1
else
echo "`mocp -i | grep "^Artist:" | sed -e "s/.*:\ //" -e "s/[0-9]\+[/./-]//g"` - `mocp -i | grep "^SongTitle:" | sed -e "s/.*:\ //" -e "s/[0-9]\+[/./-]//g"`"
noid=0
fi
fi;;
'aud')
#p="`qdbus org.mpris.audacious /org/atheme/audacious org.atheme.audacious.Position`"
#t="`qdbus org.mpris.audacious /org/atheme/audacious org.atheme.audacious.SongTitle $p | sed -e "s/[0-9]\+[/./-]//g"`"
#n="`qdbus org.mpris.audacious /org/atheme/audacious org.atheme.audacious.SongFilename $p`"
#if [ "$readname" = "filename" ] ; then
# echo "$n" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g" | perl -p -e 's/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg'
#else
# if [ -n "`echo "$t" | grep ".mp3"`" ] ; then
# echo "$t" | sed -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"
# noid=1
# else
# echo "$t" | awk -F'-' '{if (NF > 2) {printf $1"-"$3} else {print}}'
# noid=0
# fi
#fi;;
if [ "$readname" = "filename" ] ; then
echo "`audtool current-song-filename`" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g" | perl -p -e 's/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg'
else
if [ -n "`audtool current-song | grep ".mp3"`" ] ; then
echo "`audtool current-song | grep ".mp3"`" | sed -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"
noid=1
else
echo "`audtool current-song`" | awk -F'-' '{if (NF > 2) {printf $1"-"$3} else {print}}'
noid=0
fi
fi;;
'amok')
if [ "$readname" = "filename" ] ; then
echo "`dcop amarok player path | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"`"
else
if [ -n "`dcop amarok player nowPlaying | grep ".mp3"`" ] ; then
echo "`dcop amarok player nowPlaying | sed -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g"`"
noid=1
else
echo "`dcop amarok player nowPlaying | sed -e "s/[0-9]\+[/./-]//g"`"
noid=0
fi
fi;;
'exaile')
t=`dbus-send --session --print-reply --dest=org.exaile.DBusInterface /DBusInterfaceObject org.exaile.DBusInterface.get_title | sed -n '$p' | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'`
if [ -n "`echo "$t" | grep ".mp3"`" ] ; then
echo "$t" | sed -e "s/.mp3//"
else
echo `dbus-send --session --print-reply --dest=org.exaile.DBusInterface /DBusInterfaceObject org.exaile.DBusInterface.get_artist | sed -n '$p' | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'` - "$t"
fi;;
'quodli')
t=`dbus-send --session --print-reply --dest=net.sacredchao.QuodLibet /net/sacredchao/QuodLibet net.sacredchao.QuodLibet.CurrentSong | sed -n '/title/{n;p}' | sed q | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'`
a=`dbus-send --session --print-reply --dest=net.sacredchao.QuodLibet /net/sacredchao/QuodLibet net.sacredchao.QuodLibet.CurrentSong | sed -n '/artist/{n;p}' | sed '1p' | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'`
echo "$a" - "$t";;
'rhythmbox')
url=`dbus-send --session --print-reply --dest=org.gnome.Rhythmbox /org/gnome/Rhythmbox/Player org.gnome.Rhythmbox.Player.getPlayingUri | sed -n '$p' | awk -F[\"\"] '{print $2}'`
if [ "$readname" = "filename" ] ; then
echo "$url" | sed -e "s/.*\///" -e "s/.mp3//" -e "s/[0-9]\+[/./-]//g" | perl -p -e 's/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg'
else
t=`dbus-send --session --print-reply --dest=org.gnome.Rhythmbox /org/gnome/Rhythmbox/Shell org.gnome.Rhythmbox.Shell.getSongProperties string:"$url" | sed -n '/title/{n;p}' | sed -n '2p' | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'`
a=`dbus-send --session --print-reply --dest=org.gnome.Rhythmbox /org/gnome/Rhythmbox/Shell org.gnome.Rhythmbox.Shell.getSongProperties string:"$url" | sed -n '/artist/{n;p}' | sed -n '$p' | awk -F[\"\"] '{print $2}' | sed -e 's/[0-9]\+[/./-]//g'`
[ -z "$t" ] && break
if [ -n "`echo "$t" | grep ".mp3"`" ] ; then
echo $t | sed -e "s/.mp3//"
else
echo "$a" - "$t"
fi
fi;;
esac
}
#下载歌词
DOWNLRC_sogou()
{
SHOW "downloading"
nolrc=0
[ -e /tmp/lrc_file ] && rm /tmp/lrc_file
[ -e /tmp/lrctmp ] && rm /tmp/lrctmp
[ `locale |grep "LANG=.*UTF-8"` ] && lang=1
if [ "$blurred" = "1" ] ; then
if [ $lang ];then
gb="`echo "$NM" | iconv -c -f utf-8 -t gb2312 | od -t x1 -A n |tr "\n" " " |tr " " % | sed 's/%*$//g'`"
else
gb="`echo "$NM" | od -t x1 -A n | tr " " %`"
fi
wget "http://mp3.sogou.com/gecisearch.so?query="$gb"" -O /tmp/lrc_file -q
links="`cat /tmp/lrc_file | grep -i "downlrc" | sed -e '2,$d' | awk -F'"' '{print $2}'`"
[ "$links" != "" ] && wget http://mp3.sogou.com/"$links" -O /tmp/lrctmp -q
[ "$links" = "" ] && nolrc=1 && DISPLAY
else
if [ $lang ] ; then
gb="`echo "$NM" | iconv -c -f utf-8 -t gb2312`"
else
gb="$NM"
fi
if [ "$readname" = "filename" ] || [ $noid ] ; then
if [ "$namemode1" = "artist" ] ; then
ar=`echo "$gb" | awk -F'-' '{printf $1}'`
else
ti=`echo "$gb" | awk -F'-' '{printf $1}'`
fi
if [ "$namemode2" = "title" ] ; then
ti=`echo "$gb" | awk -F'-' '{printf $2}'`
else
ar=`echo "$gb" | awk -F'-' '{printf $2}'`
fi
else
ar=`echo "$gb" | awk -F'-' '{printf $1}'`
ti=`echo "$gb" | awk -F'-' '{printf $2}'`
fi
wget "http://lrc.aspxp.net/?ar=$ar&al=&ti=$ti" -O /tmp/lrc_file -q
links="`cat /tmp/lrc_file | grep -i "&t=lrc&ac=dl" | sed -n 1p | awk -F'"' '{print $2}'`"
[ "$links" != "" ] && wget http://lrc.aspxp.net/"$links" -O /tmp/lrctmp -q
[ "$links" = "" ] && nolrc=1 && DISPLAY
fi
if [ $lang ];then
[ -e /tmp/lrctmp ] && iconv -f gbk -t utf-8 -c /tmp/lrctmp -o /dev/shm/"$NM.lyric"
else
cp /tmp/lrctmp /dev/shm/"$NM.lyric"
fi
[ -e /dev/shm/"$NM.lyric" ] && sed -i 's/\r//' /dev/shm/"$NM.lyric"
READLRC
}
DOWNLRC()
{
let tmp=$dn+1
SHOW "no lyric found, $tmp""th downloading"
[ -d $TMPDIR ] || mkdir -p $TMPDIR
NM="$csipartist - $csiptitle"
#判断当前locale,utf-8的locale将要使用编码转换
[ `locale |grep "LANG=.*UTF-8"` ] && lang=1
#将歌曲名字转换为urlencode,utf-8的locale必须先转换为gb的编码
if [ $lang ];then
#od的输出为每行16组,如果太长则会截断成两行,故而应该删除可能出现的换行符。
gb=`echo "$NM" | iconv -c -f utf-8 -t gb2312 | od -t x1 -A n |tr "\n" " " |tr " " % |sed 's/%%/%/g'`
else
gb=`echo "$NM" | od -t x1 -A n |tr "\n" " " |tr " " % |sed 's/%%/%/g'`
fi
#从百度的歌词搜索里面找出当前歌曲的歌词下载页
wget "http://mp3.baidu.com/m?f=ms&tn=baidump3 ... $gb"&lm=-1"\
-O /dev/shm/lrc_file -T 10 -q
#将所有的歌词文件的链接地址保存到一个数组里面,如果第一链接没有下载成功的话继续下载下一链接。
LINKS=(`cat /dev/shm/lrc_file | grep -i "<div style=\"word-break:break-all\"" | awk -F"\"" '{print $4}'`)
let lk_n=0
while [ ${LINKS[0]} ] && [ $lk_n -lt ${#LINKS[@]} ] && [ ! -s $LRCDIR/"$csipartist"/"$csiptitle".lyric ];do
if [ $lang ];then
wget "${LINKS[$lk_n]}" -O /dev/shm/lrctmp -T 5 -t 2 -q
[ -s /dev/shm/lrctmp ] && iconv -f gb2312 -t utf-8 -c /dev/shm/lrctmp -o $LRCDIR/"$csipartist"/"$csiptitle".lyric
let lk_n=$lk_n+1
else
wget "${LINKS[$lk_n]}" -O $LRCDIR/"$csipartist"/"$csiptitle".lyric -T 5 -t 2 -q
let lk_n=$lk_n+1
fi
[ -s $LRCDIR/"$csipartist"/"$csiptitle".lyric ] && sed -i'' "s/\r/\n/g" $LRCDIR/"$csipartist"/"$csiptitle".lyric #去掉dos字符
> /dev/shm/lrctmp
done
}
#lrc文件处理:将文件编上行号、仅提取出时间信息,一行中有多个时间的把每个时间断到下一行但是前面的行号不变
#这样的话,以后按照时间去搜索歌词行就不会出错
LRC_SPLIT()
{
cat $LRCDIR/"$csipartist"/"$csiptitle".lyric -n |grep "\[[0-9]" |while read LINE0
do
n=`echo $LINE0 |grep " " |awk -F" " '{print $1}'`
[ $n ] && num0=$n
echo $LINE0 |sed "s/\]\[/@/g;s/\[//g" \
|sed "s/@/\n$num0"\ "/g" |sed "s/:0/:/g"
done |sed "s/\ 0/\ /g;s/\..*//g;s/\].*//g" >/dev/shm/lrc_time.list
#想更精确些,但没成功
#done |sed "s/\ 0/\ /g;s/\].*//g" >/dev/shm/lrc_time.list

#/dev/shm相当于是直接建立在内存中的文件夹,把小的临时文件放里面可以减少对硬盘的读写,加快速度
}
#取得当前播放时间,找到并返回与其最贴近的歌词时间(小于当前播放的时间),可以根据此时间来搜索并显示歌词
FIND_LRC_TIME()
{
pltm=`mpc |grep / | awk -F" " '{print $3}' |awk -F"/" '{print $1}'`
let tmp=-1
let pltm_min=`echo $pltm |sed "s/:.*//g"`
let pltm_sec=`echo $pltm |sed "s/.*://g;s/^0//g"`
for i in `cat /dev/shm/lrc_time.list |grep "$pltm_min:"`;do
let lrctm_sec=`echo $i |sed "s/.*://g"` #let不能赋值小数
if [ $tmp -lt $pltm_sec ] && [ $tmp -lt $lrctm_sec ] && [ $pltm_sec -ge $lrctm_sec ];then
let tmp=$lrctm_sec
fi
done
echo "$pltm_min:$tmp"
}
#整理歌词
READLRC()
{
NM="$csipartist - $csiptitle"
[ -e /dev/shm/"$NM.lyric" ] && awk '! /(\] *.?)$|^( *)$|^[^\[]/' /dev/shm/"$NM.lyric" | awk -F"]" '{if (NF > 2) {for (i = 1; i < NF; i++) {print $i"]"$NF;}} else{print $0;}}' | sort > $LRCDIR/"$csipartist"/"$csiptitle.lyric"
}
#显示歌词
DISPLAY()
{
SHOWTITLE
LRC_SPLIT
line0=0
let n=0
tmp0=0
tmp1=$(FIND_LRC_TIME)
sleep 1
cp $LRCDIR/"$csipartist"/"$csiptitle".lyric /dev/shm/lrc_tmp #刷新歌词

while [ true ] ; do
prenm=$NM
GETNAME
#当播放的歌是同一首歌曲时显示歌词
if [ "$prenm" = "$NM" ] ; then
[ `mpc |grep playing |sed 's/ //g'` ] || break #判断播放状态,停止播放时跳出程序。
lrc_line=`cat /dev/shm/lrc_time.list |grep -m 1 -w $tmp1 |sed "s/\ .*//g"` && tmp1=$(FIND_LRC_TIME)
#:模式合并,cli中超行清屏
[ $lrc_line ] && [ $line0 != $lrc_line ] && words=`cat /dev/shm/lrc_tmp -n \
|sed "s/\[.*\]/@/g" |grep -w $lrc_line |sed "s/.*@/ /g"` && SHOW $words && line0=$lrc_line && let n=$n+1
##当显示不小于指定行数时清屏,mlrc中是不小于$row,而lrcosd中是等于5,这里用不小于$row
[ $n -ge $row ] && SHOWTITLE && echo $words && let n=0
sleep 0.5
else
break
fi
done
}
#默认流程
DEFAULT()
{
NM0="str" #?干嘛用?
let dn=0
let st=0
#如果在播放
while [ `mpc |grep playing |sed 's/ //g'` ] ; do
#移动mlrc的歌词文件至ttplay的歌词文件
[ -s $LRCDIR/"$NM".lrc ] && cd $LRCDIR && mv "$NM".lrc "$csipartist"/"$csiptitle".lyric
prenm=$NM
GETNAME
[ "$prenm" != "$NM" ] && let dn=0 && let st=0
#如果不存在歌词文件
if [ ! -s $LRCDIR/"$csipartist"/"$csiptitle".lyric ]; then
[ $st -eq "0" ] && SHOWTITLE && let st=1 #无歌词时也要先显示一下标题吧,但记住只显示一次噢
[ $dn -le "3" ] && DOWNLRC && let dn=$dn+1 #下载失败时,最多重复下载3次
#下载失败
[ $dn -eq "4" ] && [ ! -s $LRCDIR/"$csipartist"/"$csiptitle".lyric ] && SHOW "download lyric fail" && sleep 2 && SHOWTITLE && let dn=$dn+1
else
DISPLAY
let dn=0
fi
sleep 0.5 #大有妙用,可使cpu从100%到2%
done
}
#******main******
case "$1" in
'-d'|'--download')
player='download'
title=$2
artist=$3
blurred=1
DOWNLRC;;
''|'osd'|'cli')
[ -d ~/.config ] || mkdir -p ~/.config
while [ ! -e ~/.config/mlrc.conf ] ; do
echo -e "[config]\nmode=osd\nplayer=mpd\nblurred=0\nreadname=id3\nnamemode=artist-title\n[cli]\nrow=10\n[osd]\nvposition=bottom\nhalignment=left\ntimeout=10000\nsize=18000\nforeground=white\nanimations=on" > ~/.config/mlrc.conf
done
#判断模式
if [ "$1" = "osd" ] ; then
mode="osd"
#不要动态改配置
#sed -i 's/^mode=.*/mode=osd/' ~/.config/mlrc.conf
elif [ "$1" = "cli" ] ; then
mode="cli"
#sed -i 's/^mode=.*/mode=cli/' ~/.config/mlrc.conf
else
mode="`cat ~/.config/mlrc.conf | sed -n /^mode/p | awk -F'=' '{print $2}'`"
fi
[ ! `which gnome-osd-client` ] && mode="cli"
#判断播放器
if [ -n "`ps -d | grep audacious`" ] ; then
player="aud"
sed -i 's/^player=.*/player=aud/' ~/.config/mlrc.conf
elif [ -n "`ps -d | grep amarokapp`" ] ; then
player="amok"
sed -i 's/^player=.*/player=amok/' ~/.config/mlrc.conf
elif [ -n "`ps -d | grep rhythmbox`" ] ; then
player="rhythmbox"
sed -i 's/^player=.*/player=rhythmbox/' ~/.config/mlrc.conf
elif [ -n "`ps -d | grep exaile`" ] ;then
player="exaile"
sed -i 's/^player=.*/player=exaile/' ~/.config/mlrc.conf
elif [ -n "`ps -d | grep quodli`" ] ;then
player="quodli"
sed -i 's/^player=.*/player=quodli/' ~/.config/mlrc.conf
elif [ -n "`ps -A | grep mocp`" ] ; then
player="mocp"
sed -i 's/^player=.*/player=mocp/' ~/.config/mlrc.conf
elif [ -n "`ps -d | grep mpd`" ] ;then
player="mpd"
sed -i 's/^player=.*/player=mpd/' ~/.config/mlrc.conf
else
player="`cat ~/.config/mlrc.conf | sed -n /^player/p | awk -F'=' '{print $2}'`"
fi
#读取配置文件数据
blurred="`cat ~/.config/mlrc.conf | sed -n /^blurred/p | awk -F'=' '{print $2}'`"
readname="`cat ~/.config/mlrc.conf | sed -n /^readname/p | awk -F'=' '{print $2}'`"
namemode1="`cat ~/.config/mlrc.conf | sed -n /^namemode/p | awk -F'=' '{print $2}' | awk -F'-' '{print $1}'`"
namemode2="`cat ~/.config/mlrc.conf | sed -n /^namemode/p | awk -F'=' '{print $2}' | awk -F'-' '{print $2}'`"
row="`cat ~/.config/mlrc.conf | sed -n /^row/p | awk -F'=' '{print $2}'`"
vposition="`cat ~/.config/mlrc.conf | sed -n /^vposition/p | awk -F'=' '{print $2}'`"
halignment="`cat ~/.config/mlrc.conf | sed -n /^halignment/p | awk -F'=' '{print $2}'`"
timeout="`cat ~/.config/mlrc.conf | sed -n /^timeout/p | awk -F'=' '{print $2}'`"
size="`cat ~/.config/mlrc.conf | sed -n /^size/p | awk -F'=' '{print $2}'`"
foreground="`cat ~/.config/mlrc.conf | sed -n /^foreground/p | awk -F'=' '{print $2}'`"
animations="`cat ~/.config/mlrc.conf | sed -n /^animations/p | awk -F'=' '{print $2}'`"
DEFAULT;;
'-h'|'--help')
USAGE;;
*)
echo "Option '$1' is not recognized, see $0 -h or --help.";;
esac

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-05 18:56
solcomo
千千静听
..看看这个

代码: 全选

/*
作者:gyh
邮箱:[email protected]
QQ:64125904
*/
function SingleDecToHex($dec)   
{   
    $tmp="";   
    $dec=$dec%16;   
    if($dec<10) return $tmp.$dec;   
    $arr=array("A","B","C","D","E","F");   
    return $tmp.$arr[$dec-10];   
}   
function SetToHexString($str)   
{   
    if(!$str) return false;   
    $tmp="";   
    for($i=0;$i<strlen($str);$i++)   
    {   
        $ord=ord($str[$i]);   
        $tmp.=SingleDecToHex(($ord-$ord%16)/16);   
        $tmp.=SingleDecToHex($ord%16);   
    }   
    return $tmp;   
}   
function qianqian_code($str)   
{   
        $s=strtolower($str); 
        $s=str_replace(" ","",$s); 
        $s=str_replace("'","",$s); 
        return SetToHexString(iconv('GBK','UTF-16LE',$s));}  
  
function conv($num)  
{  
    $tp = bcmod($num,4294967296);  
 
    if(bccomp($num,0)>=0 && bccomp($tp,2147483648)>0)  
        $tp=bcadd($tp,-4294967296);  
    if(bccomp($num,0)<0 && bccomp($tp,2147483648)<0)  
        $tp=bcadd($tp,4294967296);  
 
    return $tp;  
}  
function CodeFunc($Id,$artist,$title)  
{  
    $Id=(int)$Id;  
    $utf8Str=SetToHexString(iconv('GBK','UTF-8',$artist.$title));  
 
    $length=strlen($utf8Str)/2;  
    for($i=0;$i<=$length-1;$i++)  
        eval('$song['.$i.'] = 0x'.substr($utf8Str,$i*2,2).';');  
 
    $tmp2=0;  
    $tmp3=0;  
 
    $tmp1 = ($Id & 0x0000FF00) >> 8; //右移8位后为0x0000015F  
//tmp1 0x0000005F  
    if ( ($Id & 0x00FF0000) == 0 ) {  
        $tmp3 = 0x000000FF & ~$tmp1; //CL 0x000000E7  
    } else {  
        $tmp3 = 0x000000FF & (($Id & 0x00FF0000) >> 16); //右移16位后为0x00000001  
    }  
    $tmp3 = $tmp3 | ((0x000000FF & $Id) << 8); //tmp3 0x00001801  
    $tmp3 = $tmp3 << 8; //tmp3 0x00180100  
    $tmp3 = $tmp3 | (0x000000FF & $tmp1); //tmp3 0x0018015F  
    $tmp3 = $tmp3 << 8; //tmp3 0x18015F00  
    if ( ($Id & 0xFF000000) == 0 ) {  
        $tmp3 = $tmp3 | (0x000000FF & (~$Id)); //tmp3 0x18015FE7  
    } else {  
        $tmp3 = $tmp3 | (0x000000FF & ($Id >> 24)); //右移24位后为0x00000000  
    }  
 
    $i=$length-1;  
    while($i >= 0){  
        $char = $song[$i];  
        if($char >= 0x80) $char = $char - 0x100;  
 
        $tmp1 = ($char + $tmp2) & 0x00000000FFFFFFFF;  
        $tmp2 = ($tmp2 << ($i%2 + 4)) & 0x00000000FFFFFFFF;  
        $tmp2 = ($tmp1 + $tmp2) & 0x00000000FFFFFFFF;  
        $i -= 1;  
    }  
  
    $i=0;  
    $tmp1=0;  
    while($i<=$length-1){  
        $char = $song[$i];  
        if($char >= 128) $char = $char - 256;  
        $tmp7 = ($char + $tmp1) & 0x00000000FFFFFFFF;  
        $tmp1 = ($tmp1 << ($i%2 + 3)) & 0x00000000FFFFFFFF;  
        $tmp1 = ($tmp1 + $tmp7) & 0x00000000FFFFFFFF;  
 
        $i += 1;  
    }  
  
    $t = conv($tmp2 ^ $tmp3);  
    $t = conv(($t+($tmp1 | $Id)));  
    $t = conv(bcmul($t , ($tmp1 | $tmp3)));  
    $t = conv(bcmul($t , ($tmp2 ^ $Id)));  
  
    if(bccomp($t , 2147483648)>0)   
         $t = bcadd($t ,- 4294967296);   
    return $t;}  
  
$artist="张韶涵";  
$title="床边故事";   
$doc = new DOMDocument(); 
$doc->load("http://lrccnc.ttplayer.com/dll/lyricsvr.dll?sh?Artist=".qianqian_code($artist)."&Title=".qianqian_code($title)."&Flags=0"); 
   
$lrcNode = $doc->getElementsByTagName("lrc"); 
foreach($lrcNode as $lrc) 
{  
   $id=$lrc->getAttribute("id"); 
   $artist=iconv('UTF-8','GBK',$lrc->getAttribute("artist"));  
   $title=iconv('UTF-8','GBK',$lrc->getAttribute("title"));  
   $code=CodeFunc($id,$artist,$title);  
   $lrcstr=iconv('UTF-8','GBK',file_get_contents("http://lrccnc.ttplayer.com/dll/lyricsvr.dll?dl?Id=".$id."&Code=".$code));  
   echo $lrcstr; 
   break; 
} 
 
  
?> 

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-05 19:07
shellex
****** 50 Cent - So Amazing (Feat. Olivia) ******

Summer, winter, spring, and fall
ServerError: <type 'exceptions.ValueError'>: unable to parse '' as boolean
I'll be around to catch ya calls
ServerError: <type 'exceptions.ValueError'>: unable to parse '' as boolean

我shell不灵。
我看不出来是哪里错鸟...

Re: mlrc(歌词脚本,支持很多播放器哦 :) 7月5日更新)

发表于 : 2008-10-05 19:55
solcomo
shellex 写了:****** 50 Cent - So Amazing (Feat. Olivia) ******

Summer, winter, spring, and fall
ServerError: <type 'exceptions.ValueError'>: unable to parse '' as boolean
I'll be around to catch ya calls
ServerError: <type 'exceptions.ValueError'>: unable to parse '' as boolean

我shell不灵。
我看不出来是哪里错鸟...
什么播放器啊?