ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

我的歌库一千首没歌词,干脆手搓播放器,结局意想不到?

我的歌库一千首没歌词,干脆手搓播放器,结局意想不到? 平常之时我很是喜爱听歌, 电脑之中存有着数以千计的本地音乐, 然而其中大部分都没有歌词。每当想要跟着歌曲哼唱之时, 就需要手动前往网上进行搜索, 然后一首一首地去下载LRC文件, 花费两三个小时都难以全部搞定。之后我索性这般思考: 既然现有的工具或者是闭源的, 或者是不好用来使用的, 那么倒不如自己亲自编写一个播放器, 它既能自动对歌曲予以扫描, 又能够批量进行歌词的下载, 还能够同步显示。就这么决定马上行动, 我挑选了PyQt5来构建界面, 缘由在于此库最为成熟, 并且在网络上相关教程数量众多。音频播放借助.mixer, 它对MP3、FLAC这类常见格式予以支持, 具备轻量且稳定的特性。歌词下载主要依赖于API, 此网站数据量庞大, 匹配精准, 要是元数据匹配出现失败情况, 还能够运用音频指纹加来实施识别。数据被存储进去, 以便于后续进行查询。那第一步呢, 是要去写歌曲扫描引擎, 我会让它以递归的方式, 对指定的文件夹展开扫描, 去识别像.mp3、.flac这类后缀的文件, 之后再运用提取ID3标签, 从中提取标题、歌手、专辑等这些信息。当扫描完成之后, 会将其存储到数据库当中, 并且还会标记每一首歌曲的歌词状态, 也就是判断有没有歌词, 是属于纯音乐类型, 还是同步歌词类型。而增量更新的话, 仅仅会扫描新的文件, 速度特别快, 五百首歌曲大概半分钟就能完成扫描了。最要紧的是批量歌词下载模块, 我设计了两个引擎, 先是用元数据匹配, 要是标题和歌手能对应上, 便直接调用接口。要是对不上或者没有标签, 那就利用音频指纹去查找。为了防止界面卡顿, 下载任务放在后台运行, 还增添了进度条, 用以显示成功、失败、跳过、纯音乐分别有多少首。网络请求采用异步方式, 控制住每秒请求的次数, 防止被封禁。特意添加了智能过滤功能, 已有LRC文件的歌曲会被跳过, 纯音乐也能自动识别, 不会耗费时间。写的时候碰到不少坑, 首先是音频格式兼容性方面, 有些旧歌曲是WMA格式, 不支持, 我只能用pydub转码, 还得安装一个。其次是歌词匹配准确率问题, 元数据里括号、标点常常不一样, 致使匹配失败。后来引入做模糊匹配, 准确率从不到八成提升到了九成以上。最让人头疼的是批量下载时界面卡死, 后来把网络请求和UI更新分开, 通过信号槽传递进度, 才得以解决。歌词同步显示的部分, 我编写了一个自定义的内容, 每隔100毫秒就去检查一下当前播放所处的位置, 而后高亮对应的行, 还增添了一个内置的编辑器 使用这个编辑器的时候 能够手动去调整每一行歌词的时间戳, 无论是进行拖拽操作 还是进行细微的调整 都可以 并且误差能够被控制在0.1秒, 导出的的时候 支持标准的LRC格式 同时也能够嵌入到音频文件之中。进行测试之后, 五百首歌曲扫描三十秒, 批量下载歌词花费了五六分钟, 并且匹配准确率最终达到了96%。界面存在三种视图, 分别是按曲目、专辑以及艺术家, 歌词状态通过图标进行显示, 比如绿色表明已同步, 黑色意味着是纯音乐, 红色代表未匹配。还能够将文件拖拽到窗口进行播放, 甚至有一个迷你模式长期驻留在任务栏。整个项目编写了大约三千行, 并未使用任何付费库。坦诚讲, 以往觉着这类桌面应用借助C 或者Rust来编写, 必定是行不通的。然而在完成之后发觉, 即便启动速度稍微迟缓一些, 内存占用略微高一点, 可是好在开发的速度较快, 修改起来比较便利。比如说后来我增添了歌词翻译功能, 调用一个免费的翻译API便可行还想要添加车载音乐库批量导出功能, 改动几行代码就能够完成。和这类专业工具相较而言, 我的播放器肯定是不够精巧细致的, 但是自己使用起来很顺手, 并且能够随时添加功能, 不受他人限制的这种感觉着实很棒。最后的时分为止, 我要讲开来, 要是你同样倾心于进行反复鼓捣, 不妨寻个法子去尝试运用亲手制作的方式打造属于自己的工具, 就算起始阶段展现出十分粗糙的态势, 然而每一个步骤都是经由自身亲手撰写而成的, 往后在心中思虑到企图去更改任何内容的时候便能够随意更改, 这样一种掌控在手的感觉是现成的那些工具所无法给予的。当下的时刻,我在每一日的夜晚之际, 聆听歌曲, 当注意力注视到歌词于屏幕之上同步进行滚动之时, 内心之中还颇怀有一丝丝的成就感的。
返回列表