分享

豆瓣FM第三方客户端

 黑莓队长 2014-12-01
 本帖最后由 搞起 于 2014-11-7 01:16 编辑

源码托管于Git@OSC

豆瓣FM第三方客户端14年11月02日 更新
1.2.1 build 20141102 更新记录:
1) 使用gdip画动态音乐频谱
2) 增加均衡器设置
3) 播放列表及历史记录增加红心按钮
4) 修复bug,进一步减少内存占用,减少假死次数






===============================================


豆瓣FM第三方客户端14年10月07日 更新
1.2 build 20141007 更新记录:
1) 使用bass音频库播放MP3,不再需要Windows Media Player
2) 进一步减少内存占用,减少假死次数

使用bass之后,以前经常导致假死的apng动画也正常了。


===============================================


豆瓣FM第三方客户端14年8月25日 更新
1.1.0 build 20140825 更新记录:
1) 增加频道、歌手、专辑的搜索与收藏
2) 添加只听当前艺术家或当前专辑乐曲的功能
3) 添加单曲循环功能
4) 右下角弹窗可以设置关闭
5) 悬浮窗口增加播放及暂停控制
6) 可设置下载歌曲是是否同时下载歌词
源码下载地址:http:///app/source/doubanFM.20140825.7z
【已知bug】在部分win7系统的电脑上,apng动画图片会导致假死。解决办法:1)最小化并恢复;2)通过快捷键操作软件;3)增加运行参数noapng。求高手赐教解决方案!



===============================================

豆瓣FM第三方客户端14年1月12日 更新

--修复 不能设置热键为空及因为注销热键错误而无法退出的bug
--修复 下载歌曲时的bug
--完善 新的自动更新方法:复制自身到系统临时目录

20140101源码下载:
http:///app/source/doubanFM.20140112.zip

===============================================

豆瓣FM第三方客户端 14年1月1日 更新

ver 1.0.0 build 20140101

祝大家新年愉快!祝AAuto越来越好!

14年1月1日更新

功能更新:
-- 新增 根据条件自动加红心、自动屏蔽(包括自动屏蔽英文歌曲)
-- 新增 托盘图标、悬浮小窗(这个应该很需要)
-- 新增 获取歌曲列表后再随即排列
-- 修复 不能最小化 等bugs

截图:
1) 方便喜欢看专辑介绍的同学:

2) 悬浮小窗,鼠标hover时显示标题、加红心等按钮

3) 自动加红心/屏蔽设置,还可以自动屏蔽英文歌曲(右键主面板上的红心按钮也可设置)



20140101源码下载:
http:///app/source/doubanFM.20140101.7z

==========================================================

11月23日更新

源码更新:
-- 修复windows xp下无法运行报错的bug
-- 使用用户库 结构化代码 (感谢“编程”,“一鹤”哥)
-- 将try catch替换为条件判断,移除绝大所述try(感谢“编程”)
-- 减少全局变量,尽量使用局部变量
-- 丢弃.ini 改用SQLite保存用户设置,原.ini中的内容会自动导入数据库中,并删除.ini
-- 修复一些bug
功能更新:
-- 增加“我的收听历史” - HTMLayout Grid控件
-- 获取歌曲后,重新乱序排列,防止每次收听红心兆赫时都是从那几首歌开始。
-- 运行速度上或许会有一点点提升

截图:


20131123源码下载:
http:///app/source/doubanFM.20131123.7z
doubanFM.11-23.7z (845.11 KB, 下载次数: 491)


11月14日更新GDI+画桌面歌词,可以自定义文字字体、大小、颜色




关于页中增加“coded by aauto! ",向一鹤及AAuto表示感谢!

喜欢本程序的亲请期待下一版,下一版做好后即更新本帖源码包。
下一版计划:记录歌曲播放历史。

====================================

10月10日更新 - Aero磨砂玻璃特效!
需要windows vista以上系统,并且显卡支持Aero特效、打开Aero磨砂玻璃透明主题
具体效果如下图所示:


存在的问题:当窗口后面是黑色时,由于窗体内的字体也是黑色,将会导致文字阅读困难。尝试使用css的outline属性,但由于效率太低,非常卡顿,所以放弃使用。折中的办法,当鼠标hover时,临时改变背景为白色半透明图片。望前辈们指教更好的解决办法。

另:本程序已实现自动更新并覆盖原exe。在aau里发布为exe后即可下载新版本并覆盖原exe。

