c#解析Lrc歌词文件
public class Lrc
{
/// <summary>
/// 歌曲
/// </summary>
public string Title { get; set; }
/// <summary>
/// 艺术家
/// </summary>
public string Artist { get; set; }
/// <summary>
/// 专辑
/// </summary>
public string Album { get; set; }
/// <summary>
/// 歌词作者
/// </summary>
public string LrcBy { get; set; }
/// <summary>
/// 偏移量
/// </summary>
public string Offset { get; set; } /// <summary>
/// 歌词
/// </summary>
public Dictionary<double, string> LrcWord = new Dictionary<double, string>(); /// <summary>
/// 获得歌词信息
/// </summary>
/// <param name="LrcPath">歌词路径</param>
/// <returns>返回歌词信息(Lrc实例)</returns>
public static Lrc InitLrc(string LrcPath)
{
Lrc lrc = new Lrc();
using (FileStream fs = new FileStream(LrcPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
string line;
using (StreamReader sr = new StreamReader(fs, Encoding.Default))
{
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("[ti:"))
{
lrc.Title = SplitInfo(line);
}
else if (line.StartsWith("[ar:"))
{
lrc.Artist = SplitInfo(line);
}
else if (line.StartsWith("[al:"))
{
lrc.Album = SplitInfo(line);
}
else if (line.StartsWith("[by:"))
{
lrc.LrcBy = SplitInfo(line);
}
else if (line.StartsWith("[offset:"))
{
lrc.Offset = SplitInfo(line);
}
else
{
Regex regex = new Regex(@"\[([0-9.:]*)\]+(.*)", RegexOptions.Compiled);
MatchCollection mc = regex.Matches(line);
double time = TimeSpan.Parse("00:" + mc[].Groups[].Value).TotalSeconds;
string word = mc[].Groups[].Value;
lrc.LrcWord.Add(time, word);
}
}
}
}
return lrc;
} /// <summary>
/// 处理信息(私有方法)
/// </summary>
/// <param name="line"></param>
/// <returns>返回基础信息</returns>
static string SplitInfo(string line)
{
return line.Substring(line.IndexOf(":") + ).TrimEnd(']');
}
}
一行代码:Lrc lrc= Lrc.InitLrc("test.lrc");
我将分离好的歌词放入了Dictionary<double, string>里,当然也可以直接用数组存,格式就要看实际的用途了,把这些都交给TimeSpan来做吧。
测试:


很久以前有人提出了这个问题:一行歌词里面有多个时间会报错,这么久了也没见人把好的方案提供出来,今天我花了点时间,修改了下,下面是获取歌词方法
/// <summary>
/// 获得歌词信息
/// </summary>
/// <param name="LrcPath">歌词路径</param>
/// <returns>返回歌词信息(Lrc实例)</returns>
public static Lrc InitLrc(string LrcPath)
{
Lrc lrc = new Lrc();
Dictionary<double, string> dicword = new Dictionary<double, string>();
using (FileStream fs = new FileStream(LrcPath, FileMode.Open, FileAccess.Read, FileShare.Read))
{
string line;
using (StreamReader sr = new StreamReader(fs, Encoding.Default))
{
while ((line = sr.ReadLine()) != null)
{
if (line.StartsWith("[ti:"))
{
lrc.Title = SplitInfo(line);
}
else if (line.StartsWith("[ar:"))
{
lrc.Artist = SplitInfo(line);
}
else if (line.StartsWith("[al:"))
{
lrc.Album = SplitInfo(line);
}
else if (line.StartsWith("[by:"))
{
lrc.LrcBy = SplitInfo(line);
}
else if (line.StartsWith("[offset:"))
{
lrc.Offset = SplitInfo(line);
}
else
{
try
{
Regex regexword = new Regex(@".*\](.*)");
Match mcw = regexword.Match(line);
string word = mcw.Groups[].Value;
Regex regextime = new Regex(@"\[([0-9.:]*)\]", RegexOptions.Compiled);
MatchCollection mct = regextime.Matches(line);
foreach (Match item in mct)
{
double time = TimeSpan.Parse("00:" + item.Groups[].Value).TotalSeconds;
dicword.Add(time, word);
}
}
catch
{
continue;
}
}
}
}
}
lrc.LrcWord = dicword.OrderBy(t => t.Key).ToDictionary(t => t.Key, p => p.Value);
return lrc;
}


