<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[三翻领的个人空间]]></title> 
<link>http://www.sanfanling.cn/index.php</link> 
<description><![CDATA[欢迎朋友来访]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[三翻领的个人空间]]></copyright>
<item>
<link>http://www.sanfanling.cn/read.php?288</link>
<title><![CDATA[一不小心，做了个mpd、xmms2前端..........]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Sat, 23 Jan 2010 11:27:14 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?288</guid> 
<description>
<![CDATA[ 
	对于qmmp的<a href="http://qmmp.ylsoftware.com/links_en.php" target="_blank">这个页面</a>，我是非常熟悉了，因为这是第一款著名的播放器将lrcShow-X作为推荐软件放置于项目首页，并提供了相关链接，出于一些虚荣心的作祟，我还是经常去看看的——只是看看。<br/><br/>不过呢，昨天倒是仔细研究了一下这个页面上提供的一个<a href="http://incise.org/mpris-remote.html" target="_blank">mpris-remote</a>的链接，其中提及了为mpd提供dbus接口的一个模块。说到mpd，我个人还是非常喜欢的，这种C/S架构的播放器，小巧精致，而且非常灵活，前端也非常多。苦于mpd本身并没有提供dbus接口，因此我也不是经常用，毕竟对于lrcShow-X来说，没有什么开发价值。不过昨天一番研究下来，还是决定安装一个mpDris试一下，不管成功与否，我都尝试过了，也对得起很多朋友要求lrcShow-X支持mpd愿望。<br/><br/>gentoo本身的portage没有提供mpDris的ebuild，好在网上有，google一把即可，而且安装顺利，只是依赖了一个python-mpd，好在体积不大。完成后在终端启动mpDris，并在终端启动qdbusviewer，这样就可以非常方便直观的来浏览mpDris提供的各个dbus接口细节。这里要非常感谢我的朋友和合作伙伴OutLikeAShoe，非常厉害的意大利高材生，是他为lrcShow-X撰写了灵活、扩展性强的dbus接口中间层，这就使得为lrcShow-X写某个播放器支持模块变得非常容易。大概也就花了5分钟时间，在拷贝amarok2模块的基础上略微修改一些内容，再加上qdbusviewer的帮助，dbus支持模块基本上就成了，接下来就是测试了。测试也很顺利，只是mpd的dbus和amarok2在一个地方有出入，就是amarok2在切换音轨的时候，除了音轨切换信号外，还发出了播放器状态切换的信号，而lrcShow-X只是监听播放器状态信号；而mpd的，则是仅仅发出了音轨切换的信号，因此这里需要处理一下，也很简单，在dbus模块里，额外加上trackChange信号的连接，并定义：接收到trackChange信号后，获取一次播放器状态，然后直接调用statusChange信号所调用的函数。<br/><br/>最终，得出了对mpd完美支持的结果。略微美中不足的是，通过dbus获取的音轨时间点只能精确到秒。大功告成后，终止了mpDris程序。但是意外发升了，lrcShow-X并没有出现dbus链接出错的现象，而是依旧漂亮的随mpd工作着。这着实令我大跌眼镜，因为终止mpDris，应该就是意味着停止了mpd的dbus服务啊。ps aux &#124; grep mpDris的输出显示，mpDris的确在后台运心中，pkill掉后，lrcShow-X终于出错了。那么也就是意味着，只要安装了mpDris，启动mpd服务后自然就提供了dbus服务，而并不像mpDris的README中所说的一定要运行mpDris。<br/><br/>至此，在安装mpDris这个依赖后，lrcShow-X最终能够支持mpd了！其副产品就有点令人啼笑皆非了，lrcShow-X提供了简单的对所有支持的播放器的回放控制，也可以认为，lrcShow-X当前已经是mpd的一个前端了，而且是一个独一无二非常另类的前端！<br/><br/>目前的SVN 224版本已经提供了mpd的支持，可以co下来帮助我测试一下，小三谢过了。<br/><br/>SVN225版本也已经开始提供对xmms2的支持，也光荣的成为xmms2前端的一员。具体操作可以参看本站lrcShow-X更新帖。<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=mpd" rel="tag">mpd</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-x" rel="tag">lrcshow-x</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E5%2589%258D%25E7%25AB%25AF" rel="tag">前端</a> , <a href="http://www.sanfanling.cn/tag.php?tag=xmms2" rel="tag">xmms2</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?282</link>
<title><![CDATA[lrcShow-X的最新动态]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Thu, 05 Nov 2009 14:48:19 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?282</guid> 
<description>
<![CDATA[ 
	目前版本已经发布到了1.2.2，不过暂时只有我一个人在维护，因为意大利朋友outLikeAShoe当前正在全力以赴攻读学位，实在是抽不出时间，好在我们还是经常邮件联系，互相讨论软件的发展方向。<br/><br/>最近也得空，也比较有欲望，因此更新频繁，抓紧时间退出全新的1.3.0版本。目前可以比较有把握的几个新特性可以公布了。<br/><br/>一个是“多搜索引擎流水搜索”。我自认在lrcShow-X项目上，还是能够体现出个人的一些创新特点的，无论是多搜索引擎、歌词策略、内嵌歌词、编码探测等都能作为旁证，这些特性在开发出来的时候可都是独一无二的，哪怕与windows下的同类软件比，也是如此。当然目前来看，很多同类软件也在跟上（有几个同是linux下的歌词软件有些地方有种似曾相识的感觉），这是好事，我也乐得看到这种相互学习、借鉴的良性状况。不过这里一定要再三提醒一句，本软件使用GPL协议发布，其他软件使用本软件的任何库、代码，或者是重写（没有换药），一定要附上GPL协议。这是游戏规则。言归正传，这个“多搜索引擎流水搜索”，就是在当本地不能搜索到歌词、自动从网上搜索时，将激活高级搜索网络对话框，并以流水的形式逐个搜索预设的一个或者多个搜索引擎。这个功能配合高级搜索引擎的一些独特特性，可以最大程度的方便用户找到最优秀、合适的lrc歌词，并且可以最大程度的发挥各个搜索引擎的搜索特长。<br/><br/>第二个特性我也是研究了很长时间，在不经意间以一种看似简单的方式实现的，那就是背景透明效果。解决了这个，也就同时解决了很多人理解上的OSD效果（我理解应该是desktop效果），无论如何，这个效果看上去还是比较有人气的。不过与其他软件的实现方式不同，他们往往使用的是一个osd库（python的或者是gnome的），而lrcShow-X使用的是qt本身特性施加于承载歌词的widget上。因此可以衍生出一些新的特效。背景透明可以和置顶效果一样，与本软件的其他三种显示效果合并使用，特别是透明＋全屏，非常拉风！<br/><br/>下一步的计划也基本成形，规划比较宏大。<br/><br/>1. 支持所谓的lrc 2.0规范 （这个是没有官方说法的，所谓的2.0规范其实是一款著名的windows音频播放器A2首先采用的，最大特色就是真正的实现字时间标签）。这里要说明一点的是，虽然目前很多歌词软件实现了所谓的卡拉OK显示方式，但是实际上这是假的，无非是将一行歌词所占用的时间平均分配给每个字上去。如果出现一句“啊”占5秒钟，“我爱你”占2秒钟的歌词，那么马上就会露馅。真正的卡拉OK效果是需要歌词源支持的。具体的2.0规范，可以搜索下wiki。<br/><br/>2. 支持python3<br/><br/>3. 跨平台支持windows<br/><br/>当然，这个项目运作到现在，已经跨了三年了，很多当初想都不敢想的功能都实现了，现在再想想又能如何呢？<br/><br/><span style="color: #DC143C;">注：忘了提醒了，上述提到的1.3.0中背景透明的新特性，是需要xrender和桌面管理器支持的，否则不仅无效，而且背景会变成漆黑一块，不过没什么大碍，取消透明即可</span><br/><br/>上个图，拉风一下 : )<br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=90" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=90" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=91" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=91" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-x" rel="tag">lrcshow-x</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E9%2580%258F%25E6%2598%258E" rel="tag">透明</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?262</link>
<title><![CDATA[lrcShow-X当前进展]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Sun, 15 Mar 2009 10:46:18 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?262</guid> 
<description>
<![CDATA[ 
	着手开发lrcShow-X至今也有不少日子了，期间得到了很多朋友的热情帮助，非常感动，并且出人意料的是，能够顺带引出由他人开发的分支项目，非常欣喜，也充分感受到了其间满足，希望该项目能够蒸蒸日上。<br/><br/>熟悉的朋友应该都知道，lrcShow-X这个项目完全脱胎自以前的lrcShow-II项目，核心代码不动丝毫，关键是在和播放器的通信上和前作完全不一样。lrcShow-II完全是依赖于amarok1的脚本机制，因此针对性很强，同样的通用性就非常弱了。而amarok2开始使用新的脚本机制，那么我所学的就完全失去了用武之地，庆幸的是，amarok2带有dbus通信接口，因此lrcShow-X得以继续延续，采用独立的进程，依赖dbus通信机制实现信息的获取和播放器的控制。<br/><br/>早先，本人的机子上只有amaarok2和audacious，因此注意力就完全集中在这两款播放器上。比较走运，这两款优秀的播放器比较符合mpris-1.0规范，所以实现难度不大，比较顺利的完成了lrcShow-X的初期雏形。不过比较可惜的是，amarok2还是有些问题，第一就是获取当前音轨的时间点上，目前还是精确到秒，不过这个已经被开发者注意到了，相信不久就会得到改进，第二个就比较郁闷了，amarok在音轨切换上，发出的信号非常混乱，导致出现了很多冗余的过程，看似音轨切换后歌词切换也正常，实际上由于发出了3次引擎切换信号，导致歌词在刷新了多次，GUI响应在音轨切换的时候也比较滞后。最明显的是，当lrcShow-X找到多个符合的歌词后，候选框会连续出现三次！另外，当停止amarok2时，在发出引擎停止信号前会发出引擎播放信号，导致程序出现错乱，这也不是lrcShow-X的过错。<br/><br/>而相反，audacious这款顺便带进支持的播放器，却支持的相当完美。<br/><br/>于是乎，开始着手对其他播放器的支持。由于本人的系统是gentoo，桌面环境是kde，因此装其它播放器，尤其是gnome下的播放器，显得非常辛苦。而且还有个小插曲。当我装了几款播放器后，启动，然后在终端使用qdbus来查看是否有自己需要的dbus通信接口，而结果总是非常失望，不是缺方法，就是缺信号。后来才突然发现，qdbus显示的方法和信号根本就不准，漏显的东西不少，而用qdbusviewer就显示的比较完全，导致我错杀了很多本已经辛辛苦苦装好的播放器。只能重来，在看。<br/><br/>目前系统上安装了quodlibet、vlc、exaile、sonata、xmms2，不过xmms2这个本来对mpris支持的最标准的播放器，由于开发者对其稳定性的怀疑，导致去掉了dbus接口，放弃，非常痛心；sonata的dbus接口等于摆设，连花瓶都算不上，放弃的很痛快。接下来就详细说说另外三款播放器当前支持的进度。<br/><br/>quodlibet，都不知道这个名字是怎么取的，不过呢，除了amarok2和audacious外，他是目前支持的最完美的一款了。不过还有些小问题，就是无法得到音轨所在目录，因此在操作嵌入歌词功能上就不行了，另外还有些小bug，已经在官方论坛提出了，也得到了开发者的响应，应该会解决得很快。非常感谢他们。<br/><br/>vlc，这个东西都不知道怎么说好，支持的还马马虎虎，但是自己的vlc却总是罢工，导致充分的测试都进行不了，第一首歌没问题，切换到第二首就肯定不行，多点几次就崩溃，不明就里。所以说对vlc的支持，自己都说不清楚，反正启动lrcShow-X后可以播放歌词，其他就不知道了。<br/><br/>exaile，这款播放器在初期就非常坚定的想支持的，不过目前有个致命问题，就他没有信号发出，虽然在google上搜索到该项目的一个分支其实已经解决了这个问题，但是并没有回滚到主分支上。在论坛向开发者提出了这个问题，并且得到了非常不错的答复，估计不久就会修复这个问题，这样，exaile就可以完美支持。<br/><br/>在接下来的开发过程中，还是希望更多的朋友能够加入测试，甚至加入开发。尽管这个项目因为qt和kde的关系，所受的关注甚至不如终端输出歌词脚本，但是.........我自己都不知道说什么好，继续下去就是了，已经一年半了。<br/><br/>目前开发版最新是svn 106<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=python" rel="tag">python</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-x" rel="tag">lrcshow-x</a> , <a href="http://www.sanfanling.cn/tag.php?tag=amarok2" rel="tag">amarok2</a> , <a href="http://www.sanfanling.cn/tag.php?tag=audacious" rel="tag">audacious</a> , <a href="http://www.sanfanling.cn/tag.php?tag=quodlibet" rel="tag">quodlibet</a> , <a href="http://www.sanfanling.cn/tag.php?tag=vlc" rel="tag">vlc</a> , <a href="http://www.sanfanling.cn/tag.php?tag=exaile" rel="tag">exaile</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrc" rel="tag">lrc</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?206</link>
<title><![CDATA[lrcShow-II正式发布［09.2.23更新至0.9.2，停止更新］]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Mon, 23 Feb 2009 12:51:04 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?206</guid> 
<description>
<![CDATA[ 
	<span style="font-size: 18px;"><span style="color: #DC143C;">感谢众多朋友长时间对lrcShow-II的一贯支持。目前0.9.2将是该插件的最后一个版本，许多新的特性和功能将会在后续作品——lrcShow-X中体现，届时还需要朋友们更多的支持与鼓励。</span></span><br/><br/><br/><br/><span style="font-size: 18px;"><span style="color: #DC143C;">注：从svn co下代码后，可直接将目录放至amarok的script目录下使用，如果启动出现错误，请赋予lrcShow-II.py文件以可执行权限。</span></span><br/><br/>经过一段时间的开发和3天时间的测试，今天很荣幸的宣布lrcShow-II的第一个正式版，0.1.0版本发布。<br/><br/>相关介绍请阅读http://www.sanfanling.cn/read.php?205<br/><br/>相较于第一个测试版，更新和修正的地方还是比较多的，这也证明了测试阶段比较成功，完整的changelog如下：<br/><br/>1.修正标亮条漂移的问题<br/>2.修正预设lrc目录为$HOME<br/>3.修正下一首歌曲开始播放时，lrc歌词在窗口中没有滚到开头的bug<br/>4.禁止滚轮滚动歌词<br/>5.增加了窗口显示歌词行数的设定<br/>6.根据歌词显示行数，重新定位标亮歌词以及窗口大小<br/>7.增加当lrcShow-II启动时Amarok处于停止状态时的行为判定<br/>8.修正增加歌词头尾两端空行的一个bug<br/>9.增加字体、字体大小设置项<br/>10.修正readConfig模块和lrcParser模块的两处bug<br/>11.修正一个读取配置文件转小写的bug<br/>12.当显示歌词行数为1行时，不做标亮处理<br/>13.修正了对歌词尾行的行为判定<br/><br/>前一个帖子里的测试版正式停止下载，改由本帖提供，同时会更新新版本和changelog，如果您在使用期间发现问题，请在此提交bug或者意见<br/><br/>07.11.25 发布lrcShow-II-0.2.0<br/><br/>changelog：<br/><br/>1.禁止右键菜单<br/>2.禁止选中歌词内容、及拖拽<br/>3.增加设置菜单，双击窗口界面呼出<br/>4.增加歌词偏移量快速调整（立即生效，仅对当前，不写入文件）<br/>5.增加快速修改歌词文件偏移量功能（写入文件）<br/>6.增加歌词编辑功能<br/>7.修正当本地编码为非UTF8，且lrc目录名中含有中文时发生的一个编码错误<br/>8.增加快速切换简繁体（立即生效，仅当前，不写入文件）<br/>9.增加歌词编辑界面中简繁体转换功能<br/>10.修正一个可能由python版本造成的bug（readConfig.py)<br/>11.修正标题栏名称<br/>12.修正当本地歌词文件不存在，调整了偏移量后“保存”按钮有效的bug<br/>13.修正生成配置文件中的一个大bug&nbsp;&nbsp;Thanks grassofhust @ linuxsir<br/><br/>07.11.26 发布lrcShow-II-0.2.1版本<br/><br/>changelog：<br/><br/>1.修正一个当没有歌词时，调整偏移量按钮和简繁转换按钮为enable的bug<br/>2.当无本地歌词时，允许打开一个内容为空的歌词编辑器<br/>3.改变标亮当前歌词行背景色为标亮当前歌词行<br/>4.修正了手动切换歌曲后，前首歌词的标亮处没有取消的bug（由3的改变引申）<br/>5.设置栏按钮文字替换为图标<br/>6.为打开的空白歌词编辑器自动添加lrc头<br/>7.精简代码<br/>8.修改标亮色的预设<br/><br/>07.12.09 发布lrcShow-II-0.3.0版本<br/><br/>changelog：<br/><br/>1.修正当lrc歌词的offset标签未含数字时出现的bug<br/>2.实现所有设置在菜单中完成，且立即生效而无须重启脚本<br/>3.重构readConfig模块<br/>4.重构配置文件形式<br/>5.增加右键菜单功能<br/>6.改进匹配本地歌词文件的方法<br/>7.修正当显示行数为1时居中定位的一个bug<br/>8.当设置为“下载lrc到本地”后，实现立刻下载当前歌曲歌词<br/>9.修正当搜索、下载歌词过慢、超时或者网络不通时阻塞GUI进程的bug<br/>10.修正切换歌曲后上首歌曲的进度计时器仍然运行的错误<br/>11.修正当前歌词下载到本地后，歌词编辑器无法打开该歌词的bug<br/><br/>07.12.09发布lrcShow-II-0.3.1版本<br/><br/>changelog：<br/><br/>1.实现真正的“滚动”<br/>2.修正邮件菜单的弹出位置<br/><br/>07.12.12发布lrcShow-II-0.3.2版本<br/><br/>changelog：<br/><br/>1.修正在实现“滚动”后出现的，最后一行歌词不被标亮的bug<br/>2.菜单中增加“退出”按钮<br/>3.设置过长歌词不自动换行，修复当歌词过长，超过窗口宽度时标亮歌词无法居中的bug<br/>4.拖动窗口任何位置实现窗口移动<br/>5.禁止横向滚动条的出现<br/>6.增加帮助文档浏览器<br/>7.撰写使用帮助文档<br/><br/>07.12.14发布lrcShow-II-0.3.3版本<br/><br/>changelog：<br/><br/>1.增加显示模式菜单<br/>2.实现全屏显示模式<br/>3.修正改变字体后计时器仍然运行的bug<br/>4.优化歌词的匹配精确度<br/>5.增加OSD显示模式<br/>6.增加联网代理支持<br/>7.增加仅下载当前歌曲lrc歌词功能（无本地lrc歌词，自动下载为否，且能网络搜索到）<br/>8.彻底剥离网络进程和主GUI进程<br/>9.实现歌词立刻跟随至当前（scroll函数和scrollPlus函数统一，取消myTimerPlus时钟对象）<br/>10.更新帮助文档<br/><br/>07.12.18发布lrcShow-II-0.4.0版本<br/><br/>changelog：<br/><br/>1.修正滚动步进过小的bug（该bug在大字体时对定位造成的影响特别明显）<br/>2.屏蔽QTextbrowser预设的快捷键<br/>3.修正了保存偏移量后，保存偏移量的函数没有清零的bug<br/>4.为配色对话框预设默认色<br/>5.为调整偏移量增加快捷键<br/>6.修正缺少歌名或者歌手信息时lrcShow-II不工作的bug<br/>7.增加本地lrc歌词编码的设定<br/>8.修正了当搜索到百度上似有实无的lrc歌词时出现的bug<br/>9.增加搜索引擎选择设置项<br/>10.增加sogou（搜狐）搜索引擎<br/>11.增加当下载时出现编码错误后的对话框<br/>12.国际化<br/>13.修正Amarok暂停时的行为判定<br/><br/>07.12.20发布lrcShow-II-0.4.1版本<br/><br/>changelog：<br/><br/>1.修正0.4.0中Amarok停止后的行为判定错误<br/>2.改进对Amarok信号匹配的规则<br/>3.增加强制网络搜索菜单项<br/>4.增加当同时在本地搜索到多个lrc歌词时的选择对话框<br/>5.增加当下载本地已经存在同名文件时的询问对话框<br/><br/>07.12.23发布0lrcShow-II-0.4.2版本<br/><br/>changelog：<br/><br/>0.4.1 - 0.4.2更新日志：<br/>1.增加ttPlayer歌词搜索引擎<br/>2.预设歌词搜索引擎为ttPlayer<br/>3.修正点击GUI界面后，标亮行被取消的bug<br/>4.为歌词选择对话框增加自动倒计时以及自动选择<br/>5.修正当两行歌词间时间间隔过短而造成标亮上的bug<br/>6.当歌曲切换后，自动关闭歌词选择对话框（搜索结果的选择对话框和本地多个结果选择对话框）<br/><br/>08.1.6发布lrcShow-II-0.5.0版本<br/><br/>changelog：<br/><br/>0.4.2 - 0.5.0更新日志：<br/>1.修正设置快捷键代码在某些发行版下出错的问题<br/>2.实现读取编码和保存编码的分离<br/>3.实现对本地lrc歌词编码的自动探测<br/>4.将针对本地lrc歌词读写编码的设置改为仅针对写lrc歌词时所用到的编码设置<br/>5.增加用户数据库<br/>6.增加“歌词策略”概念，并增加当前音轨歌词策略设置项<br/>7.实现“不使用策略”、“不搜索本地”、“不搜索网络”、“什么都不做”和记忆用户选择的歌词（当本地搜索到多个时）这五种策略，默认是“不使用策略”<br/>8.修复一个未翻译的bug<br/>9.将原gui.py模块更名为mainGui.py<br/>（“歌词策略”是个全新的概念，具体请参阅帮助文档）<br/><br/>08.1.12发布lrcShow-II-0.5.1版本<br/><br/>changelog：<br/><br/>0.5.0 - 0.5.1更新日志：<br/>1.修复当未搜索过本地时，读编码为空的bug<br/>2.合并菜单项<br/>3.增加“保存偏移量至文件”功能的快捷键<br/>4.增加当设置的歌词目录无写权限时的警告对话框<br/>5.修正当ttplayer上的歌词似有实无时的行为判断<br/>6.修复ttplayer引擎中的一个返回歌词编码bug<br/>7.增加Amarok播放控制功能<br/>8.实现向Amarok侧边栏发送歌词功能<br/>9.预设保存歌词的编码变更为utf8<br/><br/>08.1.24发布lrcShow-II-0.6.0版本<br/><br/>changelog：<br/><br/>0.5.1 - 0.6.0更新日志：<br/>1.开始增加pyqt4的支持<br/>2.修正读取配置文件字体部分的bug（pyqt3和4）<br/>3.修正写操作后读编码未改变的bug（pyqt3和4）<br/>4.去除pyqt4版本中简繁实时转换的功能（pyqt4）<br/>注：精力有限，除非pyqt3版本存在大bug，否则将不再得到更新支持，望谅解。不过考虑到pyqt4版本目前仍然没有完善，同时pyqt3还是主流，默认情况下如果同时安装了pyqt3和pyqt4，还是优先pyqt3的版本。<br/><br/>08.2.3发布lrcShow-II-0.6.1版本<br/><br/>changelog：<br/><br/>0.6.0 - 0.6.1更新日志：<br/>1.重构快捷键部分代码，增加快捷键（pyqt3）<br/>2.修正当经由歌词编辑器编辑后出现编码错误的bug（pyqt3、pyqt4）<br/>3.增加“重新载入”功能（pyqt3、pyqt4）<br/>4.修正跳转到最后一行歌词后不被标亮的bug（pyqt4）<br/>5.增加“撤销当前歌词”功能（pyqt3 、pyqt4）<br/>6.改进Amarok控制中“播放”或者“暂停”判断的方法（pyqt3、pyqt4）<br/><br/>08.03.05发布lrcShow-II-0.6.3版本<br/><br/>changelog:<br/><br/>0.6.1 - 0.6.3更新日志：<br/>1.增加当配置文件不兼容时弹出的提示框（pyqt3、4）<br/>2.修正在判断保存路径写权限的一个bug（pyqt3、4）<br/>3.保存歌词目录和歌词搜索目录互相剥离（pyqt3、4）<br/>4.支持设置多目录搜索歌词（pyqt3、4）<br/>5.修正歌词编辑器下“另存为”中编码错误的bug（pyqt4）<br/>6.在歌词策略设置对话框中增加“记住指定lrc”的策略（pyqt3、4）<br/><span style="color: #FF0000;">该版本需要删除先前的配置文件</span><br/><br/>08.03.30发布lrcShow-II-0.6.4版本<br/><br/>changelog:<br/>1.修正当使用amarok控制功能时（停止和暂停），监听信号线程出错中止的问题（pyqt4）<br/>2.修正当某一行歌词超过窗口宽度时，歌词无法居中的问题（pyqt4）<br/>3.修正歌词编辑器中插入时间标签错误的一个bug（pyqt3、pyqt4）<br/><br/><br/>08.04.06发布lrcShow-II-0.7.0版本<br/><br/>changelog:<br/>1.优化margin函数的算法（pyqt3、pyqt4）<br/>2.修正当显示行数为1行或者字体太大时，窗口行为异常的bug（pyqt4）<br/>3.重构快速设置栏（pyqt3）<br/>4.快速设置栏中增加Amarok控制功能（pyqt3）<br/>5.设定网络超时时间为15秒（pyqt3、pyqt4）<br/>6.增加对网络下载的lrc歌词的检测（pyqt3、pyqt4）<br/>7.更新、强化百度搜索引擎（pyqt3、pyqt4）<br/>8.修正从ttplayer下载的一个bug（pyqt4）<br/>9.增加对直接下载歌词情况下的超时检测（pyqt3、pyqt4）<br/>10.修正帮助文档阅读器显示文本文件上的排版bug（pyqt4）<br/>11.实现无歌词时的窗口自动隐藏或最小化（pyqt3、pyqt4）<br/>12.增加“其它设置”菜单项及其对话框（pyqt3、pyqt4）<br/>13.增加自动插入歌词至Amarok功能选项（pyqt3、pyqt4）<br/>14.增加根据tag信息完整性决定是否搜索歌词的选项（pyqt3、pyqt4）<br/>15.增加titleBar是否显示tag信息的选项（pyqt3、pyqt4）<br/>16.重构Amarok行为判定部分（pyqt3、pyqt4）<br/>17.修正当播放的音轨无标签信息时，Amarok行为判定的bug（pyqt3、pyqt4）<br/><br/>08.05.12发布lrcShow-II-0.7.1版本<br/><br/>changelog:<br/>1.重构pyqt模块的检测以及增加pyqt版本的配置项<br/>2.增加当用户点击Amarok脚本管理器的“配置”按钮后，切换pyqt版本的功能（pyqt3、pyqt4）<br/>3.修复从全屏模式切换回普通模式后，宽度过大的问题（pyqt3、pyqt4）<br/>4.修正OSD模式和普通模式切换时，窗口位置不固定的问题（pyqt4）<br/>5.重构、增强lrc编辑器（pyqt3、pyqt4）<br/>该版本需要更新配置文件<br/><br/>08.6.10发布lrcShow-II-0.7.2版本<br/><br/>Changelog:<br/>1.去除lrc编辑器对richText的支持（pyqt4）<br/>2.重构“其它设置”GUI界面（pyqt3、pyqt4）<br/>3.将冗余菜单项移至“其它设置”中（pyqt3、pyqt4）<br/>4.实现歌词过滤功能（pyqt3、pyqt4）<br/>5.修正“重新载入”菜单项当Amarok停止播放时依旧激活的bug（pyqt3、pyqt4）<br/>6.修改预设的背景色设置（pyqt3、pyqt4）<br/>7.修正将歌词文件路径作为匹配信息的错误（pyqt3、pyqt4）<br/>8.调整GUI界面布局（pyqt3、pyqt4）<br/>9.允许以音频文件名作为搜索本地歌词以及命名歌词文件方案（pyqt3、pyqt4）<br/>10.增加窗口最小宽度的设置项（pyqt3、pyqt4）<br/>11.更新帮助文档的部分内容<br/>12.新增配置文件更新机制，无须再手工删除配置文件<br/>（注：该版本增加了一个配置文件更新机制，但是要求起始版本一定要是0.7.1，因此如果老版本低于0.7.1，要么删除配置文件，要么在配置文件最后添加两行：[version]和pyqt=你所使用的pyqt版本号，或3或4，然后启动脚本会有提示，进行配置文件更新）<br/><br/>08.6.30发布lrcShow-II-0.8.0版本<br/><br/>Changelog:<br/>1.升级chardet副本至1.0.1版本<br/>2.修正英文翻译的两个错误<br/>3.修正当开启自动下载的情况下，歌词编辑器无法开启先前下载的歌词的bug（pyqt3、pyqt4）<br/>4.修正当Amarok停止时，打开歌词编辑器的一个错误（pyqt3、pyqt4）<br/>5.实现单行显示下的歌词横向滚动（pyqt3、pyqt4）<br/>6.去除实时简繁转换功能（pyqt3）<br/>7.重构添加歌词搜索路径部分GUI（pyqt3）<br/>8.增加当使用歌词编辑器发生编码错误时的警告对话框（pyqt3、pyqt4）<br/>9.歌词编辑器使用预设的保存编码进行保存，修正使用歌词文本原编码保存的错误（pyqt3、pyqt4）<br/>10.增加快捷键设置界面（pyqt3、pyqt4）<br/>11.修正Amarok停止状态下切换显示模式出错的bug（pyqt3、pyqt4）<br/>12.更新readConfig模块<br/>13.更新lrcParser模块<br/><br/><br/>08.7.10发布lrcShow-II-0.8.1版本<br/><br/>Changelog:<br/>1.修复在横版模式下“传送歌词至Amarok侧边栏”功能不正常的bug （pyqt3、pyqt4）<br/>2.重写并改进了纵向歌词定位的方法和精度 （pyqt3）<br/>3.增加对字体风格信息的记忆 （pyqt3、pyqt4）<br/>4.更新README文档<br/>5.修正一个错误的窗口隐藏行为 （pyqt4）<br/>6.改进对系统locale检测的方法 （pyqt3、pyqt4）<br/>7.当过滤规则为空时，自动禁用过滤功能 （pyqt3、yqt4）<br/>8.修正歌词编辑器中“删除lrc歌词头”功能的错误 （pyqt3、pyqt4）<br/>9.修正当Amarok处于暂停状态时，用户使用“重新载入”功能，歌词继续滚动的bug （pyqt3、pyqt4）<br/>10.修正当歌词的某行宽度超过窗口时，歌词不居中的bug （pyqt3）<br/><br/><br/>08.8.7发布lrcShow-II-0.8.2版本<br/><br/>Changelog:<br/>1.增加“关于Qt”菜单项 (pyqt3,pyqt4)<br/>2.合并某些菜单项至“帮助”子菜单 (pyqt3,pyqt4)<br/>3.修正在全屏和普通模式切换中，在无歌词的情况下程序仍然试图找到当前行歌词的问题 (pyqt4)<br/>5.将“置顶模式”从“OSD模式”中独立出来 (pyqt3,pyqt4)<br/>6.重构整个菜单的代码 (pyqt3)<br/>7.至此，pyqt3和pyqt4版本采用了相同的API，除了快速设置栏<br/>8.全屏模式下自动隐藏鼠标 (pyqt4)<br/>9.增强了对非标准的lrc歌词的兼容性能 (pyqt3,pyqt4)<br/>10.修正歌词编辑器的“清除所有标签”功能在处理非标准lrc时出现的错误 (pyqt3, pyqt4)<br/>11.修正当写入offset至文件，而原文件中存在offset标签，但无具体数值所产生的错误 (pyqt3, pyqt4)<br/>12.增加将lrc文件保存在歌曲文件所在目录的功能 (pyqt3,pyqt4)<br/>13.增加额外搜索音乐文件所在目录的功能 (pyqt3,pyqt4)<br/>14.修正当用户修改tag信息，并且使用“从网络搜索”功能后，有可能采用老的tag信息来命名lrc文件的错误 (pyqt3,pyqt4)<br/>15.修正在横版模式下，显示模式菜单中的“普通模式”菜单项仍然有效的bug (pyqt3,pyqt4)<br/>16.修正当用户已经取消歌词，但在切换横版和纵版时仍然重新载入歌词的bug (pyqt3,pyqt4)<br/>17.至此，歌词编辑器仅自动载入当前所正在使用的本地歌词文件 (pyqt3,pyqt4)<br/><br/><br/>08.9.4发布0.9.0版本<br/><br/>changelog：<br/>1.一位网名为OutLikeAShoe的意大利朋友加入该项目<br/>2.修正一些翻译上的错误<br/>3.网络搜索引擎的模块化设计 (pyt3,pyqt4)<br/>4.增加迷你歌词搜索引擎 (pyqt3,pyqt4)<br/>5.增加lrcDB歌词搜索引擎 (pyqt3,pyqt4)<br/>6.修正当用户手动拖动歌曲进度后，歌词无法跟随的bug (pyqt3,pyqt4)<br/>7.增加evillyrics歌词搜索引擎 (pyqt3,pyqt4)<br/>8.程序自动搜索engine目录下的网络搜索引擎<br/>9.增加winampcn网络搜索引擎 (pyqt3,pyqt4)<br/>10.增加google歌词搜索引擎(pyqt3,pyqt4)<br/>11.增加对apetag, id3v2-uslt, id3v2-sylt, lyrics3v2, lyrics3v1标签的内嵌歌词支持 (pyqt3,pyqt4)<br/>12.增加“优先使用内嵌歌词”选项 (pyqt3,pyqt4)<br/>13.优化网络搜索结果的排序 (pyqt3,pyqt4)<br/>14.当程序退出时，自动记忆窗口的当前位置，但由于退出的机制不同，如果用户使用Amarok脚本管理器的退出功能，则不会自动记录 (pyqt3,pyqt4)<br/>15.增加lyrdb歌词搜索引擎 (pyqt3,pyqt4)<br/>16.自动插入歌词至Amarok侧边栏后Amarok自动切换至歌词界面 (pyqt3,pyqt4)<br/>17.迷你歌词搜索引擎无法正常工作，放弃<br/><br/><br/>09.1.27发布0.9.1版本<br/><br/>changelog：<br/>1.修正“删除所有内嵌歌词”菜单项不正确激活的bug (pyqt3,pyqt4)<br/>2.改进evillyrics歌词搜索引擎, 基于googlyrics2和python的difflib模块 (pyqt3,pyqt4; from OutLikeAShoe's branch)<br/>3.修正在google搜索引擎中变量错误的bug (poyqt3,pyqt4)<br/>4.添加“记住退出时的显示模式”功能 (pyqt3,pyqt4)<br/>5.增加某老牌歌词搜索引擎 (pyqt3,pyqt4)<br/><br/><br/>09.2.23发布0.9.2版本<br/><br/>changelog：<br/>1.修正了lrcParser.py文件中，导致lrc歌词的精确度仅为1秒的大bug<br/>2.预设“仅当标签完整时搜索”功能为开启<br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=49" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=49" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=50" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=50" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=61" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=61" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/><span style="font-size: 18px;"><a href="http://www.kde-apps.org/content/show.php/lrcShow-II?content=71983" target="_blank">进入kde-apps的下载页面</a></span><br/><br/><span style="color: #FF0000;"><span style="font-size: 18px;">lrcShow-II已经正式提交到kde-apps上，可以通过上述地址下载，或者直接是用Amarok脚本管理器的百宝箱下载安装。<br/><br/>如果您使用过0.4.0以前的版本，请先删除老版本的配置文件，配置文件位置在~/.kde/share/apps/amarok/scripts-data/目录下的lrcShow-II.conf文件。<br/><br/>如果您在使用中发现bug，请在此post中提交给我，多谢支持，小三谢过！<br/><br/>喜爱lrcShow-II的朋友，希望能够在kde-app的下载页面上多点几下good，算是对小三的最大支持，谢谢。<br/><br/>现已经正式提供开发版svn下载，co下代码后，请查阅Changelog文件了解具体改进内容，svn命令如下：</span></span><br/><br/><div class="code">svn co http://www.sanfanling.cn/svn/lrcShow-II/trunk/lrcShow-II</div><br/><br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-ii" rel="tag">lrcshow-ii</a> , <a href="http://www.sanfanling.cn/tag.php?tag=python" rel="tag">python</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrc" rel="tag">lrc</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E6%25AD%258C%25E8%25AF%258D" rel="tag">歌词</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2584%259A%25E6%259C%25AC" rel="tag">脚本</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E5%258A%25A8%25E6%2580%2581" rel="tag">动态</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?258</link>
<title><![CDATA[dbus事件循环与GUI事件循环冲突的解决]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Sat, 07 Feb 2009 14:38:05 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?258</guid> 
<description>
<![CDATA[ 
	在KDE-4.2发布之后，我立刻就emerge了，使用后的感受只能用惊艳来形容，这段时间也基本上使用kde-4.2作为日常桌面。不过还是有遗憾的，因为lrcShow-II不能在amarok2上使用。所幸的是，这段时间单位里并不是很忙，下班的也早，因此有点时间来解决这个问题。<br/><br/>初步的想法是这样的，原先lrcShow-II中采用独立GUI进程，并且启动一个线程用于监听amarok发出的信号。那么当下amarok已经不再支持非qtscript的脚本了，因此这个线程只能放弃原先的接收stdin的方式，转向dbus。我对dbus并不熟悉，除了大致上“他是什么”外，基本上一无所知了，好在开发伙伴意大利的OutLikeAShoe曾经发给我一份使用dbus的测试代码，那我也就依样画葫芦，把dbus部分替代原先的stdin部分即可。采用dbus有个好处，只要是支持mpris 1.0规范的播放器，那都是可以支持的，包括audacious、xmms2等等。<br/><br/>不过事情的发展并不像原先预计的那样顺利。因为我发现在线程中运行的dbus监听信号的事件循环，居然block了主进程的GUI循环，这实在难以想象，这可是在线程中啊，这也会？很遗憾的是，这个问题整整困扰了我一个礼拜，代码上没有什么变动，在这个关口上迟迟没有突破，一直是google，或者有点眉目后发邮件请教。<br/><br/>今天原先想打破原来的代码结构，采用多进程的方式来解决了，不过就在心灰意冷的时候，突然google到了一篇关于dbus API介绍的文章，在介绍dbus.mainloop.glib的thread_init()方法中提到，如果需要在第二个线程中启动dbus事件循环，首先要调用该方法。于是乎，立刻在程序中添加如下代码：<br/><br/><div class="code">from dbus.mainloop.glib import threads_init<br/>...<br/>...<br/><br/>def mainQt4(args):<br/>&nbsp;&nbsp;threads_init()<br/>&nbsp;&nbsp;app=QApplication(args)<br/>&nbsp;&nbsp;win=mainBox()<br/>&nbsp;&nbsp;win.show()<br/>&nbsp;&nbsp;sys.exit(app.exec_())</div><br/><br/>不过运行后出现以下错误：<br/><br/><div class="code">** ERROR **: g_thread_init() must be called before dbus_threads_init()<br/>aborting...&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br/>已放弃</div><br/><br/>好在线索充分，于是立刻google “g_thread_init()“，立刻有了答案，于是代码修改为：<br/><br/><div class="code">from dbus.mainloop.glib import threads_init<br/>import gobject<br/>...<br/>...<br/><br/>def mainQt4(args):<br/>&nbsp;&nbsp;gobject.threads_init()<br/>&nbsp;&nbsp;threads_init()<br/>&nbsp;&nbsp;app=QApplication(args)<br/>&nbsp;&nbsp;win=mainBox()<br/>&nbsp;&nbsp;win.show()<br/>&nbsp;&nbsp;sys.exit(app.exec_())</div><br/><br/>运行后成功了！<br/><br/>这里没办法讲深层次原因，实在自己了解太少了，好在突破了这个瓶颈，lrcShow-II的移植工作应该不会再有太大的问题了。初步将这个程序命名为lrcShow-X，其中X代表一切带有dbus接口、符合mpris 1.0规范的所有媒体播放器。<br/><br/>已经在kdecn的论坛上做了预告并上了最新截图，这里就不上了。<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-ii" rel="tag">lrcshow-ii</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-x" rel="tag">lrcshow-x</a> , <a href="http://www.sanfanling.cn/tag.php?tag=mpris" rel="tag">mpris</a> , <a href="http://www.sanfanling.cn/tag.php?tag=dbus" rel="tag">dbus</a> , <a href="http://www.sanfanling.cn/tag.php?tag=thread" rel="tag">thread</a> , <a href="http://www.sanfanling.cn/tag.php?tag=pyqt" rel="tag">pyqt</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?108</link>
<title><![CDATA[向KDE-Apps.org提交amarok歌词脚本——Lyrics_CN]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Sat, 29 Mar 2008 15:10:15 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?108</guid> 
<description>
<![CDATA[ 
	今天对歌词脚本做了点修改，基本上就算完成了，主要体现在侧边栏的结果输出更加符合规范、去掉了用于测试的语句和标注，并正式改名为<span style="color:#FF0000">Lyrics_CN</span><br/><br/>从自己使用的情况看，基本上可以满意，但是从脚本的规范上来讲，还是有点遗憾的，最能体现这一点的，就是没有对amarok歌词侧边栏的“刷新”按钮做定义，导致该按钮无法工作。因此要重新让脚本工作，必须手动清空当前音轨的歌词。当然，这也给了我以后改进的机会。<br/><br/>在此还要感谢为amarok中文歌词脚本付出过劳动的先驱。<br/><br/>如果有任何反馈或者建议，请留言。<br/><br/><a href="http://www.kde-apps.org/content/show.php?content=50120" target="_blank">http://www.kde-apps.org/content/show.php?content=50120</a><br/><br/>另外，您也可以直接从amarok的脚本百宝箱中获取，名字是Lyrics_CN，现在最新的版本是0.5.2，还有，最近发现搜狐的搜索引擎具有一定的英文歌词搜索能力，而且还不弱，百度几乎是0。<br/><br/>更新日志：<br/><br/>06.12.17——0.2.0a<br/>1.修复一个在GB环境下，歌名和歌手的显示为乱码的bug<br/>2.增加多资源获取歌词的新特性。默认从百度获取歌词，当没找到的时候，会在sidebar显示三个从不同网站获取歌词的提示；默认找到的情况下，按一次刷新将会从百度再获取一次，第二次刷新会给出上述提示（注：新浪的不是很稳定，测试用）<br/><br/>06.12.17——0.2.0b<br/>1.修复一个在检测locale上的错误<br/>2.去掉sina作为候补搜索网站<br/>3.增加搜狐作为候补搜索网站<br/>4.去掉了由于疏忽而未注释掉的用于测试的语句<br/><br/>06.12.20——0.3.0<br/>1.增加两个用于流程控制的开关，这里既然是中文的，我想有能力多说两句。amarok的信号机制，和我的脚本的思路是完全不一样的，类似fetchLyricsByUrl等信号，我其实都是用不上的，所以在流程上比较复杂，再说我这里涉及到了多资源获取歌词的问题。<br/>2.增加lyricsdot.com的搜索引擎，主要是为了增强这个脚本的英文歌词搜索能力。不过有个事情要说明下。那个网站是这样的，通过url搜索歌词，如果这首歌在这个网站上只有一个歌词，那么会直接定位到歌词页面，从而获取；而当网站上有多个歌词的时候，他是定位到一个选择页面的，因此导致“无法找到”，所以会得出一个有趣的结论，只要网站上歌词有，越偏门的歌，成功率越高。当然我会以后修正，大不了不用这个引擎，或者干脆获取两次url，但我希望能后找个好点的引擎。<br/>3.改进流程。既然增加了控制流程的开关，不改进才怪。<br/>4.修正了些bug。bug的产生和流程有关。<br/><br/>06.12.25——（0.3.1）<br/>1.修正了一个打包上的错误。事实上应该把文件夹打包进去而不是光文件，可能会造成覆盖，如果别的amarok脚本也那么不规范的打包的话。<br/>2.终于把那个点击“建议后”，刷一下的问题，并且使他也显示正确的提示了。<br/><br/>07.02.07——（0.3.2）<br/>1.将原来的英文歌词搜索引擎lyricsDot改为amarok默认脚本所采用的<a href="http://lyrc.com.ar" target="_blank">http://lyrc.com.ar</a>。从我的比较来看，后者的歌词库更为完整，很多生僻的歌都可以轻松找到。从我的比较来看，后者的歌词库更为完整，很多生僻的歌都可以轻松找到。从我的比较来看，后者的歌词库更为完整，很多生僻的歌都可以轻松找到。<br/>2.增强了英文歌词搜索能力。这个能力的提升不是1点2点，是很大，也不仅仅是改了个搜索引擎导致的。这里做个解释。本版本之前，所有的歌词都是通过一次url请求获得的，这种方法在搜索百度、搜狐等国内歌词搜索引擎的时候并没有任何问题，他会把最匹配的放在最前面，而只要用第一个几乎就不会有问题，但是外国的歌词搜索引擎的工作原理是不一样的。一般外国的搜索引擎，如果能够精确匹配到，而且网站上仅有一个歌词，那么通过一次url请求即可获得歌词，但是绝大多数情况下都是首先出现一个选择页面，通过二次url请求精确定位到所搜索的歌词页面。所以0.3.1版本以前的英文歌词搜索能力，更多的是看运气，而现在针对国外引擎的工作原理做了修改，实现二次url请求。<br/><br/>07.03.01——（0.4.0）<br/>1.增加繁体歌词搜索引擎。由于locale的不同和搜索引擎的工作原理不同，因此当侦测到是zh_TW的locale后，默认就从繁体歌词搜索引擎下歌词了，按刷新按钮也只会出现繁体搜索引擎和英文搜索引擎，同理简体中文用户也不会发现这个繁体搜索引擎，除非改locale，好像除了我需要测试之外，也没什么必要。<br/>2.修复，同时改进了侦测locale(LC_ALL)的手段，以前用终端下命令“locale”来探测，很不可靠，这次就万无一失了。<br/>3.修复了当获取英文歌词的时候出现的编码问题。当初没有考虑到英文搜索引擎返回的编码是iso-8859-1，导致出现乱码，尤其是有 &amp;#39; 的时候。这次转成utf8了，不会再出现乱码了。<br/><br/>07.03.05——（0.4.1）<br/>0.4.0版本基础上的bug修正版，主要还是在侦测locale上的修改。同样是zh_CN.UTF-8的locale，不同的发行版侦测的结果居然不同，我这里返回(&amp;#39;zh_CN&amp;#39;,&amp;#39;utf&amp;#39;)，而更多的是返回(&amp;#39;zh_CN&amp;#39;,UTF8&amp;#39;)，导致0.4.0出现重大bug，现在已经修复。还有在现实popupmessage上的一个错误。<br/><br/>07.08.23——（0.5.0）<br/>1.除了抓取歌词的协议外，基本上重构了脚本，结构更加清晰和合理<br/>2.增加用户设置模块<br/>3.恢复了繁体歌词的支持，与上次不同的是，上次是抓取繁体歌词网站上的歌词，自从网站改版后就无法得到支持；此次采用了一个对照表的方式逐字转换，通过用户设置，可以选择默认显示是繁体还是简体<br/>4.为简体中文用户提供了一个转换繁体的工具，仅当toy<br/>5.模块化设计<br/><br/>07.09.02——（0.5.1）<br/>1.修正了一个由于手误而导致的bug，运行配置模块后居然没有把参数传回来，导致第一次配置或者更改配置后可能出现由于错误而退出<br/>2.在配置模块中，去除了配置locale这一项，改由脚本自动检测。如果locale一旦设置错误，除非删掉配置文件，不然脚本就不能运行<br/>3.增加了一些Amarok的提示<br/>4.考虑到非kde用户，对kdialog的依赖弱化。当系统中没有kdialog时，采用脚本自动检测进行配置，但以后只能手动修改文件来改变配置<br/><br/>07.10.18——（0.5.2）<br/>1.修正了一个在写配置文件时可能写入scim信息的bug<br/>2.修正了当歌词经过手动修改后，无法转成繁体的bug<br/>3.增强了简繁转换，自动从简体转到繁体或者从繁体转到简体<br/>4.修正了英文歌词无法显示'的缺陷（本来偷懒用^代替了）<br/>5.加入了国际化（界面可以是简体、繁体或者英文）<br/><br/>08.03.30——（0.5.3）<br/>1.更新了百度歌词下载规则<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2584%259A%25E6%259C%25AC" rel="tag">脚本</a> , <a href="http://www.sanfanling.cn/tag.php?tag=python" rel="tag">python</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lyrics_cn" rel="tag">lyrics cn</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?216</link>
<title><![CDATA[python下关于文件编码的自动检测]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Fri, 04 Jan 2008 14:47:31 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?216</guid> 
<description>
<![CDATA[ 
	一直以来，我写的一个app深受这个问题的困扰，看了一些代码，但是效果都不是很好，这次google中无意看到了一个模块可以解决这个问题，因此发出来大家分享。<br/><br/>该模块的名字是chardet，可以在<a href="http://chardet.feedparser.org/" target="_blank">这里</a>查看细节，具体也就不多说了。后来eix了一下才知道gentoo的portage是有这个模块的，不过考虑到尽量减少app的依赖，于是就添加了一个副本。<br/><br/>当前的编码问题真是复杂，尤其是我们简体中文用户（其他很多语系估计也好不了多少），一边是GB国标，一边是国际化的unicode，而自动检测编码又做不到100％的正确率，实在很头痛，倒还不如把BOM这个没办法的办法发扬光大。<br/><br/>在这里也就顺便提一下lrcShow-II关于编码的一些问题。由于现在实现了lrc歌词编码的自动探测，因此无论是简繁体中文用户还是其他语言用户，都无须再设置本地lrc歌词的编码了，更何况本地的歌词有可能是多种编码混合的，这样自动探测编码就更加有优势了。但是还是要设置一个写编码，默认是gb18030，因为搜索引擎中，百度和搜狗提供gb的歌词，ttplayer提供utf8歌词，写成gb18030都没有问题。国外用户基本上很难通过搜索引擎搜索到歌词，更多的是考虑到本地编码，万一能够搜索到，那么在默认情况下保存歌词就会有困难，比如在百度的搜索引擎上搜索到了歌词，而写编码如果设置成了EUC-JP，那么一般就会出错，这时候到还是gb或者utf8不会有问题。<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=%25E7%25BC%2596%25E7%25A0%2581" rel="tag">编码</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2587%25AA%25E5%258A%25A8%25E6%258E%25A2%25E6%25B5%258B" rel="tag">自动探测</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?205</link>
<title><![CDATA[［发布］lrcShow-II－0.1.0测试版]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Sat, 17 Nov 2007 14:22:29 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?205</guid> 
<description>
<![CDATA[ 
	经过这几天的努力，预计中的lrcShow-II脚本终于初步完成，进度相当快，这要归功于火箭队的3连败。<br/><br/>简介：<br/><br/>这是一个amarok的脚本，虽然是显示lrc歌词的，但是由于没有用到歌词脚本的一些信号，所以并不隶属于amarok所限定的“歌词脚本”类别里，因此安装后它会显示在“常规”里面，这样有个好处，和其他歌词脚本并不冲突。这个脚本采用了独立于amarok的GUI来构造，整个脚本依赖pyqt，这里有个问题，因为需要amarok的一些信号，因此比需要采用两个线程，从以前为EVA写的一个五子棋脚本的反馈来看（这两个脚本有类似之处），有些发行版，尤其是(k)ubuntu的pyqt大概有些问题，可能会导致运行失败（应该是在QThread类上）。该脚本可以动态的显示lrc歌词，虽然有些朋友会称其为“跳动”而非“滚动”，但是“动态”总不能否定了吧？<br/><br/>特点：<br/><br/>小巧，整个脚本才20k不到，如果将来加上简繁转换所用到的字典，就会相应变大点。还有，cpu占用率极低，更何况这是用python写的，并非c类语言，这点就比较难能可贵点，因为这是由它的运行机制决定的，它的动态显示并不是每时每刻去匹配lrc歌词的方法，而是预先设定好的，因此滚动没有采用非常复杂的算法，而是纯粹采用了qt（QTextbrowser）本身的特性。还有个重要引申，那就是正是避免了匹配法，造就了这个脚本对lrc时间标签的精确度非常高，误差只有0.01秒，而匹配的算法达到这个进度，需要耗费大量cpu。<br/><br/>其他功能：<br/><br/>1.可以搜索本地目录中的lrc歌词（预设为$HOME），并且优先于网络下载<br/>2.当本地没有找到，或者设置本地lrc目录为空时，可以自动从网络搜索并在搜索到的情况下显示（服务器用的是百度，这里和是否下载到本地无关），可以设置是否下载到本地（必须是本地lrc歌词目录非空时才可以下载到本地，即该目录），lrc文件命名采用“artist - title.lrc”的方式<br/>3.可以设置背景色、字体色和高亮色<br/>4.可以设置显示歌词的总行数，当只显示一行歌词时，脚本会不做标亮处理<br/>5.可以自由设置字体种类和字体大小<br/><br/>不足：<br/><br/>毕竟是python写的小程序，再加上有些机制的问题，必然有些不足，主要有以下几个：<br/>1.手动改变当前歌曲的进度后，歌词没有办法跟随的，这也是不采用匹配方法的代价。<br/>2.当歌曲播放中启动脚本后，可能会造成一点误差<br/>3.脚本运行中，缺少对amarok状态的监控，会有一些问题<br/>4.有些地方为了简化设计，强行的固定下来了，比如字体、字体大小、窗口大小（窗口宽度以后应该可以手动调节，现在不行），如果不这样做，要保持当前歌词出于窗口的中间，还是非常麻烦的。<br/><br/>依赖：<br/><br/>>=python-2.4<br/>pyqt3<br/><br/>其他：<br/><br/>该脚本的配置文件放置在~/.kde/share/apps/amarok/scripts-data/下，即lrcShow-II.conf，内有详细说明，该脚本必须手动修改配置文件。修改后必须重启脚本以生效。还有要说明的是，网络上的lrc歌词良莠不齐，对于匹配精确度的度量，最好拿认为可靠的本地lrc文件。<br/><br/>该脚本仅仅处于测试状态，0.1.0的版本都不算，还有很多地方需要改进，希望各位试用的朋友不吝赐教，并报告bug，小三在此先行谢过了。<br/><br/>11.19第二次更新，更新日志如下：<br/><br/> 1.修正标亮条漂移的问题<br/>2.修正预设lrc目录为$HOME<br/>3.修正下一首歌曲开始播放时，lrc歌词在窗口中没有滚到开头的bug<br/>4.禁止滚轮滚动歌词<br/>5.增加了窗口显示歌词行数的设定<br/>6.根据歌词显示行数，重新定位标亮歌词以及窗口大小，并且不固定窗口宽度<br/>7.增加当lrcShow-II启动时Amarok处于停止状态时的行为判定<br/>8.修正增加歌词头尾两端空行的一个bug<br/>9.增加字体、字体大小设置项<br/>10.修正readConfig模块和lrcParser模块的两处bug<br/>11.修正一个读取配置文件转小写的bug<br/>12.当显示歌词行数为1行时，不做标亮处理（未添加）<br/><br/><br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2584%259A%25E6%259C%25AC" rel="tag">脚本</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrcshow-ii" rel="tag">lrcshow-ii</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?204</link>
<title><![CDATA[lrcShow-II进展]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Thu, 15 Nov 2007 15:44:55 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?204</guid> 
<description>
<![CDATA[ 
	暂时定名为lrcShow-II，即区分了两个脚本，又体现了某种继承的关系。看来今天还比叫勤快，主要是火箭队输了，心情极度郁闷不想开网页，因此从昨天的酝酿到今天的动手，进展还是非常快的，先看张截图<br/><br/><a href="http://www.sanfanling.cn/attachment.php?fid=4" target="_blank"><img src="http://www.sanfanling.cn/attachment.php?fid=4" class="insertimage" alt="点击在新窗口中浏览此图片" title="点击在新窗口中浏览此图片" border="0"/></a><br/><br/>从图上可以看出，核心工作已经完成了，虽然是静态的图片，但是我发誓是滚动的............<br/><br/>汲取以前lrcshow的经验，这次采用了“你走你的，我走我的”的思路，即歌词滚动完全按照lrc歌词预先设定的时间标签来滚动，而不是去匹配歌曲的时间进度，这样有个好处，就是cpu使用量很低了，完全感觉不到，带来的弊端也很明显，就是当用户手动快进倒退，或者切换歌曲，歌词的滚动是不管的（可能以后会解决歌曲切换的问题，但是绝对不会去匹配）。<br/><br/>接下来的工作就是把以前写的下载lrc歌词模块整合进去，以及整合Amarok，还有一些附属功能，比如几种颜色的设置等。<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=python" rel="tag">python</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2584%259A%25E6%259C%25AC" rel="tag">脚本</a>
]]>
</description>
</item><item>
<link>http://www.sanfanling.cn/read.php?203</link>
<title><![CDATA[尝试做个Amarok的脚本，滚动歌词]]></title> 
<author>admin &lt;xujia19@gmail.com&gt;</author>
<category><![CDATA[Python]]></category>
<pubDate>Wed, 14 Nov 2007 15:46:33 +0000</pubDate> 
<guid>http://www.sanfanling.cn/read.php?203</guid> 
<description>
<![CDATA[ 
	以前做过一个显示lrc歌词的Amarok脚本Lrcshow，但是局限性很大，比如只能在Amarok提供的contextbrowser里面一条一条的显示等。从许多使用者反馈的结果来看，不是很满意，主要大家还是习惯滚动式的方式，但是其实要实现的话，必须要跳出Amarok提供的歌词显示模式，采用独立的GUI来实现。据我所知，在kde-apps上有一个这样的插件，名字叫Amalyp，这个插件的作者还和我有过交流，主要那时候做了一个制作lrc歌词的小东西，和他的脚本有互补的作用。但是也有个很大的缺点，那就是需要一个很偏门的依赖pykde，我估计没几个人装的，所以我也是从来没有装过，估计也不太可能适合中国国情，比如能自动下载等。<br/><br/>现在这个脚本刚刚开始酝酿，还有许多地方要攻关，毕竟qt很多领域都没有涉及到，边学边写。忘了说，毕竟是要GUI的，也不会c类语言，因此要依赖pyqt。初步打算在实现自动滚动显示之外，起码得能够自动下载没有的lrc歌词，这个难度不大。<br/><br/>目前能够实现控件内的歌词自动滚动了，但是还存在定位不准的问题，这个需要计算，还要写个lrc歌词格式的parser，难度也不大，关键就在GUI上了。<br/><br/>进度不一定，也保不齐难产，不过好在目前为止决定要写的都还是最终完成了。为免见光死，立帖明志<br/><br/>当然效果好不好，我也不知道。<br/>Tags - <a href="http://www.sanfanling.cn/tag.php?tag=amarok" rel="tag">amarok</a> , <a href="http://www.sanfanling.cn/tag.php?tag=%25E8%2584%259A%25E6%259C%25AC" rel="tag">脚本</a> , <a href="http://www.sanfanling.cn/tag.php?tag=lrc" rel="tag">lrc</a>
]]>
</description>
</item>
</channel>
</rss>