U盘歌单管理器(播放列表) -V5.2.3 【2025-04-10】

[复制链接]
128 |12
发表于 前天 01:47 | 显示全部楼层 |阅读模式
已上传使用演示动画,有兴趣的可以下来看看
《U盘歌单管理器》使用演示【2025-04-10】.zip - 蓝奏云 (lanzouu.com)

我在学习 pyqt 后的第二个更新的软件,这个软件重写的工作量很大,花了近一个月时间,pyqt 也有不少坑要填,过程中也在不断地学习完善。

这个软件原来一直用 tkinter 编写,现换成 pyqt5 后,界面显得更加合理,以前的很多想法也可以实现了。
原帖链接:https://www.52pojie.cn/thread-1509560-1-1.html



软件比较适合用在车载音乐播放上,现在人喜欢用手机联蓝牙听歌,也确实方便。但如果对音质有要求的,对蓝牙设备要求就很会高,要听高质量的歌单也得浪费流量和开通音乐平台的会员!
把自己喜欢的音乐下到U盘中,再用本软件制作播放列表是最佳方案。网上可以找到 “某我” 的破解版,甚至可以下载无损音乐,大家可以自己搜一下!



【更新说明】
V5.3.0 【2025-08-16】
1、增简单的内置歌词管理功能,可加载指定歌词或进行本地搜索(根据音乐文件名或音乐信息自动匹配),提供简易歌词同步显示功能。
2、歌单编辑时的剪切、复制、粘贴功能支持快捷键操作。(Ctrl + X、Ctrl + C、Ctrl + V)
3、歌单修复窗口中,删除出错音乐后可以直接保存。
4、可定义双击音乐的动作,可选播放、图片、歌词、ID3 等功能,可在软件设置中设定。
V5.2.3 【2025-04-10】
彻底解决打开歌单时的卡顿现象,音乐信息由台后延时读取
修正原主工具栏中“拖拽”与“排序”的工具提示信息
坛友提示添加音乐有问题,今天试了下,新版添加不了歌,调试时正常,打包后就不行,我得弄个新环境再打包试试,大家先用上个版本的吧 @_@

V5.2.2 【2025-02-01】
修改部分不合理之处,如打开歌单时后台占用资源问题(卡顿时间变短,但读取音乐信息时间增加,歌单音乐较多时感觉提升较明显)
打开歌单时进行条不会被覆盖,保存歌单后有弹窗提示等

V5.2.1 【2025-01-15】

修正歌单音乐移动在“拖拽模式”时退出 BUG 。

V5.2.0 【2025-01-14】
增加音乐文件名排序功能,针对不支持播放列表的设备,增加了音乐排序实现播放排序(也就是在音乐文件名前加序号);
歌单编辑时,对音乐的移动增加了拖拽模式,原为鼠标推动模式,部分电脑使用会有明显的迟滞感,此时可切换到拖拽模式让音乐移动更加顺畅。
V5.1.0 【2025-01-12】将原播放列表管理集成到左侧的系统文件视图中,使用方法不变;
完整播放列表打开时的读取机制,解决开音乐较多时打卡顿现象;
播放器可以点击进度条直接跳转(原只能靠拖动滑块);
修改了部分 BUG 与不合理处。   
V5.0.0 【2025-01-10】
V5.0.0 版本采用 PyQt5 编写,在界面和功能上都有很大提。代码也全部重写,历经了近4年代码也进行了很大程度上的优化。

在界面上、操作上进行了优化和加强,更容易上手,新增了歌单移动、合并功能,多个歌单之间可以用复制、粘贴添加音乐,复制、粘贴甚至还能与资源管理(我的电脑)进行配合(可实现从歌单中复制音乐到指定位置)。
自带了音乐播放功能,在主窗口中可以按歌单内容播放音乐,在歌单编辑窗口可以指定音乐播放,在歌单修复窗口可以试听匹配到的音乐,比起之前借助第三方播放器方便了不少。

