找回密码
 立即注册
搜索
热搜: 活动 交友
查看: 117|回复: 2

【项目分享】PygameMp3Player | 2020 RT创新App大赛获奖作品

[复制链接]

3

主题

2

回帖

34

积分

版主

积分
34
发表于 3-22-2025 20:46:08 | 显示全部楼层 |阅读模式
本帖最后由 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 的类型系统。欢迎大家指出项目中的不足和可优化之处!









本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×

1

主题

5

回帖

27

积分

注册会员

积分
27
发表于 3-23-2025 15:41:13 | 显示全部楼层
这是我们第一届App大赛的作品!真的是做的完整,电脑上跑起来真的像个商用mp3播放器的样子!
不知道有没有办法,方便我们也能运行起来看看效果呀


3

主题

2

回帖

34

积分

版主

积分
34
 楼主| 发表于 3-25-2025 20:11:51 | 显示全部楼层
tiger 发表于 3-23-2025 15:41
这是我们第一届App大赛的作品!真的是做的完整,电脑上跑起来真的像个商用mp3播放器的样子!
不知道有没有 ...

哈哈谢谢夸奖。这是个好问题,我后续看看能不能给论坛部署一个 web pygame
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|RealDevClub ( 沪ICP备2024093864号-1 )

GMT+8, 4-5-2025 00:37 , Processed in 0.061096 second(s), 23 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表