Skip to content

feat(audio-engine): 增强本地库歌词标签识别兼容性#100

Open
Pissofdvpe wants to merge 1 commit into
SPlayer-Dev:devfrom
Pissofdvpe:dev-lrctags-fix
Open

feat(audio-engine): 增强本地库歌词标签识别兼容性#100
Pissofdvpe wants to merge 1 commit into
SPlayer-Dev:devfrom
Pissofdvpe:dev-lrctags-fix

Conversation

@Pissofdvpe

Copy link
Copy Markdown
  • 引入归一化标签键读取机制(去除空格、下划线/连字符),解决带空格歌词标签(如 UNSYNCED LYRICS)读取失败问题。
  • 扩展前缀匹配能力,支持带语言后缀(如 lyrics-ENG)的多种非常规格式。
  • 引入优先级判读逻辑以提升标签识别性。
  • 增强单元测试以覆盖各类异常标签键名。

改动类型

  • 新功能(feat)
  • 缺陷修复(fix)
  • 重构 / 优化(不改变对外行为)
  • 文档(docs)
  • 其他(请在「改动说明」中注明)

是否包含破坏性变更

  • 是(请在「改动说明」中详细描述)

改动说明

本次优化主要针对本地音乐库的内嵌歌词读取功能,提升了对多种音频标签标准(Tag Standards)的兼容性。

使用本地音乐库导入音频文件发现有些音频明明带有歌词但不显示。发现原有的歌词读取逻辑过于单一,仅支持特定的硬编码标签键名(如“lyrics”),导致许多标签工具(如 Mp3tag/music-tag-web/foobar2000 等)写入的格式(如带空格的“UNSYNCED LYRICS”)无法被识别。

而无论 Spotify、Apple Music、Deezer 还是网抑、扣扣甚至是其他野生门路等Down下的资源,大多也存在类似的不同平台和音频格式的歌词标签多样化问题,故此增加对歌词标签的广泛兼容性支持。

主要变更:

  • 🛠️ 广泛的歌词标签兼容性:底层引擎现在能够识别多种格式的歌词标签,包括:
    • 标准标签:lyrics, unsyncedlyrics, syncedlyrics, uslt, sylt, lyric
    • 带空格/下划线的变体:UNSYNCED LYRICS, unsynced_lyrics, SYNCED_LYRICS
    • 带语言后缀的变体:lyrics-ENG, unsyncedlyrics-ZHO
  • 🛠️ 引入归一化标签键读取机制:在 native/audio-engine 底层,自动将标签键名进行归一化处理(去除空格、下划线、连字符,转小写),实现模糊匹配。
  • 🚀 优化代码结构:重构优先级判断逻辑,将复杂的双重循环查找简化为清晰的函数式逻辑(max_by_key),统一维护并下沉至 lib.rs
  • 🧪 增强单元测试:添加针对各类异常标签键名(带空格、特殊格式、多语言后缀)的单元测试,确保底层标签识别逻辑在未来维护中不发生回归。

关联 Issue

测试情况

  • native/audio-engine 下运行 cargo test --lib,所有 19 个单元测试均通过。
  • 实际测试验证:
    • 音频格式:覆盖 MP3, M4A, WAV, FLAC 等常用格式。
    • 标签格式:针对 unsyncedlyrics, lyricseng, lyric-eng, unsynced_lyrics 等多种变体标签,均能成功读取原始歌词。

截图 / 录屏

自查清单

  • 本 PR 只包含一个主要功能 / 修复,没有夹带无关改动
  • 已在本地完整测试通过;AI 生成的代码同样自行测试并审阅过,未做未经验证的提交
  • 已运行 pnpm format,并确认 pnpm typecheckpnpm lint 通过
  • 改动涉及原生模块时已 pnpm build:native 验证;未手写 native/*/index.d.ts
  • 已向 dev 分支提交

- 引入归一化标签键读取机制(去除空格、下划线/连字符),解决带空格歌词标签(如 UNSYNCED LYRICS)读取失败问题。
- 扩展前缀匹配能力,支持带语言后缀(如 lyrics-ENG)的多种非常规格式。
- 引入优先级判读逻辑以提升标签识别性。
- 增强单元测试以覆盖各类异常标签键名。
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant