Lyricify 家族中的 .NET 歌词工具库,为 Lyricify 歌词相关功能竭力打造,提供歌词解析、生成、搜索、解密和优化处理。
| 格式 | 解析 | 生成 | 说明 |
|---|---|---|---|
| Lyricify Syllable | ✓ | ✓ | Lyricify 逐字歌词 |
| Lyricify Lines | ✓ | ✓ | Lyricify 逐行歌词 |
| LRC | ✓ | ✓ | 标准逐行歌词 |
| QRC | ✓ | ✓ | QQ 音乐逐字歌词 |
| KRC | ✓ | ✓ | 酷狗逐字歌词 |
| YRC | ✓ | ✓ | 网易云音乐逐字歌词 |
| TTML | ✓ | — | 逐行、逐字;支持 Apple Music 扩展 |
| Spotify (JSON) | ✓ | — | 未同步、逐行或逐字歌词 |
| Musixmatch (JSON) | ✓ | — | 未同步、逐行或逐字歌词 |
ParseHelper 和 GenerateHelper 分别提供统一的解析、生成入口;TypeHelper 用于自动识别格式、转换类型以及获取格式的显示名称。
格式识别还支持 QRC (XML)、网易云音乐完整 YRC (JSON) 和 Apple Music (JSON) 等原始封装类型。
SearchHelper 支持下表中的全部来源,可根据标题、艺人、专辑和时长查找最匹配的歌曲。
| 来源 | 歌词能力 | 其他常用接口 | 凭据要求 |
|---|---|---|---|
| QQ 音乐 | 获取歌词及翻译 | 歌曲、专辑、歌单和播放链接 | 无需配置 |
| 网易云音乐 | 获取 LRC、YRC 等歌词数据 | 歌曲、专辑和歌单 | 无需配置 |
| 酷狗音乐 | 搜索歌词并获取 KRC | 歌曲搜索 | 无需配置 |
| 汽水音乐 | 从曲目详情获取歌词信息 | 曲目详情 | 无需配置 |
| Apple Music | 获取 TTML 歌词 | 曲目搜索 | 获取歌词必须提供 Media User Token;Access Token 自动获取 |
| Musixmatch | 获取逐字、逐行或未同步歌词及翻译 | 曲目匹配 | User Token 自动获取,也可手动设置 |
| Spotify | 获取未同步、逐行或逐字歌词 | 曲目搜索 | 必须提供 sp_dc Cookie |
| LRCLIB | 获取同步或纯文本歌词 | 按曲目信息搜索、按 ID 查询 | 无需配置 |
- 已有歌曲信息、需要寻找对应平台曲目时,使用
SearchHelper - 已知来源、曲目 ID 或需要调用特定平台能力时,使用
ProviderHelper
在线接口依赖对应服务的可用性,返回结果也可能受到账号权限和地区限制。
- 处理或还原 Explicit 歌词
- 标准化 YRC、Musixmatch 歌词
- 识别并处理信息行(标题行)
- 解析 Apple Music TTML 扩展中的翻译、简体中文替换、歌曲元数据、背景人声和演唱者对齐信息
- 为逐行、逐字歌词添加时间偏移
- 将逐字歌词降级为逐行歌词等较低同步级别
- 使用统一模型表示未同步、逐行、逐字和混合同步歌词
- QRC、KRC 歌词解密与获取帮助
- 中文简繁转换
- 字符串和数学帮助方法
在解决方案目录中添加项目引用:
dotnet add path/to/YourProject.csproj reference Lyricify.Lyrics.Helper/Lyricify.Lyrics.Helper.csprojusing Lyricify.Lyrics.Helpers;
using Lyricify.Lyrics.Models;
var rawLyrics = File.ReadAllText("lyrics.txt");
var lyricsData = ParseHelper.ParseLyrics(rawLyrics); // 自动识别格式
if (lyricsData is not null)
{
var lrc = GenerateHelper.GenerateString(lyricsData, LyricsTypes.Lrc);
Console.WriteLine(lrc);
}已知原始格式时,也可以显式传入类型:
var lyricsData = ParseHelper.ParseLyrics(rawLyrics, LyricsRawTypes.Qrc);using Lyricify.Lyrics.Helpers;
using Lyricify.Lyrics.Models;
using Lyricify.Lyrics.Searchers.Helpers;
using SearchSource = Lyricify.Lyrics.Searchers.Searchers;
var track = new TrackMultiArtistMetadata
{
Title = "RUNAWAY",
Artists = new() { "OneRepublic" },
Album = "RUNAWAY",
AlbumArtists = new() { "OneRepublic" },
DurationMs = 143264,
};
var match = await SearchHelper.Search(
track,
SearchSource.LRCLIB,
CompareHelper.MatchType.Medium);
var lyrics = await ProviderHelper.LRCLIBApi.Get(
track.Title,
track.Artist!,
track.Album,
track.DurationMs / 1000d);
Console.WriteLine(lyrics?.SyncedLyrics);其他在线来源可通过 ProviderHelper 中相应的 QQMusicApi、NeteaseApi、KugouApi、SodaMusicApi、AppleMusicApi、MusixmatchApi 和 SpotifyApi 访问。
Musixmatch 默认使用 Android API,也可以在创建实例时通过配置委托选择桌面 API,或注入自己的请求发送函数:
var mobileApi = new Lyricify.Lyrics.Providers.Web.Musixmatch.Api();
var desktopApi = new Lyricify.Lyrics.Providers.Web.Musixmatch.Api(
options => options.UseDesktop());
var searcher = new MusixmatchSearcher(desktopApi);Lyricify.Lyrics.Helper/
├─ Decrypter/ # QRC、KRC 解密
├─ Generators/ # 歌词生成
├─ Helpers/ # 统一入口、歌词优化与通用帮助类
├─ Models/ # 歌词、时间轴和曲目元数据模型
├─ Parsers/ # 歌词解析
├─ Providers/Web/ # 在线服务接口与响应模型
└─ Searchers/ # 歌曲搜索与匹配
Lyricify.Lyrics.Demo/
├─ Program.cs # 使用示例
└─ RawLyrics/ # 示例歌词
Lyricify Lyrics Helper 是 Lyricify 家族的开源成员之一,专注于为 Lyricify 系列应用及其他项目提供可复用的歌词处理能力。
- Lyricify App:Lyricify 系列应用的主仓库,包含 Lyricify 4、Lyricify Fusion、Lyricify Mobile 等产品的介绍、下载与使用指南。
- Lyricify Backgrounds:面向 Lyricify 的可复用动态背景渲染器,提供跨框架接口以及 WPF、WinUI 实现。
- Lyricify Lines Creator:Lyricify Lines 逐行歌词打轴工具,同时支持输出 LRC 歌词。
本项目基于 Apache License 2.0 开源。
欢迎开发者在自己的项目中引用本库。使用、复制、修改或分发本项目代码时,请遵守 Apache License 2.0,并履行许可证规定的相关义务。
如果希望对本项目进行改进、翻译或衍生开发,推荐直接 fork 本仓库并在此基础上继续维护,而非另行创建项目;同时建议保留原仓库名称或 Lyricify 标识,以便识别项目来源。
特别感谢 @cnbluefire 和 @Raspberry Kan 提供的帮助与支持。
- LyricParser(MIT License)
- 163MusicLyrics(Apache-2.0 License)