FeelUOwn音乐播放器的一点点研究
L4 FeelUOwn音乐播放器
这是python结课作业的第四题(Level 4),选择一个python项目,迁移到自己的机器上(哎就是安装),各路大神都在搞深度学习、人工智能之类,我学习进度没他们快、还没自学到这些,所以选择很受限。很感激遇到这个项目,挺有意思的,让我学到不少。也对着源码发呆没少耗费时光。这是这学期自己探索的最有意思的事了,所以记录一下。
前言:为什么选择这个项目
为什么没有选择实验文档给出的kannan-anbu/python-music-player呢?
一开始选题的时候,我真的不知道该做什么(人工智能、深度学习、数据分析什么都不会),头很大,还没决定要不要做这个播放器的题目,所以只是在github上草率地搜了搜,竟然没找到这个项目,如下图。我还尝试了在github上搜索作者,调整搜索过滤器等方法,都无果。
随机逛了逛,发现了FeelUOwn这个项目,还是国人写的,3k多星,有自己的项目网站,还配备了开发者指南(当时还不知道不太这个指南不太详细),并公开了开发者交流群,看作者的个人网站(cosven),觉得他是很有哲思的一个人。总而言之,在我为了不知道选什么题目而抓狂之中,这个项目就像一颗启明星。同时,作者是中国人也让我很激动,怎么说呢,看Vue的纪录片时,作者尤雨溪,一个黄皮肤的中国人,做出了风靡全球的开源项目,无论对于web应用从业人员,还是我这种普通学生,这都是一种鼓舞,有一种让人血液里的脉搏更加跳动的力量,而看到FeelUOwn这个国人做的项目,想到我也要和它多少产生点关系,我就不由得激动。
这就是起因。
而直到我准备完了level5的代码,写报告这会儿,才想起来用搜索引擎搜一下那个没搜到的音乐播放器项目,就搜到了…
现在想来,当时搜不到,大概率是项目及作者名字中的-
触发了github搜索的语法,搜索引擎以另外一种方式解析我的搜索内容,才导致搜索不成功。
对这个软件的介绍
这个软件集成了多个音乐平台的的乐库,使用mpv作为默认播放引擎,qt做为gui框架,提供不仅可用而且美观的搜索、播放、歌词等功能,除此之外,还有类似vimrc
的配置文件、无GUI启动、与emacs集成等极客的使用内容,有趣也值得探索。
如何安装并使用
安装
这是官方安装指南。
我使用的操作系统是archlinux,所以直接使用命令sudo pacman -S feeluown
即可。
而对于其他的linux发行版,安装指南中的pip安装方法应该是比较通用的,我也尝试了,没有问题。
使用
feeluwon既提供gui启动,也支持命令行使用。
安装好后,可以通过命令行启动,也可以通过桌面图标(调用feeluown-genicon
生成桌面图标)启动。
阅读源码(link)可以发现,feeluown为自己注册了两个命令行启动别名:fuo
和feeluown
,所以下面我将以方便为主,任意使用两个别名。
gui启动
先尝试启用gui界面:(更新失败是因为垃圾校园网)
在这个gui界面的上侧可以切换出搜索栏:
尝试搜索王心凌的爱你, 如下,没有结果:
这是因为我们还没有安装音乐提供方的插件,作者开发了若干比较流行的音乐提供方插件:网易云、QQ、虾米等(甚至还有集成在vim和emacs中的插件),我在level5中只会涉及网易云插件,所以我们就先安装网易云插件:pip install fuo-netease
安装完成后,重启fuo。
可以看到,现在:
左上角出现了网易云的图标
歌曲搜索也有了结果,歌曲最右侧表明音乐来源都是网易云
其他基本的播放,歌词,搜索专辑、歌手等功能,feeluown都有提供,助教不妨多玩一玩。
命令行(daemon)
参考
我们可以在一个端口以纯daemon模式打开feeluown服务,另一个端口使用netcat与其交互,现在的feeluown使用端口23333,以后可能会实现用户指定端口的功能。
下面是fuo的帮助文本,主要的功能是
play,show,search,remove,add,exec,pause,resume,toggle,stop,next,previous,list,clear,status,genicon
usage: feeluown [-h] [-V] [-ns] [-nw] [-d] [-v] [--log-to-file][--mpv-audio-device MPV_AUDIO_DEVICE]{play,show,search,remove,add,exec,pause,resume,toggle,stop,next,previous,list,clear,status,genicon}...FeelUOwn - modern music player (daemon).Example:- fuo # start fuo server- fuo status # lookup server status- fuo play 晴天-周杰伦 # search and playpositional arguments:{play,show,search,remove,add,exec,pause,resume,toggle,stop,next,previous,list,clear,status,genicon}show 显示资源详细信息remove 从播放列表移除歌曲add 添加歌曲到播放列表pause 暂停播放resume 回复播放toggleoptions:-h, --help show this help message and exit-V, --version show program's version number and exit-ns, --no-server 不运行 server-nw, --no-window 不显示 GUI-d, --debug 开启调试模式-v, --verbose 输出详细的日志--log-to-file 将日志打到文件中--mpv-audio-device MPV_AUDIO_DEVICE(高级选项)指定播放设备
现在我们尝试通过命令行交互,让feeluown播放张杰唱的夜空中最亮的星。
先看一看当前的播放列表:
list
ACK OK 103
fuo://netease/songs/1474411443 # 爱你 - 王心凌
然后搜索夜空中最亮的星这首歌:
search 夜空中最亮的星-张杰
ACK OK 620
fuo://netease/songs/28427772 # 夜空中最亮的星 (L… - 张杰
fuo://netease/songs/28059417 # 他不懂 - 张杰
fuo://netease/songs/25706282 # 夜空中最亮的星 - 逃跑计划
fuo://netease/songs/574919767 # 只要平凡 - 张杰 & 张碧晨
fuo://netease/songs/191254 # 天下 - 张杰
fuo://netease/songs/1386887580 # 夜空中最亮的星 ( … - 小朱吃了几公斤
fuo://netease/songs/450222627 # 夜空中最亮的星 (l… - 张杰
fuo://netease/songs/570296467 # 粉红色的回忆 + Be… - 张杰 & 六位素人
fuo://netease/songs/1335012479 # 夜空中最亮的星( … - 九艾伦
feeluown的音乐标识符都遵从fuo协议(应该是作者自定义的),也就是这一串:fuo://netease/songs/1405753158
,这个代表网易云提供的歌曲,编号为28427772
,也就是我们要找的这首歌。我们现在把它添加到播放列表并播放:
add fuo://netease/songs/28427772
ACK OK 0list
ACK OK 88
fuo://netease/songs/1474411443 # 爱你 - 王心凌
fuo://netease/songs/28427772 # -
next
ACK OK 0status
ACK OK 204repeat: truerandom: falsevolume: 23state: playingduration: 372.532245position: 4.320552399092971song: fuo://netease/songs/28427772 # -lyric-s: 作曲 : 逃跑计划
这里看到程序的一个小bug,添加之后没有歌曲信息。因为现在播放的还是爱你 这首歌,所以我们使用next
命令播放下一首的夜空中最亮的星。随着音乐响起,我们可以用status
查看,播放的是fuo://netease/songs/28427772
,无误。
在server的终端Ctrl-C
关闭服务端。关闭不当会导致端口23333仍被占用,不能重新打开feeluown,linux下需要使用kill -s KILL {fuo/feeluown}
杀掉后台进程。
配置文件
在用户目录下的.fuorc
就是配置文件,这是一个py文件。feeluown会暴露config对象和若干函数到这个文件中,并在启动时以python的exec
方法执行它。
一些可配置项可以在这里找到。
对于自定义函数这项,add_hook
的源码是这样的:
@expose_to_rcfile(aliases='when')
def add_hook(signal_symbol: str, func: Callable, use_symbol: bool = False, **kwargs):"""add hook on signal:param signal_symbol: app.{object}.{signal_name} .:param func: Signal receiver.:param use_symbol: Whether to connect the signal to the symbol of the receiver.If this is true, the real receiver is lazy found by the symbol, andthe signal connects to a symbol instead of a function object.If this is false, problem may occur when the rcfile is reloaded.because there the signal connects to two *same* receivers.:param kwargs: This is directly passed to Signal.connect.>>> def func(): pass>>> add_hook('app.initialized', func).. versionadded:: 3.8The *kwargs* keyword argument."""signal_mgr.add(signal_symbol, func, use_symbol, **kwargs)
暴露到配置文件是由一个装饰器实现的,有个alias:when
,比较重要的是signal_symbol
这个参数的格式:app.{object}.{signal_name}
。
以作者提供的一个示例为例:
when('app.playlist.song_changed', notify_song_changed)
notify_song_changed
就是自定义的函数,我们来看这个'app.playlist.song_changed'
,这个代表的是当播放列表歌曲发生切换时的signal。这种信号可以在源码中找到,我的意思是,作者没有提供所有信号的列表。以这个信号为例,在这里找到,类似的,也可以找到playerlist的若干其他信号(考虑到继承后的实现,这个列表不一定全):
Signal | Meaning |
---|---|
eof_reached | playlist have no enough songs |
mode_changed | playlist mode changed signal |
playback_mode_changed | playback mode changed signal |
songs_added | add a song |
songs_removed | reomove a song |
song_changed | change a song |
song_changed_v2 | don’t know what it’s |
自定义函数先讨论到这里,再看config对象,这个可定义项我拷贝了下来,是这样的:
名称 | 类型 | 默认值 | 描述 |
---|---|---|---|
DEBUG |
bool
|
False
|
是否为调试模式 |
MODE |
str
|
0x0000
|
CLI or GUI 模式 |
THEME |
str
|
auto
|
auto/light/dark |
COLLECTIONS_DIR |
str
|
''
|
本地收藏所在目录 |
LOG_TO_FILE |
bool
|
True
|
将日志输出到文件中 |
AUDIO_SELECT_POLICY |
str
|
hq<>
|
feeluown.media.Quality.SortPolicy
|
VIDEO_SELECT_POLICY |
str
|
hd<>
|
feeluown.media.Quality.SortPolicy
|
我想配置的只有主题,其实主题还有一个选项:`macos_dark’,可以在这里找到。
为什选用这个主题呢?因为dark
主题只有底端是黑色的,主面板还是白的
FeelUOwn音乐播放器的一点点研究相关推荐
- android音乐播放器进度条误差研究
2019独角兽企业重金招聘Python工程师标准>>> 如何做一个"流畅"而且"准确"的进度条? 流畅!由两个条件决定,更新的频率 和 更新的 ...
- (附源码)springboot音乐播放器小程序 毕业设计 170900
Springboot音乐播放器小程序 摘 要 本文设计了一种音乐播放器小程序,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐搜索.新歌榜单.注册登录.论坛发表等,用户不仅能够 ...
- (附源码)小程序 音乐播放器小程序 毕业设计 170900
Springboot音乐播放器小程序 摘 要 本文设计了一种音乐播放器小程序,系统为人们提供了方便快捷.即用即搜的音乐搜索播放服务,包括音乐资讯.音乐搜索.新歌榜单.注册登录.论坛发表等,用户不仅能够 ...
- 用React做一个音乐播放器
介绍 任何正在学习 React 并想使用 React 构建项目的人.有各种博客和文章可以为开发人员指导此类项目.我确实浏览过这些文章,但其中总是缺少一种项目.缺少的项目是音乐播放器和视频播放器.这两个 ...
- android音乐播放器的历史,基于Android音乐播放器的研究
Android平台是目前智能移动终端的主流系统.随着人们生活.工作节奏的加快,乘车.运动.学习等碎片时间的增多,音乐播放器成为人们所关心的必备应用之一,广受大家欢迎. 目前,Android市场上以酷狗 ...
- 简单android音乐播放器课程设计,android音乐播放器课程设计报告.doc
android音乐播放器课程设计报告 android音乐播放器课程设计报告 基于Android音乐播放器的设计与实现 滨江学院 <移动通信程序设计> 课程设计 题 目 院 系 专 业学生姓 ...
- 【开源推荐】进阶实战,从一款音乐播放器开始
0.前言 前面有同学问我,想要做一个Android 实战项目,问我有没有好的开源项目可以参考和练习? 想想自己以前也是,当项目没有什么新任务的时候,想着自己写一个实战项目来来练练手,那拿什么项目来练手 ...
- Swift版音乐播放器(简化版),swift音乐播放器
这几天闲着也是闲着,学习一下Swift的,于是到开源社区Download了个OC版的音乐播放器,练练手,在这里发扬开源精神, 希望对大家有帮助! 这个DEMO里,使用到了 AudioPlayer(对音 ...
- 自编Win8风格Android音乐播放器应用源码(单机版)
用闲暇的两天时间,研究编写了一个类Win8风格的android音乐播放器,实现了大部分基本功能.下面看具体描述: 基本实现功能: 注意事项:Android系统版本须在2.2以上,保证手机安装有SD卡( ...
最新文章
- C语言 fread()与fwrite()函数说明与示例
- linux下C++ 插件(plugin)实现技术
- 三款云数据库性能测试,谁表现最好?
- CityEngine快捷键一览表
- [结构力学] 铰结三角形规律中虚铰也记为单铰
- python3 抓包 解包_Python结构包,解包
- Spring源码之bean的加载(一)
- JavaScript中的数据结构及实战系列(1):队列
- 札记:android手势识别,MotionEvent
- 盲盒商城app开发需要具备哪些核心功能,盲盒商城app源码成品分享
- 全国大学生计算机ms系统,全国计算机等级考试一级计算机基础及MS Office应用模拟练习系统...
- tbase 之一 github setup
- KB、kb和MB、mb有什么区别
- 3D人脸重建(二) 数据
- 1M宽带50M宽带100M宽带最大下载速度
- python macd底背离_MACD的“底背离”狠不狠?回测告诉你结果
- 【2020】win10java(jdk安装)环境变量配置和相关问题解决
- 【Ajax+】爬去今日头条图片
- Flink状态一致性检查点
- 办公软件——隐私条款