V5 采用了MDI多文档的窗口模式,将以前的系统文本视图做成了右侧面板,将歌单编辑、修复、管理等操作以子窗口的形式打开。同时修改一些BUG,如磁盘卷标(名称)若存在乱码(UTF-8编码)时导致一片空白,以及一些不合理之处。针对一些使用 UTF-8 编码的播放设备,现还添加了修改磁盘卷标为相应编码的功能(缺点是 windows 系统中会显示乱码,目前还没找到解决方法)。   

全面修改了歌单修复操作方式,操作起来更加方便易懂。本工具没有提供音乐移动功能,每个人的保存分类的习惯不一样,大家可以按自己的习惯在文件管理器(资源管理器、我的电脑)中,将音乐移动到分类好的目录后,直接使用歌单修复就可以自动定位音乐。大家也可以使用我以前写的《文件名管理器》对音乐进行批量快速分,工具提供了多种分类方式,基本可以满足各种分类管理要求。   



【工具简介】
本软件可快速制作音乐播放列表(歌单),对音乐U盘支持友好,同样也可对硬盘上音乐创建歌单。软件还可修改音乐标签信息、内嵌图片等多种功能,也可以移动、转换、合并歌单。可在歌单间也可以进行复制、粘贴操作,甚至可以与资源管理联动。

【工具特色 】
    打开软件后会自动搜索移动磁盘(U盘)并分析其音乐信息。支持 4 种常见播放列表格式: m3u、m3u8、wpl、pls。可快速移动歌单(音乐路径会相应修改)、合并歌单和歌单格式转换。为不同格式的播放列格式预设内容模板,支持修改模板或添加模板样式。提供多种音乐添加方式,支持拖拽添加音乐,提供多种音乐排序功能,可用鼠标自由拖放排序。支持不同歌单格式之间的快速转换,让音乐U盘支持更多的播放设备。可快速修改音乐的 ID3 信息,支持部分信息对换,可从文件名提示信息写入 ID3,出可以用 ID3 信息修改文件名。支持修改音乐图片,可直接粘贴剪切板中的图像作为音乐图片,能快速压缩过大的图片以减少音乐体积。


【界面】
主窗口



歌单编辑窗口



歌单修复窗口



歌单管理窗口



【使用方法 】
常用操作:
软件为了减少启动时间,默认不会自动分析移动磁盘以外的驱动器(可以软件设置中修改),可通过双击目录手动分析其音乐情况。
在歌单管理器中,可以将歌单移动到其他目录,还可以拖动歌单合并到其他歌单中。同一目录中若有多个歌单的还可以进行快速排序。

一、创建新歌单
    在系统文件视图中选择要存放歌单的位置(建议先做这步,方便添加音乐)创建新的播放列表;添加音乐,软件提供多种添加方式,还支持文件拖拽和粘贴方式;按自己的喜好排序播放顺序(支持鼠标拖动操作,喜欢的音乐还可以用复制粘贴方式来增加播放次数);保存歌单,注意保存位置和歌单格式。


二、修复歌单
本功能通常在音乐发生移动后(或文件名稍做修改时),软件再通过遍历查找,把文件名相同或相近的文件列出来,若匹配到多首音乐时将按文件名相似度排序,可手动选择或指定其他位置音乐。因此,针对音乐U盘可以将音乐按自己的习惯整理(存放在不同的分类目录中),再通过修复功能定位歌单中路径不正确的音乐。
    选定需要修复的播放列表后,用修复命令打开;匹配定位出错的音乐;匹配到多个音乐时可选取正确的音乐;匹配不到音乐的(音乐被删除或文件名改动较大时) 可降低相似度尝试,仍不能定位的可手动指定或删除;保存歌单。


三、歌单转换
常见的歌单有4种格式:m3u、m3u8、wpl、pls,前两种格式一样,是最常用的歌单格式,后两种格式稍微复杂些,会记录音乐长度等特殊信息。歌单转换就是把歌单存成另一种格式,本软有2种方法转换歌单格式:
    以歌单编辑的方式打开歌单,再用另存为保存为其他格式;在系统文件视图中选中歌单,使用转换歌单命令。


