V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
cosven
V2EX  ›  Python

用 Python 3 + PyQt5 撸了一个可以播放“任意”音乐的播放器

  •  
  •   cosven ·
    cosven · 2019-06-30 21:42:56 +08:00 · 7204 次点击
    这是一个创建于 1976 天前的主题,其中的信息可能已经有所发展或是发生改变。

    screenshot on GitHub

    特性

    • 可以在 Linux,macOS,Windows 上使用
    • 安装简单,新手友好,默认提供国内各音乐平台插件(网易云、虾米、QQ )
    • 较强的可扩展性可以满足大家折腾的欲望 | MPRIS2 插件 | 和 Emacs 集成、纯命令行使用 视频 DEMO
    • 核心模块有较好文档和测试覆盖,欢迎大家参与开发 | 详细文档 | 开发者 /用户交流群

    安装使用

    安装过程十分简单,这里以 Ubuntu 为例。其他系统安装使用方法请参考 Quick Start

    # Ubuntu 用户可以依次执行以下命令进行安装
    sudo apt-get install python3-pyqt5  # 安装 Python PyQt5 依赖包
    sudo apt-get install libmpv1        # 安装 libmpv1 系统依赖
    
    pip3 install 'feeluown>=3.0' --user -i https://pypi.org/simple/
    
    feeluown-genicon   # 生成图标,点击桌面图标就可以运行
    feeluown  # 不想生成图标,也可以选择直接在命令行中运行
    

    欢迎对此项目有兴趣的童鞋加入开发

    这是今天发帖的重点,嘿嘿 ~

    • 如果你了解 Python,对 Python 最佳实践感兴趣
    • 如果你对怎样开发一个音乐播放器感兴趣
    • 如果你对怎样写一门自己的玩具语言感兴趣
    • 如果你对初级网络编程感兴趣
    • ...

    欢迎加入我们这个小群体 ~ 目前,我们这里有刚毕业的高中生,有刚毕业的研究生,也有已经工作的 Python 工程师...

    在这里,你 可能 可以收获:

    • 一群友善、有趣的朋友
    • 一个好的 Python 学习交流环境
    • 在实际项目提升自己 Python 技能
    • 定制一个自己喜欢的播放器
    • ...

    如果你对项目、我们还心存疑惑,你可以阅读文档 或者加入开发者 /用户交流群来了解更多

    第 1 条附言  ·  2019-06-30 23:25:25 +08:00
    补充一下,项目地址: https://github.com/feeluown/FeelUOwn

    欢迎对项目感兴趣的朋友进行试用,当然,成为开发者更好啦 🙈(重要的事情重复一下)
    第 3 条附言  ·  2019-07-01 09:46:24 +08:00

    如果您觉得自己的需求没有得到充分的满足,可以拿起编辑器/IDE开始搞起来。参考这篇文档,可能可以更快速的上手:https://feeluown.readthedocs.io/en/latest/contributing.html

    另外,项目本身也有一些 TODO:https://github.com/feeluown/feeluown/projects/5 ~

    第 4 条附言  ·  2019-07-03 10:20:00 +08:00
    交流群的邀请链接已经失效了,有兴趣的朋友可以在项目 README 中找最新的交流群链接~
    41 条回复    2019-07-01 15:39:15 +08:00
    coolair
        1
    coolair  
       2019-06-30 21:55:05 +08:00 via Android
    这个太厉害了!
    leonme
        2
    leonme  
       2019-06-30 22:01:33 +08:00 via Android
    能播放 qq 音乐的付费歌曲吗?比如杰伦的
    wakan190
        3
    wakan190  
       2019-06-30 22:19:21 +08:00 via Android
    不错哦
    pyqt5 好学吗?
    cosven
        4
    cosven  
    OP
       2019-06-30 22:38:45 +08:00
    @leonme 杰伦的可以... 嘘,比如晴天,告白气球
    cosven
        5
    cosven  
    OP
       2019-06-30 22:39:12 +08:00
    @leonme 图片里面正好是杰伦的
    cosven
        6
    cosven  
    OP
       2019-06-30 22:40:49 +08:00
    @wakan190 ummm,怎么说呢,PyQt5 入门比 Python 入门差不多吧~ 我感觉不难,但是要深入的话,我感觉是有挑战的。
    readlnh
        7
    readlnh  
       2019-06-30 23:10:38 +08:00
    赶紧顶一顶
    cosven
        8
    cosven  
    OP
       2019-06-30 23:11:06 +08:00
    @coolair 可以试用起来~ 有问题随时联系我 ~
    0xroot
        9
    0xroot  
       2019-06-30 23:21:53 +08:00
    赞~ 开源不?来个 GitHub 链接?
    cosven
        10
    cosven  
    OP
       2019-06-30 23:25:47 +08:00
    @0xroot 补充了链接,开始忘记放了 ~
    readlnh
        11
    readlnh  
       2019-06-30 23:26:20 +08:00
    bequt
        12
    bequt  
       2019-06-30 23:33:37 +08:00 via Android
    之前都有类似这种,好像都会有法律函过来。。。
    Tink
        13
    Tink  
       2019-06-30 23:36:41 +08:00 via iPhone
    有没有云村日推
    cosven
        14
    cosven  
    OP
       2019-06-30 23:41:33 +08:00
    @Tink 暂时还不支持 =。=

    很早以前有,不过后来在一次更新中删掉了.... 如果会写 Python,加上去应该只有个把小时
    cosven
        15
    cosven  
    OP
       2019-06-30 23:48:36 +08:00
    @bequt 嗯,我之前看过几个项目,确实遇到了这个问题...

    在 FeelUOwn 这个项目里面,我们有想过怎样应对这个问题:

    一方面是从版权方面考虑,我们尽量少损害产商的利益:
    1. 我们会声明每首歌的来源地,如上截图,每首歌都有来源
    2. 优先用 web 的资源,人家收费的资源,我们 *尽量* 不使用

    另一方面是技术方面:
    1. FeelUOwn 项目本身并没有包含 QQ/虾米 /网易云 等厂商的任何资源或者敏感信息,这些东西都是以插件的形式存在于民间
    2. 如果厂商真的发送法律函等资料过来,我们可以取消使用这一个插件,到时,也不会太影响整体使用
    yanfany
        16
    yanfany  
       2019-07-01 00:01:21 +08:00
    前段时间刚好要用 python 搞个界面,学的也是 pyqt,现在看见这个界面控件风格好眼熟哈哈哈
    leishi1313
        17
    leishi1313  
       2019-07-01 00:01:24 +08:00 via Android
    这个厉害了!我也有过类似的想法,不过初衷是想在各大平台上训练一个自己的推荐算法
    cosven
        18
    cosven  
    OP
       2019-07-01 00:05:14 +08:00
    @leishi1313 我曾经想给自己定制个推荐算法,但是...不太懂推荐系统那一套..也没怎么调研过 =。=
    cosven
        19
    cosven  
    OP
       2019-07-01 00:05:39 +08:00
    @yanfany 🙈
    shxlxa
        20
    shxlxa  
       2019-07-01 09:51:56 +08:00
    厉害了
    im67
        21
    im67  
       2019-07-01 10:04:56 +08:00
    windows 党安装劝退.......就不能用 pyinstaller 打个包么?
    cosven
        22
    cosven  
    OP
       2019-07-01 10:17:28 +08:00 via iPhone
    @im67 可以,但是目前还没有足够时间做这个工作...之前有朋友试过 pyinstaller,确实可以打包成功 ~
    BingoXuan
        23
    BingoXuan  
       2019-07-01 10:17:54 +08:00
    @im67
    然后你会发现,我还是下载个网易云音乐好了( qt 依赖打包起来简直和 electron 差不多)
    cosven
        24
    cosven  
    OP
       2019-07-01 10:22:39 +08:00 via iPhone
    @BingoXuan 嗯,这也是一个问题。项目依赖了 PyQt 和 mpv,打包之后会有大约 150MB 左右~ 会比较大

    通过打包来安装的话,就意味着以后每次更新都要打包,用户每次都要重新下载整个包,更新相对来说那么不方便,所以综合考虑,暂时只能让大家安装的时候折腾一下了~
    Aether
        25
    Aether  
       2019-07-01 10:25:47 +08:00
    File "\fuocore\mpvplayer.py", line 4, in <module>
    from mpv import (
    File "\mpv.py", line 39, in <module>
    backend = CDLL('mpv-1.dll')
    File \__init__.py", line 348, in __init__
    self._handle = _dlopen(self._name, mode)
    OSError: [WinError 126] 找不到指定的模块。

    好像因为安装顺序的原因(最后一步才放了 dll ),无法运行了怎么办……
    cosven
        26
    cosven  
    OP
       2019-07-01 10:27:49 +08:00 via iPhone
    @Aether 如果确认 mpv-1.dll 放对位置了,那只需要重新运行就好了~
    Akkuman
        27
    Akkuman  
       2019-07-01 10:35:00 +08:00 via Android
    好像前几年搜索网易云音乐 linux 版搜出了这个,没想到这么些年了还在蓬勃发展
    cosven
        28
    cosven  
    OP
       2019-07-01 10:44:36 +08:00
    @Akkuman 你木有记错,哈哈哈,不过它也不是蓬勃发展啦。ummm,我想想,“垂死挣扎”可能更形象。
    larsenlouis
        29
    larsenlouis  
       2019-07-01 11:12:05 +08:00
    好评!海外自动 geoblock 解锁
    FrankHB
        30
    FrankHB  
       2019-07-01 11:12:37 +08:00
    资源来源跟 Listen1 比起来如何。
    BingoXuan
        31
    BingoXuan  
       2019-07-01 11:15:20 +08:00
    @cosven
    pyqt 虽然简单,但打包太大真的很头痛。我试过纯 qt,但效率太低也弃坑了。最终还是选择了 js+electron

    qt5.13 增加了 wasm 的支持,可以在 web 端运行 qt,不知道 pyqt 后续会不会增加支持
    cosven
        32
    cosven  
    OP
       2019-07-01 12:34:31 +08:00
    @FrankHB 看了下 listen1 的来源,它的更多一些 ~ 它多支持了两个来源:酷狗和酷我。这边目前只支持 QQ/虾米 /网易云(都是插件形式),但是我想这三个平台应该能覆盖几乎所有的歌曲了吧(毕竟酷狗和酷我都是 tencent 家的,另外,要新增来源是一件相对容易的事情,如果真的需要的话)。
    Phishion
        33
    Phishion  
       2019-07-01 13:37:43 +08:00
    这个我觉得自己玩玩还可以,做大了必然被告,厂商甘心买版权为其他人做嫁衣么?
    lomsing
        34
    lomsing  
       2019-07-01 14:12:52 +08:00
    大佬🐂🍺
    cosven
        35
    cosven  
    OP
       2019-07-01 14:46:54 +08:00
    @Phishion
    嗯嗯,是这样子的,如果你侵犯了产商的权益,他就来搞你,但是如果你尊重他,他就睁一只眼,闭一只眼。
    当然,什么事情都有例外和意外。

    针对这些例外和意外,我们在 FeelUOwn 上也想了一些办法:FeelUOwn 本身只是个播放器,不过它可以支持多个源,每个源都是一个插件。当一个源不行的时候,我们可以就放弃他。目前 FeelUOwn 支持国内三个源,以后还可以考虑 iTunes, Spotify, Google Music 等。所以除非每个源都来搞我们,不然这个播放器就不会死(另外值得一说的是:我们确实有注意 *尽量不过分* 的侵犯他们的权益,我在上面一个回答里面也解释了这个问题)。

    最差最差的情况:每个源都不能用,那时候,我们还可以听本地音乐了;可以通过搜索引擎来找资源。

    最后,值得一说的是,支持多资源只是 FeelUOwn 众多特性中的一个。
    cosven
        36
    cosven  
    OP
       2019-07-01 14:52:26 +08:00
    @lomsing 老师好 ~
    supertramp
        37
    supertramp  
       2019-07-01 15:22:31 +08:00
    ubuntu19.04,apt 装 pyqt5 报错 ModuleNotFoundError: No module named 'PyQt5.QtOpenGL',应该是版本太老,pip3 install pyqt5 --upgrade 可以解决

    RuntimeError: generator raised StopIteration 这个报错应该解决一下。。

    装 fcitx-frontend-qt5,fcitx 输入法也用不了
    lzxgh621
        38
    lzxgh621  
       2019-07-01 15:33:05 +08:00 via iPhone
    你那个群咋回事 刚加就 T
    cosven
        39
    cosven  
    OP
       2019-07-01 15:36:48 +08:00
    @supertramp

    不好意思,这里忘记写这个步骤了 `sudo apt-get install python3-pyqt5.qtopengl`,另外,在 Ubuntu 上,更推荐使用 apt 来安装 PyQt5。

    > 装 fcitx-frontend-qt5,fcitx 输入法也用不了

    ummm,这个问题,我也不是很确定。
    我觉得可以先尝试用 apt 安装试试,把 pip 安装的给卸载了。如果还是不行的话,我今天装个虚拟机也试试。
    cosven
        40
    cosven  
    OP
       2019-07-01 15:38:01 +08:00
    @lzxgh621 不好意思,你是 id 为 4a6f5a1**** 的那位童鞋么,我以为这个 ID 是个 spam... 我拉您回来 ~
    cosven
        41
    cosven  
    OP
       2019-07-01 15:39:15 +08:00
    @cosven 咦,不对,我没有权限拉您回来... =。= 不好意思,能麻烦您再加一下吗 ~
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5523 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 01:26 · PVG 09:26 · LAX 17:26 · JFK 20:26
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.