feeluown 阶段性总结

feeluown 阶段性总结

主要介绍:feeluown 的整个结构,以及一些(GUI)开发的感悟

项目定位

Linux 上支持虾米,网易云,QQ三大平台的音乐播放器

背景

  • 当时 Linux 的播放器基本不支持在线音乐播放。大部分音乐播放器只支持:last.fm 等音乐平台。
  • 存在一些第三方音乐播放器:类似 deepin music player,支持百度音乐, kuwo 酷我音乐, 虾米电台,功能简陋把
  • 当时网易云音乐正在占据大部分市场
  • 个人用着 Linux,闲着无聊,觉得爬爬网站貌似还挺有趣(这个是主要原因,目测)

项目迭代的一些过程

  • 第一版
  • 第二版 第二版
  • 中间一个成熟的版本
  • 发版截图 发布的一些截图
  • 现在…

GUI 软件开发概述

流行的 GUI 库:Linux 上主要是 GTK,Qt。Windows 上 MFC,Mac OSX cocoa。 跨平台:gtk, wxWidgets, Qt。 GPU 加速的 gui 库:Gac (vczh 貌似在知乎上也很有名的)

Qt 接口比较好用,wxWidgets 比较丑,GTK 官方后来才正式支持多平台 许多嵌入式系统界面也会采用 qt 。

Qt 出了个 QML 也能开发安卓软件。不过 QML 对 PC 平台支持不是特别完善。 (Qt 本省不仅仅提供了 GUI 相关的功能,还有一些网络请求,OpenGL 的封装等)

最新的一些做 GUI 的工具:Electron, nw.js。 据说前者优于后者,且有成熟应用。

pyqt5 最简单的 demo

  • http://zetcode.com/gui/pyqt5/firstprograms/
  • python3 /tmp/gui.py
    1. 定义一个布局(有网格布局,水平Box布局等)
    2. 往布局里面塞一堆控件(和 HTML 很像,button,label等)
    3. 控件上绑定各种事件(比如点击事件,鼠标 hover 事件)
关于 GUI,可能会有这些些问题:
  1. 进度条怎么做的?
  2. 透明、阴影等特效怎么做?
  3. 顶部 panel 的图标怎么弄?
  4. 怎样显示系统通知?
  5. 怎样置顶?
  6. 音乐播放器怎样控制?
关于音乐播放器,有这些一些概念:
  1. MPRIS Media Player Remote Interfacing Specification
  2. MPD Music Player Daemon
关于 Linux, 有个 D-BUS 的东西和开发联系比较紧密

感觉和安卓,IOS开发应该也很类似

很久很久以前写安卓 2.3 的时候:它也是一个 layout.xml 文件加上各种事件响应 activity

和游戏 UI 开发也很类似

GUI 开发的不同的点(相对于 Web 开发)

Signal 机制
GUI 中,UI 逻辑会占据大部分代码。
GUI 界面渲染的过程

一个 widget,它会定时刷新自己的页面(每次都会调用一个叫做 paintEvent 的函数)。 所以可以通过重写这个函数来自定义界面长相,也可以通过类似 css 的东西来定义界面样式

GUI 软件发布之后不能在服务端更新它。需要玩家主动升级
测试相对较难

之前本来有集成测试的(目前没测试…)

项目开发过程中主要解决的几个技术问题

  1. UI 美化 -> 重写绘图函数
  2. 网络操作 -> quamash(asyncio+qt event-loop)
  3. 插件机制 -> 规范接口
  4. 主题更换机制 -> 统一接口
  5. 音乐资源获取 -> 抓包
  6. 远程控制 -> 目前有个非常简单的 udp server,感觉需要 RPC ?
  7. 歌曲缓存(想做到像视频缓存那样) -> 但是目前没解决…(播放器核心不是自己写的,也没看它提供什么接口)

neovim 插件开发

vim 插件开发的实质:就是把我们平常按键的顺序写到代码中,进行一些错误判断,然后绑定各种 key。

2018-2-17 更新

回头看看,上面这个文章写的好像没啥重点。现在再来写总结文章的话, 或许会重点写这几个方面(从易到难)。

  1. GUI 库的选择?Qt vs Gtk vs …
  2. 网易云音乐 API?爬虫基础
  3. MVC 结构?高年级的学生基本都了解这个概念了。
  4. GUI 程序‘主体’是一个事件循环;signal/slot 机制有利于代码解耦。
  5. GUI 绘图原理?我也不是很清楚,写起来应该是有点意思的。
  6. asyncio 是个啥,有啥用?loop.call_soon 等函数挺实用的。
  7. linux D-Bus 是个啥?我也不懂

总的来说,这个项目用到的东西都很基础。 但每个技术点要深入研究的话,都可以大做文章把。

Updated:

Comments