四、移动歌单、合拼歌单
这两种操作需要先进入到歌单管理器,再切换到“拖拽”模式,直接拖动歌单即可完成:
    打开歌单管理器,根据操作范围选择开始位置(能显示操作的歌单和目录位置);切换到“拖拽”模式;选中要移动的歌单(合并时选要引用音乐的歌单 );拖动歌单到移动的目录(合并时拖动到接收音乐的歌单) 。


五、歌单排序
对于音乐U盘,其根目录通常会存有多个歌单,为了让播放设备能按指定顺序显示歌单,可通过在文件名增加前缀序号实现。本软件可在歌单管理器中快速实现:
    打开歌单管理器;切换到“排序”模式;移动歌单,可通过拖动、命令按钮或键盘移动; 使用“排序”命令增加文件名前缀实现排序(原有序号的会自动替换)。


【下载链接】
主下载地址(最新版本):
蓝秦 https://wwx.lanzoux.com/b01hxwx9g
提取码: gcf2

备用地址(同时有历史版本):
百度网盘 https://pan.baidu.com/s/12o8BUB1BBpjqrKpG_8IxLg?pwd=52pj
提取码: 52pj












    本人的其他作品:
    1 定时组合任务《此刻我要...》链接
    2 批量粘贴神器链接
    3 文件名管理器链接
    4 批量二维码生成器(离线)链接
    5 小说规则下载器链接
    6 ePub 电子书编辑器链接
    7 U盘歌单管理器链接
    8 文件时间修改器(毫秒级)链接
    9 剪切板资源捕获器链接
    10 文件清单生成器链接
    11 小说角色更名器链接
    12 音乐内嵌图片管理器链接
    13 小说广告清理器链接
    14 漫画下载器链接
    15 漫画图管理器链接
    16 小学数学运算题随机生成【excel】链接
    上述作品均可在下载链接页面中找到!
回复

使用道具 举报

发表于 前天 01:48 | 显示全部楼层
软件编写花絮
这是学习 pyqt  的第二个软件,虽然现在也还在学习,但边学边用最有效果!

pyqt 比 tkinter 好用太多了,但也存在不少坑,学习使用时还是得一个个去填,比如 QTableWidget 就不提供移动功能,还得自己写方法,这还是小事,最要命的是它的 item 对象还是一次性的,只要用过就失效,还得把它克隆后才能再使用。这个坑卡了我差不多一天!

QTreeWidget 也一样,移动功能还得自己写,这些小部件在写修改方法时,若绑定了修改信号,还会在移动时乱发信号,这里也我把坑了一把,最后靠暂时信号后才正常,所以几乎每个修改方法前后都要加屏蔽信号、恢复信号的代码。

在自己编写 QTableWidget 行移动时非常烧脑,还要考虑多选问题,向上移、向下移、移到选择中间,甚至还有移到最前面、最后面的处理方法都不一样,我又不是数学学霸。不能快速特定算法,只能通过不断的试验、中断找方法,确实好累!!!

pyqt 中菜单图标尺寸没找到方法实现,只能按 16*16尺寸显示,在网上转了半天,才找到一篇说自定义菜单的文章,也就是使用 QWidgetAction来加载 自定义的 QWidget 菜单项,最后终于能实现菜单图标尺寸按自己的想法来显示。但最后卡在二级菜单上,二级菜单目前还是找不到方法显示其他尺寸图标的方法。

pyqt 的代码要比 tkinter 多太多,但提供的功能确实强大,这工具以前就有的想法无法用 tkinter 实现,现用 pyqt 就能轻松解决,比如原修复歌单原来只能在 text 对象上添加按键实现,但位置非常不好控。现在改用 pyqt ,QTableWidget 、QTreeWidget  都能很方便地在任何位置添加,且它们还支持添加用户数据,就是暂存一些与显示相关的数据,在处理 item 时能很方便的获取,原来只能存在变量中,处理起来会很烧脑。

这里还在使用 tkinter 的,我强烈建议转型使用 pyqt ,优点远远大于缺点!

目前软件还有两个小问题没找到解决方法,如果哪位大能有解决方案,希望能给予赐教!!
1、二级菜单项图标尺寸控制问题
2、正常读取 UTF-8 编码磁盘卷标的方法

这里给大家示例一下 QTableWidget 多行移动的模型,有兴趣的可以看看,让大家了解一下编程的大体思路
[Python]  
  1. def moveUp():
  2.         """
  3.         选中的行向上移
  4.         :return: 实际移动的行数
  5.         """
  6.         count = 0  # 统计移动数
  7.         self.selectionModel().clearSelection()  # 清空选择
  8.         index = 0  # 移动项目序号,是多行移动,还要考虑除选择首行外其他行是否达到上方
  9.         rows   # 获取选中要移动的所有行号列表
  10.         for row in rows : # 遍历所有要移动的行
  11.                 if row == index:  是否移到最上方(因为是多行,不能简单地判断 row == 0)
  12.                         index += 1 # 累计达到上方的行数
  13.                         self.selectRow(row)  # 选中行(移动完后要选中原来的行)
  14.                         continue  # 结束该行的操作
  15.                 # 下面是一般行正常的向上移动操作
  16.                 行交换方法(row, row - 1) # 上移一行,交换行是预选编写的方法,实现两行之间的数据交换
  17.                 self.selectRow(row - 1)  # 选中移动后的行
  18.                 count += 1
  19.         return count
  20. def moveDown():
  21.         """
  22.         选中的行向上移
  23.         :return:实际移动的行数
  24.         """
  25.         self.selectionModel().clearSelection()  # 清空选择
  26.         count = 0  # 统计移动数
  27.         index = 0  # 移动项目序号,要考虑除选择首行外其他行是否达到下方
  28.         rows   # 获取选中要移动的所有行号列表
  29.         for row in reversed(rows): # 要倒序遍历选中的行
  30.                 if row == self.rowCount() - index - 1:  是否移到最下方(因为是多行,不能简单地判断 row == self.rowCount() - 1)
  31.                         index += 1
  32.                         self.selectRow(row)  # 选中
  33.                         continue  # 结束该行的操作
  34.                
  35.                 # 下面是一般行正常的向下移动操作
  36.                 行交换方法(row, row + 1) # 下移一行,交换行是预选编写的方法,实现两行之间的数据交换
  37.                 self.selectRow(row + 1)  # 选中移动后的行
  38.                  count += 1
  39.         return count
复制代码


置顶、置底比较简单,就不写了
回复

使用道具 举报

发表于 前天 01:48 | 显示全部楼层
已暂时恢复成 V5.2.2 版本台后读音乐信息的方式,会有一定卡顿,但能用!
我再研究下 V5.2.3 版本出错的原因

编辑器中能正常使用,打包后台读取音乐信息就退出,还不能捕捉到出错信息,很干脆的就直接退出!
已定位是 QThread 类的原因(使用 QThread 的信号与槽机制更新界面 ),因为换成 threading 就正常。
回复

使用道具 举报

发表于 前天 01:48 | 显示全部楼层
任务量不小
回复

使用道具 举报

发表于 前天 01:49 | 显示全部楼层
好厉害,我等学习对象
回复

使用道具 举报

发表于 前天 01:49 | 显示全部楼层
保存按钮不在主工具栏,在创建的歌单窗口中
回复

使用道具 举报

发表于 前天 01:50 | 显示全部楼层
厉害了!辛苦了大佬
回复

使用道具 举报

发表于 前天 01:51 | 显示全部楼层
非常实用,感谢分享
回复

使用道具 举报

发表于 前天 01:51 | 显示全部楼层
看起来不错哦
回复

使用道具 举报

发表于 前天 01:52 | 显示全部楼层
很实用的软件
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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