下面这段代码实现了简陋的aero透明磨砂玻璃效果,问题依然是无法正确地显示控件(当然用HTMLayout就不存在这个问题)
参考:http://msdn.microsoft.com/en-us/ ... 8%28v=vs.85%29.aspx

  源代码 [ AAuto ]

import win.ui;
/*DSG{{*/
var winform = ..win.form( bgcolor=0;bottom=290;parent=...;right=471;text="AAuto Form" )
winform.add( 
edit={ right=284;bottom=174;text="edit";left=143;top=149;z=2;edge=1;cls="edit" };
static={ bottom=67;color=255;right=204;left=77;top=44;z=1;text="非GDI文字";transparent=1;cls="static" }
)
/*}}*/

// 窗体背景必须设为全黑 bgcolor=0

var enableDWM = true;
try {
        var dwmapi = raw.loadDll("Dwmapi.dll");
        DwmEnableBlurBehindWindow = dwmapi.api("DwmEnableBlurBehindWindow", "INT(int hWnd,struct pMarInset)");
}
catch(e) {
        enableDWM = false;
}
if(enableDWM) {
        DWM_BLURBEHIND = class {
                INT dwFlags;
                bool fEnable;
                int hRgnBlur;
                bool fTransitionOnMaximized;
        }
        
        CreateRectRgn = ::Gdi32.api("CreateRectRgn","int(int X1,int Y1,int X2,int Y2)");
        bb = DWM_BLURBEHIND();
        bb.dwFlags = 0x3; // 0x1全部模糊,0x3指定区域模糊,其他区域透明
        bb.fEnable = true;
        bb.hRgnBlur = CreateRectRgn(40,20,400,200); // 指定客户区内需要模糊的区域,其他区域透明显示
                //bb.hRgnBlur = null; // null表示窗体客户区全部模糊
        
        DwmEnableBlurBehindWindow(winform.hwnd,bb);
}
        
winform.show();

/* 
 * gdi画文字
 */
 import gdip;
        //图形对象graphics(可以看作是画板)
         var Graphics = gdip.graphics(winform) 
         
         //加上抗锯齿功能
         Graphics.smoothingMode = 4/*_GdipSmoothingModeAntiAlias*/ ; 
        
        //创建画笔,画笔pen只能画一个轮廓(画线)
        var re,Pen = gdip.CreatePen1( 0x66ffffff, 1,2/*_GdipUnitPixel*/ );
        
        //创建刷子,画刷可以对一个东西进行填充(刷子)。
        var re,Brush = gdip.CreateSolidFill(0xFF000000);
          
         
        //创建FontFamily
        family = gdip.family( "Verdana"  ); 
        
        //创建stringFormat 
        strformat = gdip.stringformat ( ); 
        //设置样式
        strformat.align = 0/*_GdipStringAlignmentNear*/;  
         
        //设置文字区域
        rclayout = ::RECT(50,60,400,80); 
        
        //创建一个文字路径
        path = gdip.path( 0/*_GdipFillModeAlternate*/ ); 

        //添加文字到上面创建的路径中
        path.addstringI( "GDI文字", family, 1/*_GdipFontStyleBold*/, 15, rclayout, strformat);
        
         /* ***********************************************
         * GDI+中一般以I结尾的函数,参数使用int类型,而非I结尾的函数,参数使用float类型 
         * 这里的rclayout就是普通的int类型参数组成的RECT结构体
         * ***********************************************
        */
        
         //fillPath填充路径 
        Graphics.fillPath( Brush, path)
         
        //drawPath描边
        Graphics.drawPath( Pen, path)
         
 
        //删除所有GDI+对象  
        gdip.DeleteBrush(Brush);
        gdip.DeletePen(Pen);
         
        strformat.delete();
        family.delete();
        path.delete(); 
 
win.loopMessage();
如果需要实现无缝的aero磨砂玻璃效果,需要将窗体的非客户区扩大到客户区,使用DwmExtendFrameIntoClientArea
请参考http://bbs./forum.php?mod=viewthread&tid=6748

===============================================--

用HTMLayout所作,如下图所示
1) 主面板


2) 仿安卓手机应用上的侧滑菜单


3) 列表


其中桌面歌词效果,用了多多洛的原帖链接
解析lrc,用了constmyself的原帖链接
表示感谢!
另外感谢各位前辈指出我上一版本出现的各种问题!


    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多