本帖最后由 littleblackLB 于 4-2-2025 13:40 编辑
很高兴在 RT 论坛发布我的获奖项目——PygameMp3Player 音乐播放器,希望它能为参加 2025 RT 杯 App 大赛 的选手们提供有价值的参考!
想法来源: 一度缺乏想象力的我,不管如何绞尽脑汁,要不然就是想法太烂,要不然缺乏趣味。于是苦闷的我只好放弃做游戏的这一想法,打开了网易云,默默的戴上耳机,从心灵中感受灵感的魂发。 灵感来自于现实,这时正在听网易云的我,突然灵机一动,看了眼网易云,正好一直热爱听歌的我,播放器不就是一个实用的软件嘛。于是就这样我便由衷的搞出了个远大的想法——音乐播放器。
题外话 这个项目也总计写了我差不多64个小时(代码55小时, 文档6小时,画图 3小时左右)拖拖拉拉,一个一个功能写也正好半个暑假(一个月)左右,算是我写过最长的时间吧。 虽然花费了这么多时间去写,但是不管是哪个项目,写完的那一刻回头一看说实话收获了很多。数次的调试、琢磨,从0KB到39KB,一天花尽个3-6小时绞尽脑汁一行行的刻印上去,感觉就像在建造一个生命体,构造他的灵魂,给我带来无穷的经验…… 程序我是懒得(没那么多时间)维护了,这1000行的代码有很多可以优化的地方(当然bug是没有的 最多有一处),还有很多可以增加的地方,如果以后有空我会继续完善这个生命体的。 感谢家长与老师的支持,我会继续努力的,也感谢日日夜夜陪伴我的网易(抑)云233,希望这个项目能有一个出色的成绩(虽然我猜测比我强大的项目已不在少数)
功能特点- 基础播放功能:播放、暂停、上一首、下一首
- 播放模式切换:顺序播放、循环播放、随机播放
- 歌词显示:支持原歌词和翻译歌词
- 进度控制:拖动进度条可跳转到指定位置
- 音量调节:可视化音量控制条
- 歌词定位:点击歌词可跳转到对应时间点
- MP3 元数据读取:自动读取歌曲名、歌手、封面等信息
程序架构(MVC 设计模式)Model(模型层)- 数据对象:Music,Lyric,LyricContainer
- 管理类:PlayManager,MusicTimeManager
View(视图层)- 界面类:MusicListUI,PlayUI
- 显示组件:PlayInfoDisplay,LyricDisplay,LyricDisplayObj,LyricDisplayObjContainer
- 控件类:Button,ScrollBar,PlayBar,VolumeBar,MusicList,SpecialMusicList
Controller(控制器层)- 核心框架类:PygameMp3Player(主控制器)
基本工作原理 ( Controller 控制器层 )
关键实现- 播放控制:使用时间戳实现精准播放时间控制
- 歌词同步:根据歌词时间标签进行精准同步
- 上一首功能:采用栈结构记录播放历史
- 资源管理:动态加载音乐文件和歌词文件
亮点与难点- 文本输入:实现文本框输入,并支持中文输入
- 在线歌词获取:调用网易云 API 获取歌词,并处理 API 请求、响应和错误
- 歌词翻页与高亮显示
- 歌词跳转:支持点击歌词跳转到对应播放位置
怎么使用?
由于附件大小限制(我放了一首示例歌曲,所以大小有点大),因此我将文件发到我服务器上供大家下载(后续会直接提供论坛下载链接)。
http://39.99.237.243:3326/RT/PygameMp3Player.zip
如果 python3 不行则是 python
Windows:
1 用命令行进入项目的 Project 目录
2 python3 -m venv venv
3 .\venv\Scripts\activate
4 pip install requests pygame eyed3 Pinyin2Hanzi
5 python3 PygameMp3Player.py
Linux:
1 用命令行进入项目的 Project 目录
2 python3 -m venv venv
3 source venv/bin/activate
4 pip install requests pygame eyed3 Pinyin2Hanzi -i https://pypi.tuna.tsinghua.edu.cn/simple
5 python3 PygameMp3Player.py
感悟与期望
正如刘老师所说,这个作品的最大特点是细节 。
在一场技术竞赛中,基础功能是门槛,而细节决定胜负。尤金·斯皮诺萨(Eugene Spafford)所言:“优秀的软件就像一座精心设计的建筑,而不是随意搭建的棚屋。”
因此我想告诫参加 2025 RT 杯 App 大赛 的选手们: 写代码不仅仅是让它能运行,而是让它运行得更好、更流畅、更优雅。——Linus Torvalds
代码改进与讨论
由于当时缺乏现代 Python 项目开发经验,该项目在代码风格和架构上仍有改进空间。例如,我完全忽略了 PEP 484 类型注解规范。如果你对 Python 开发规范感兴趣,我推荐阅读 Patrick Viafore 的 Robust Python,该书大篇幅的讲述了 Python 的类型系统。欢迎大家指出项目中的不足和可优化之处!
|