{"id":245,"date":"2007-02-14T20:19:00","date_gmt":"2007-02-14T20:19:00","guid":{"rendered":"http:\/\/marvelliu.wordpress.com\/2007\/02\/14\/xlyrics"},"modified":"2007-02-14T20:19:00","modified_gmt":"2007-02-14T20:19:00","slug":"xlyrics","status":"publish","type":"post","link":"https:\/\/marvelliu.space\/?p=245","title":{"rendered":"xlyrics"},"content":{"rendered":"<p>\u6700\u8fd1\u5728\u542c\u97f3\u4e50\uff0c\u6a2a\u5411\u8bc4\u6d4b\u4e86\u51e0\u6b3elinux\u4e0b\u7684\u97f3\u9891\u64ad\u653e\u5668\u3002\u89c9\u5f97xmms\u5b9e\u5728\u662f\u6bd4\u8f83\u843d\u4f0d\u4e86\uff0c\u73b0\u5728\u7528\u7684\u6bd4\u8f83\u597d\u7684\u662fbmp\uff0c\u4e0d\u8fc7\u8c8c\u4f3cbmp\u4e5f\u505c\u6b62\u5f00\u53d1\u4e86\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662fbmpx\uff0c\u4e5f\u5c31\u662fBeep Media Player eXperimental\u3002\u6211\u7528\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u8fd8\u4e0d\u9519\uff0c\u5c24\u5176\u662f\u542c\u5404\u79cd\u9891\u9053\u3002\u4e0d\u8fc7\u611f\u89c9\u73b0\u5728\u529f\u80fd\u5b8c\u6210\u7684\u8fd8\u662f\u6bd4\u8f83\u5c11\uff0c\u4e2d\u6587\u652f\u6301\u4e5f\u4e0d\u597d\uff0c\u5e0c\u671b\u4ee5\u540e\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u80fd\u591f\u52a0\u8fdb\u5bf9\u6b4c\u66f2\u4e2d\u6587\u7684\u652f\u6301\u3002<br \/>\u5176\u4ed6\u8fd8\u6709amarok\u548caudacious\uff0c\u4e0d\u8fc7\u524d\u8005\u662fKDE\u4e0b\u9762\u7684\uff0c\u800c\u540e\u8005\u6211\u611f\u89c9\u548cbmp\u5dee\u4e0d\u591a\uff0c\u6240\u4ee5\u6ca1\u6709\u600e\u4e48\u7528\u3002\u73b0\u5728\u6211\u4e3b\u8981\u8fd8\u662f\u7528bmp\u3002\u73b0\u5728\u5c31\u6765\u8bf4\u8bf4bmp\u5427\u3002<\/p>\n<p>xmms \u7684\u8bdf\u75c5\u5c31\u662f\u5bf9\u4e8e\u4e2d\u6587\u7684\u652f\u6301\u4e86\uff0c\u5c24\u5176\u662f\u5728\u82f1\u6587\u7684locale\u4e0b\u9762\uff0c\u6211\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u641e\u5b9a\u4e2d\u6587\u7684\u6b4c\u540d\u663e\u793a\u3002\u4e0d\u8fc7bmp \u5bf9\u4e2d\u6587\u652f\u6301\u8fd8\u53ef\u4ee5\uff0c\u4e2d\u6587\u6b4c\u540d\u652f\u6301\u5982\u4e0b\uff1a\u9996\u9009\u9879-&gt;\u63d2\u4ef6-&gt;\u5a92\u4f53-&gt; MPEG \u97f3\u9891\u63d2\u4ef6-&gt;\u6807\u9898-&gt;\u52fe\u9009\u201c\u5c06\u975eUTF-8 ID3\u6807\u7b7e\u8f6c\u6362\u6210UTF-8\uff0cID3\u7f16\u7801\u4e3aGB2312\uff0c\u5728\u9009\u62e9\u5b8c\u4e4b\u540e\uff0c\u6211\u91cd\u65b0\u8f7d\u5165\u4e86\u5217\u8868\uff0c\u8fd9\u4e0b\u5c31\u53ef\u4ee5\u663e\u793a\u4e2d\u6587\u4e86\u3002<\/p>\n<p>\u4eca\u5929\u770b\u5230\u4e00\u4e2a\u53ef\u4ee5\u663e\u793a\u6b4c\u8bcd\u7684\u4e1c\u4e1c<a href=\"http:\/\/www.linuxfans.org\/nuke\/modules.php?name=Site_Downloads&amp;op=geninfo&amp;did=3439\">xlyrics<\/a>\uff0c\u5b83\u53ef\u4ee5\u4f5c\u4e3axmms\u548cbmp\u7684\u63d2\u4ef6\uff0c\u6700\u65b0\u7248\u672c0.4.6\u652f\u6301\u4ece\u7f51\u4e0a\u4e0b\u8f7d\u6b4c\u8bcd\u3002\u7528\u4e86\u4e00\u4e0b\u611f\u89c9\u8fd8\u4e0d\u9519\u3002\u4e0d\u8fc7\u5728\u4f7f\u7528\u7684\u65f6\u5019\u6709\u51e0\u4e2a\u95ee\u9898\uff0c\u770b\u4e86\u4e00\u4e0b\u4ee3\u7801\uff0c\u4fee\u6539\u4e00\u4e0b\uff0c\u73b0\u5728\u7528\u7684\u6bd4\u8f83\u987a\u3002<\/p>\n<p>\u9996\u5148\u662f\u7f16\u7801\u7684\u95ee\u9898\uff0c<\/p>\n<p>\u5728\u5904\u7406\u4e2d\u6587\u6b4c\u540d\u7684\u65f6\u5019\u4f1a\u6709\u4e00\u4e9b\u95ee\u9898\uff0c\u4fee\u6539xlyrics-0.4.6\/src\/lyrics_download.c<\/p>\n<p> 57 if(gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &amp;iter, path)){<br \/> 58         gtk_tree_model_get(GTK_TREE_MODEL(store), &amp;iter, 1, &amp;resrc, -1);<br \/> 59         gtk_widget_destroy(download_window);<br \/> 60         tpid = fork();<br \/> 61         if(tpid == 0){<br \/> 62             char buf[256];<br \/> 63             gchar *utf8;<br \/> 64             strcpy(buf,resrc);<br \/> 65             utf8 = locale2utf8(buf);<br \/> 66             execlp(&#8220;\/usr\/lib\/xlyrics\/downloadlyrics.pl&#8221;,<br \/> 67                     \/\/&#8221;downloadlyrics.pl&#8221;, resrc, redes, 0);<br \/> 68                     &#8220;downloadlyrics.pl&#8221;, utf8, redes, 0);<br \/> 69             exit(-1);<br \/> 70         }<br \/> 71         wait_user = 0;<br \/> 72         final = 1;<\/p>\n<p>\u4e4b\u540e\u7f16\u8bd1\uff0c\u5c06\u7f16\u8bd1\u597d\u7684xlyrics\u590d\u5236\u5230\/usr\/local\/bin\u4e0b\u9762\u8986\u76d6\u539f\u6765\u7684xlyrics\u6587\u4ef6\u3002<\/p>\n<p>\u4fee\u6539\/usr\/lib\/xlyrics\/downloadlyrics.pl\uff1a<\/p>\n<p>use HTTP::Lite;<br \/>$http = new HTTP::Lite;<\/p>\n<p><font color=\"red\"><br \/>use Encode;<br \/>use Encode::CN;<br \/><\/font><br \/><font color=\"blue\"><br \/>$gbmusic = encode(&#8220;euc-cn&#8221;,decode_utf8($music));<br \/>$pattern = &#8220;[0-9]+ &#8220;;<br \/>$gbmusic =~ s\/$pattern\/\/g;<br \/><\/font><\/p>\n<p># search lyrics in basic database<br \/>%vars = (<br \/>        &#8220;souqu&#8221; =&gt; &#8220;\u6b4c\u540d&#8221;,<br \/>       <font color=\"red\"> &#8220;souci&#8221; =&gt; $gbmusic,<\/font><br \/>        &#8220;ku&#8221; =&gt; &#8220;db&#8221;,<br \/>        &#8220;B1&#8221; =&gt; &#8220;\u63d0\u4ea4&#8221;<br \/>);<br \/>$http-&gt;prepare_post(%vars);<br \/>$http-&gt;request(&#8220;http:\/\/www.hjqing.com\/lrc\/index.asp&#8221;)<br \/>        or die &#8220;Unable to get document: $!&#8221;;<br \/>if($http-&gt;body() =~ \/\u6ca1\u6709\u4f60\u60f3\u627e\u7684\u6b4c\u8bcd\/){<br \/># try the addtion database<br \/>        glob $http = new HTTP::Lite;<br \/>        %vars = (<br \/>                &#8220;souqu&#8221; =&gt; &#8220;\u6b4c\u540d&#8221;,<br \/>                <font color=\"red\">&#8220;souci&#8221; =&gt; $gbmusic,<\/font><br \/>#&#8221;souci&#8221; =&gt; $music,<br \/>                &#8220;ku&#8221; =&gt; &#8220;dbadd&#8221;,<br \/>                &#8220;B1&#8221; =&gt; &#8220;\u63d0\u4ea4&#8221;<br \/>        );<br \/>        $http-&gt;prepare_post(%vars);<br \/>        $http-&gt;request(&#8220;http:\/\/www.hjqing.com\/lrc\/index.asp&#8221;)<br \/>                or die &#8220;Unable to get documents $!&#8221;;<br \/>        $http-&gt;body() =~ \/\u6ca1\u6709\u4f60\u60f3\u627e\u7684\u6b4c\u8bcd\/ &amp;&amp; die(&#8220;find nothing&#8221;);<br \/>}<br \/>\u5176\u4e2d\uff0c\u7ea2\u8272\u7684\u90e8\u5206\u662f\u7528\u4e8e\u7f16\u7801\u8f6c\u6362\u7684\u3002\u84dd\u8272\u7684\u90e8\u5206\u4e0d\u662f\u5fc5\u9700\u7684\uff0c\u6211\u7535\u8111\u4e0a\u6709\u7684\u4e13\u8f91\u7684\u6b4c\u66f2\u90fd\u662f10 xxx\u8fd9\u79cd\u5f62\u5f0f\uff0c\u5f00\u5934\u6709\u6570\u5b57\u52a0\u7a7a\u683c\uff0c\u8fd9\u79cd\u5f62\u5f0f\u641c\u4e0d\u5230\u6b4c\u8bcd\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u5f00\u5934\u90e8\u5206\u53bb\u6389\uff0c\u5c31\u9700\u8981\u4f7f\u7528\u84dd\u8272\u90e8\u5206\u3002<\/p>\n<p>\u6b64\u5916\uff0cxlyrics\u5de5\u4f5c\u5728gb2312\u7684\u7f16\u7801\u4e0b\u9762\uff0c\u6240\u4ee5\u9700\u8981\u5c06\u539f\u6765\u7684 \/usr\/local\/bin\/xlyrics \u6587\u4ef6\u8fdb\u884c\u5907\u4efd\u6210 \/usr\/local\/bin\/xlyrics.old\uff0c\u8fd9\u91cc\u6587\u4ef6\u7684\u5177\u4f53\u4f4d\u7f6e\u548c\u4f60\u7684\u5b89\u88c5\u6709\u5173\u3002\u63a5\u7740\u521b\u5efa \/usr\/local\/bin\/xlyrics\uff1a<\/p>\n<p>export LANG=zh_CN.GB2312<br \/>\/usr\/local\/bin\/xlyrics.old<\/p>\n<p>\u8fd9\u6837\uff0c\u5c31\u53ef\u4ee5\u542c\u6b4c\u770b\u6b4c\u8bcd\u4e86\uff0c\u611f\u89c9\u5f88\u4e0d\u9519\u3002<\/p>\n<p>\u81ea\u7531\u8f6f\u4ef6\u5c31\u662f\u597d\uff0c\u6ca1\u4e8b\u60c5\u505a\u4e00\u4e0b\u6e90\u4ee3\u7801\u7ea7\u7684hack @@<\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u6700\u8fd1\u5728\u542c\u97f3\u4e50\uff0c\u6a2a\u5411\u8bc4\u6d4b\u4e86\u51e0\u6b3elinux\u4e0b\u7684\u97f3\u9891\u64ad\u653e\u5668\u3002\u89c9\u5f97xmms\u5b9e\u5728\u662f\u6bd4\u8f83\u843d\u4f0d\u4e86\uff0c\u73b0\u5728\u7528\u7684\u6bd4\u8f83\u597d\u7684\u662fbmp\uff0c\u4e0d\u8fc7\u8c8c\u4f3cbmp\u4e5f\u505c\u6b62\u5f00\u53d1\u4e86\uff0c\u53d6\u800c\u4ee3\u4e4b\u7684\u662fbmpx\uff0c\u4e5f\u5c31\u662fBeep Media Player eXperimental\u3002\u6211\u7528\u4e86\u4e00\u4e0b\uff0c\u611f\u89c9\u8fd8\u4e0d\u9519\uff0c\u5c24\u5176\u662f\u542c\u5404\u79cd\u9891\u9053\u3002\u4e0d\u8fc7\u611f\u89c9\u73b0\u5728\u529f\u80fd\u5b8c\u6210\u7684\u8fd8\u662f\u6bd4\u8f83\u5c11\uff0c\u4e2d\u6587\u652f\u6301\u4e5f\u4e0d\u597d\uff0c\u5e0c\u671b\u4ee5\u540e\u7684\u5f00\u53d1\u8fc7\u7a0b\u4e2d\u80fd\u591f\u52a0\u8fdb\u5bf9\u6b4c\u66f2\u4e2d\u6587\u7684\u652f\u6301\u3002\u5176\u4ed6\u8fd8\u6709amarok\u548caudacious\uff0c\u4e0d\u8fc7\u524d\u8005\u662fKDE\u4e0b\u9762\u7684\uff0c\u800c\u540e\u8005\u6211\u611f\u89c9\u548cbmp\u5dee\u4e0d\u591a\uff0c\u6240\u4ee5\u6ca1\u6709\u600e\u4e48\u7528\u3002\u73b0\u5728\u6211\u4e3b\u8981\u8fd8\u662f\u7528bmp\u3002\u73b0\u5728\u5c31\u6765\u8bf4\u8bf4bmp\u5427\u3002 xmms \u7684\u8bdf\u75c5\u5c31\u662f\u5bf9\u4e8e\u4e2d\u6587\u7684\u652f\u6301\u4e86\uff0c\u5c24\u5176\u662f\u5728\u82f1\u6587\u7684locale\u4e0b\u9762\uff0c\u6211\u5230\u73b0\u5728\u8fd8\u6ca1\u6709\u641e\u5b9a\u4e2d\u6587\u7684\u6b4c\u540d\u663e\u793a\u3002\u4e0d\u8fc7bmp \u5bf9\u4e2d\u6587\u652f\u6301\u8fd8\u53ef\u4ee5\uff0c\u4e2d\u6587\u6b4c\u540d\u652f\u6301\u5982\u4e0b\uff1a\u9996\u9009\u9879-&gt;\u63d2\u4ef6-&gt;\u5a92\u4f53-&gt; MPEG \u97f3\u9891\u63d2\u4ef6-&gt;\u6807\u9898-&gt;\u52fe\u9009\u201c\u5c06\u975eUTF-8 ID3\u6807\u7b7e\u8f6c\u6362\u6210UTF-8\uff0cID3\u7f16\u7801\u4e3aGB2312\uff0c\u5728\u9009\u62e9\u5b8c\u4e4b\u540e\uff0c\u6211\u91cd\u65b0\u8f7d\u5165\u4e86\u5217\u8868\uff0c\u8fd9\u4e0b\u5c31\u53ef\u4ee5\u663e\u793a\u4e2d\u6587\u4e86\u3002 \u4eca\u5929\u770b\u5230\u4e00\u4e2a\u53ef\u4ee5\u663e\u793a\u6b4c\u8bcd\u7684\u4e1c\u4e1cxlyrics\uff0c\u5b83\u53ef\u4ee5\u4f5c\u4e3axmms\u548cbmp\u7684\u63d2\u4ef6\uff0c\u6700\u65b0\u7248\u672c0.4.6\u652f\u6301\u4ece\u7f51\u4e0a\u4e0b\u8f7d\u6b4c\u8bcd\u3002\u7528\u4e86\u4e00\u4e0b\u611f\u89c9\u8fd8\u4e0d\u9519\u3002\u4e0d\u8fc7\u5728\u4f7f\u7528\u7684\u65f6\u5019\u6709\u51e0\u4e2a\u95ee\u9898\uff0c\u770b\u4e86\u4e00\u4e0b\u4ee3\u7801\uff0c\u4fee\u6539\u4e00\u4e0b\uff0c\u73b0\u5728\u7528\u7684\u6bd4\u8f83\u987a\u3002 \u9996\u5148\u662f\u7f16\u7801\u7684\u95ee\u9898\uff0c \u5728\u5904\u7406\u4e2d\u6587\u6b4c\u540d\u7684\u65f6\u5019\u4f1a\u6709\u4e00\u4e9b\u95ee\u9898\uff0c\u4fee\u6539xlyrics-0.4.6\/src\/lyrics_download.c 57 if(gtk_tree_model_get_iter(GTK_TREE_MODEL(store), &amp;iter, path)){ 58 gtk_tree_model_get(GTK_TREE_MODEL(store), &amp;iter, 1, &amp;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(&#8220;\/usr\/lib\/xlyrics\/downloadlyrics.pl&#8221;, 67 \/\/&#8221;downloadlyrics.pl&#8221;, resrc, redes, 0); 68 &#8220;downloadlyrics.pl&#8221;, utf8, &hellip; <a href=\"https:\/\/marvelliu.space\/?p=245\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;xlyrics&#8221;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[21],"tags":[],"class_list":["post-245","post","type-post","status-publish","format-standard","hentry","category-tech"],"_links":{"self":[{"href":"https:\/\/marvelliu.space\/index.php?rest_route=\/wp\/v2\/posts\/245","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/marvelliu.space\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/marvelliu.space\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/marvelliu.space\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/marvelliu.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=245"}],"version-history":[{"count":0,"href":"https:\/\/marvelliu.space\/index.php?rest_route=\/wp\/v2\/posts\/245\/revisions"}],"wp:attachment":[{"href":"https:\/\/marvelliu.space\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=245"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/marvelliu.space\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=245"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/marvelliu.space\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=245"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}