人还是原来的人,词找不到了
c#解析Lrc歌词文件的更多相关文章
- Java使用正则表达式解析LRC歌词文件
LRC歌词是一种应用广泛的歌词文件,各主流播放器都支持. lrc歌词文本中含有两类标签: 1.标识标签(ID-tags) [ar:艺人名] [ti:曲名] [al:专辑名] [by:编者(指编辑LRC ...
- 解析LRC歌词文件readlrc
package com.jikexueyuan.readlrc.main; import com.jikexueyuan.readlrc.utils.Utils; import java.io.Fil ...
- 我的Android进阶之旅------>Android自定义View来实现解析lrc歌词并同步滚动、上下拖动、缩放歌词的功能
前言 一LRC歌词文件简介 1什么是LRC歌词文件 2LRC歌词文件的格式 LRC歌词文件的标签类型 1标识标签 2时间标签 二解析LRC歌词 1读取出歌词文件 2解析得到的歌词内容 1表示每行歌词内 ...
- 如何将lrc歌词文件批量转换为ANSI编码?
有些MP3.MP4或学习机只能播放ANSI编码的歌词文件,可是从网站上下载的歌词大多是UTF-8或者其它机器支持不了的编码,如何批量将这些lrc歌词文件转换成ANSI编码的文件呢? 工具/原料 萍客T ...
- 浅析LRC歌词文件
[时间:2018-12] [状态:Open] [关键词:字幕,LRC,歌词,lyric,文件格式] 0 引言 几年前(2010年左右),网络音乐流行与免费的时代,网上有大量的mp3,使用比较常见的播放 ...
- 10行代码解析krc歌词文件
互联网上,我们常见的歌词格式有 LRC.TRC(天天动听歌词).KRC(KuGou ResourCe,酷狗资源文件)和 QRC(QQ音乐歌词):在影视制作中,人们通常会用其他的卡拉 OK 字幕格式,例 ...
- LRC歌词文件读取代码
/**************************************************/ /*******************-main文件-******************* ...
- C#下载歌词文件
前段时间写了一篇c#解析Lrc歌词文件,对lrc文件进行解析,支持多个时间段合并.本文借下载歌词文件来探讨一下同步和异步方法. Lrc文件在网络上随处可见,我们可以通过一些方法获取,最简单的就是别人的 ...
- lrc歌词文件格式
一.lrc文件有什么作用 lrc文件就是一个文本文件,用来记录歌曲的歌词信息,使得播放歌曲时能够让歌词与声音同步显示,类似于电影字幕那种效果. 心情很丧时我们会听首歌陶冶一下情操,不知你是否注意过音乐 ...
随机推荐
- adb shell dumpsys的用法
一. 打印出设备中所有service的信息 zh@zh:~$adb shell dumpsys -l (字母l)zh@zh:~$adb shell service list 二.查询到运行的syste ...
- HFS的远程命令执行漏洞(RCE)
一.HFS漏洞 1.影响版本 : 2.3c以前的2.3x版本 2.HFS: HFS是HTTP File Server,国外的一款HTTP 文件服务器软件,简单易上手. 3.漏洞描述: HTTP Fil ...
- 【黑金ZYNQ7000系列原创视频教程】05.FPGA和ARM的初次结合——LED实验
黑金论坛地址: http://www.heijin.org/forum.php?mod=viewthread&tid=36639&extra=page%3D1 爱奇艺地址: http: ...
- 【BZOJ1054】[HAOI2008]移动玩具 BFS
[BZOJ1054][HAOI2008]移动玩具 Description 在一个4*4的方框内摆放了若干个相同的玩具,某人想将这些玩具重新摆放成为他心中理想的状态,规定移动 时只能将玩具向上下左右四个 ...
- highmaps如何自定义 区间的颜色刻度
https://api.highcharts.com/highmaps/colorAxis.dataClassColor http://jsfiddle.net/gh/get/library/pure ...
- 安装 sql server 2008出现重启电脑,另在server 2012 r2安装sql server 2008 安装不上
时即使是进行电脑重启,也会报这个错误,那么就不是电脑的问题了,其实是系统注册表在作怪,解决方法如下: 1.开始-->运行,输入regedit,打开注册表管理器: 2. 找到 HKEY_LOCAL ...
- Android官方架构组件指南
此指南适用于那些曾经或现在进行Android应用的基础开发,并希望了解和学习编写Android程序的最佳实践和架构.通过学习来构建强大的生产级别的应用. 注意:此指南默认你对Android开发有比较深 ...
- centos7yum下载安装报:软件包与预期下载的不符。建议:运行 yum --enablerepo=updates clean metadata尝试其他镜像
centos7yum下载安装报:软件包与预期下载的不符.建议:运行 yum --enablerepo=updates clean metadata尝试其他镜像. rm -f /var/lib/rpm/ ...
- 系统中同时有 python2和 python3,怎么让 ipython 选择不同的版本启动?
已经安装的情况下: > which ipython /usr/local/bin/ipython > cat /usr/local/bin/ipython #!/usr/local/op ...
- 深入理解Docker容器执行引擎runC
1 简介 根据官方的定义:runC是一个根据OCI标准创建并运行容器的CLI tool. Docker就是基于runC创建的,简单地说,runC就是docker中最为核心的部分,容器的创建,运行,销毁 ...