xlyrics

最近在听音乐,横向评测了几款linux下的音频播放器。觉得xmms实在是比较落伍了,现在用的比较好的是bmp,不过貌似bmp也停止开发了,取而代之的是bmpx,也就是Beep Media Player eXperimental。我用了一下,感觉还不错,尤其是听各种频道。不过感觉现在功能完成的还是比较少,中文支持也不好,希望以后的开发过程中能够加进对歌曲中文的支持。
其他还有amarok和audacious,不过前者是KDE下面的,而后者我感觉和bmp差不多,所以没有怎么用。现在我主要还是用bmp。现在就来说说bmp吧。

xmms 的诟病就是对于中文的支持了,尤其是在英文的locale下面,我到现在还没有搞定中文的歌名显示。不过bmp 对中文支持还可以,中文歌名支持如下:首选项->插件->媒体-> MPEG 音频插件->标题->勾选“将非UTF-8 ID3标签转换成UTF-8,ID3编码为GB2312,在选择完之后,我重新载入了列表,这下就可以显示中文了。

今天看到一个可以显示歌词的东东xlyrics,它可以作为xmms和bmp的插件,最新版本0.4.6支持从网上下载歌词。用了一下感觉还不错。不过在使用的时候有几个问题,看了一下代码,修改一下,现在用的比较顺。

首先是编码的问题,

在处理中文歌名的时候会有一些问题,修改xlyrics-0.4.6/src/lyrics_download.c

57 if(gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &iter, path)){
58 gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 1, &resrc, -1);
59 gtk_widget_destroy(download_window);
60 tpid = fork();
61 if(tpid == 0){
62 char buf[256];
63 gchar *utf8;
64 strcpy(buf,resrc);
65 utf8 = locale2utf8(buf);
66 execlp(“/usr/lib/xlyrics/downloadlyrics.pl”,
67 //”downloadlyrics.pl”, resrc, redes, 0);
68 “downloadlyrics.pl”, utf8, redes, 0);
69 exit(-1);
70 }
71 wait_user = 0;
72 final = 1;

之后编译,将编译好的xlyrics复制到/usr/local/bin下面覆盖原来的xlyrics文件。

修改/usr/lib/xlyrics/downloadlyrics.pl:

use HTTP::Lite;
$http = new HTTP::Lite;


use Encode;
use Encode::CN;


$gbmusic = encode(“euc-cn”,decode_utf8($music));
$pattern = “[0-9]+ “;
$gbmusic =~ s/$pattern//g;

# search lyrics in basic database
%vars = (
“souqu” => “歌名”,
“souci” => $gbmusic,
“ku” => “db”,
“B1” => “提交”
);
$http->prepare_post(%vars);
$http->request(“http://www.hjqing.com/lrc/index.asp”)
or die “Unable to get document: $!”;
if($http->body() =~ /没有你想找的歌词/){
# try the addtion database
glob $http = new HTTP::Lite;
%vars = (
“souqu” => “歌名”,
“souci” => $gbmusic,
#”souci” => $music,
“ku” => “dbadd”,
“B1” => “提交”
);
$http->prepare_post(%vars);
$http->request(“http://www.hjqing.com/lrc/index.asp”)
or die “Unable to get documents $!”;
$http->body() =~ /没有你想找的歌词/ && die(“find nothing”);
}
其中,红色的部分是用于编码转换的。蓝色的部分不是必需的,我电脑上有的专辑的歌曲都是10 xxx这种形式,开头有数字加空格,这种形式搜不到歌词,所以需要将开头部分去掉,就需要使用蓝色部分。

此外,xlyrics工作在gb2312的编码下面,所以需要将原来的 /usr/local/bin/xlyrics 文件进行备份成 /usr/local/bin/xlyrics.old,这里文件的具体位置和你的安装有关。接着创建 /usr/local/bin/xlyrics:

export LANG=zh_CN.GB2312
/usr/local/bin/xlyrics.old

这样,就可以听歌看歌词了,感觉很不错。

自由软件就是好,没事情做一下源代码级的hack @@

Leave a Comment

Your email address will not be published. Required fields are marked *