Skip to content

云盘歌曲播放无歌词,希望优化本地歌词匹配逻辑 #709

@Jerrrry4013

Description

@Jerrrry4013

检查清单

  • 我已检索仓库中所有的 Issues,确保我没有重复提交问题;或有相似 Issue,但我觉得我的情况不包含在那个相似 Issue 之内
  • 我已经找到了可以复现这个问题的方法,并且写在了下面的「具体信息」中
  • 此问题可以在我的设备和当前环境中稳定复现
  • 此问题可以在最新版本 (Latest Release) 中复现
  • 此问题是在我更新到当前版本后出现的

是网页端还是客户端

客户端

当前系统环境

Windows 11 版本25H2(OS内部版本 26200.7462)

当前 Node.js 及 npm 版本

v22.20.0/11.6.4

当前版本

v3.0.0-beta.8.2025

具体信息

[BUG] 云盘歌曲元数据丢失及本地歌词匹配逻辑优化

1. 问题描述

在 SPlayer 中播放网易云音乐云盘歌曲时,无法显示内嵌歌词与封面。

  • 核心现象:用户自主上传的 FLAC 文件(网易云曲库不存在该歌曲),在 SPlayer 播放云盘流时,歌词面板显示 “暂无歌词”
  • 根源分析:经排查发现,通过 SPlayer 下载到本地的云盘文件 Metadata(标签信息)中的歌词字段被抹除,导致播放器无法解析内嵌歌词。由于是私有上传歌曲,云端也无法匹配在线歌词。

2. 环境信息

  • 文件格式:FLAC (内嵌 LRC 歌词与封面)
  • 对比测试
    • 本地播放:直接在 SPlayer 打开源文件,内嵌歌词与封面显示正常
    • 云盘播放:在 SPlayer 云盘功能中播放,歌词显示“暂无歌词”,封面正常。
    • 官方客户端:PC 端 3.1.25 正常;2.10.13 无封面,且开启 UnblockNeteaseMusic 后无歌词/封面;移动端正常。

3. 技术细节与对比

测试维度 原始文件 SPlayer 下载的文件
标签信息 (Tags) 完整 (Title, Lyrics, Cover) 歌词标签丢失,其余正常
MD5 校验 原始 MD5 已改变
歌词状态 内嵌 LRC 正常读取 显示“暂无歌词”

分析结论
SPlayer 调用的云盘流或下载接口未能保留文件原始的内嵌歌词标签。由于云盘歌曲在服务器端通常没有对应词库,一旦内嵌标签丢失且无法匹配本地歌词,播放器便彻底无法显示歌词。

4. 功能建议:优化本地歌词匹配逻辑

现状

目前 SPlayer 的本地歌词匹配规则过于严格:

  1. ID 依赖:要求歌词文件必须包含“歌曲 ID”(如 歌曲ID.lrc),对于拥有大量存量 LRC 歌词(以歌曲名命名)的用户来说,手动获取 ID 并重命名过于繁琐。
  2. 文件名不匹配:SPlayer 下载云盘歌曲的文件名格式固定为 歌曲名 - 歌手.flac,而我的本地歌词库为 歌曲名.lrc,导致文件名无法完全匹配。

建议解决方案:增加“基于歌曲名的模糊匹配”

  • 逻辑描述
    • 当播放文件 红豆 - 王菲.flac 时,若未找到匹配的内嵌歌词或 ID 命名的歌词;
    • 播放器自动检索同目录(或指定歌词目录)下的 红豆.lrc
  • 优越性
    • 兼容性:无需用户手动修改现有的 歌曲名.lrc 库。
    • 自动化:解决了云盘文件下载后因文件名带后缀而导致匹配失效的问题。
    • 优雅性:相比于强制用户使用歌曲 ID,基于文件名的模糊匹配更符合音乐发烧友的本地管理习惯。

5. 证明材料 (Logs & Screenshots)

日志文件 (Log)

localhost-1767377433379.log

客户端表现对比

  • 安卓端表现Image

  • SPlayer 本地播放(正常)Image

  • SPlayer 云盘播放(异常:暂无歌词)Image

  • ncm2.10+BetterNCM

Image
  • ncm2.10
Image
  • ncm3
Image

文件样本

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions