亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > C# > 正文

C#解析Lrc歌詞文件過程詳解

2020-01-24 01:05:46
字體:
來源:轉載
供稿:網友

看到很多人解析歌詞文件時寫了一大片的字符處理代碼,而且看得不是很明白,所以自己研究了一下,
 首先來了解下Lrc文件
 時間格式:
 1、標準格式: [分鐘:秒.毫秒] 歌詞
 注釋:括號、冒號、點號全都要求英文輸入狀態;
 2、其他格式①:[分鐘:秒] 歌詞;
 3、其他格式②:[分鐘:秒:毫秒] 歌詞,與標準格式相比,秒后邊的點號被改成了冒號。

標準格式:
 其格式為"[標識名:值]"。大小寫等價。以下是預定義的標簽。
[ar:藝人名]
[ti:曲名]
[al:專輯名] 
[by:編者(指編輯LRC歌詞的人)] 
[offset:時間補償值] 其單位是毫秒,正值表示整體提前,負值相反。這是用于總體調整顯示快慢的。
標準好啊,我就按照標準來做了 

 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[0].Groups[1].Value).TotalSeconds;       string word = mc[0].Groups[2].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(":") + 1).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[1].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[1].Value).TotalSeconds;         dicword.Add(time, word);        }       }       catch       {        continue;       }      }     }    }   }   lrc.LrcWord = dicword.OrderBy(t => t.Key).ToDictionary(t => t.Key, p => p.Value);   return lrc;  }

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩一区二区在线观看| 国产成人短视频| 国产主播在线一区| 国产精品久久久久久搜索| 久久中文精品视频| 国产剧情久久久久久| 亚洲伊人成综合成人网| 欧美午夜性色大片在线观看| 欧美日韩在线视频一区二区| 久久久精品在线观看| 成人国产精品免费视频| 成人国内精品久久久久一区| 亚洲精品短视频| 97国产精品视频人人做人人爱| 亚洲天堂色网站| 亚洲a中文字幕| 成人国产亚洲精品a区天堂华泰| 亚洲福利在线看| 国产高清在线不卡| 日韩精品电影网| 综合国产在线观看| 亚洲色图综合网| 国产精品v日韩精品| 日韩欧美aaa| 日韩h在线观看| 亚洲精品国产精品国自产观看浪潮| 在线观看欧美成人| 不卡毛片在线看| 色一情一乱一区二区| 亚洲欧美制服丝袜| 国产美女91呻吟求| 日本亚洲欧洲色α| 亚洲天堂日韩电影| 亚洲小视频在线| 亚洲第一网中文字幕| 97碰在线观看| 欧美精品久久久久久久| 一区二区三区四区在线观看视频| 国产精品jizz在线观看麻豆| 国产精品美女呻吟| 亚洲第一精品久久忘忧草社区| 91精品久久久久久久久久入口| 欧美性理论片在线观看片免费| 2019国产精品自在线拍国产不卡| 国产欧美精品xxxx另类| 欧美国产日韩一区| 亚洲黄色在线观看| 国产福利精品视频| 欧美日韩午夜剧场| 国产成人精品在线| 欧美激情精品久久久久久黑人| 992tv成人免费影院| 久久久欧美一区二区| 欧美成人激情视频免费观看| 欧美在线国产精品| www.久久草.com| 精品国产鲁一鲁一区二区张丽| 亚洲人成在线一二| 成人午夜在线影院| 国产精品美女999| 最近2019年日本中文免费字幕| 国产精品你懂得| 欧美床上激情在线观看| 国产在线高清精品| 欧美精品videofree1080p| 久久中文字幕国产| 日韩成人在线播放| 川上优av一区二区线观看| 精品日本美女福利在线观看| 国产精品夜色7777狼人| 久久99国产精品自在自在app| 欧美麻豆久久久久久中文| 欧美在线视频免费观看| 亚洲人成伊人成综合网久久久| 在线观看精品国产视频| 九色成人免费视频| 92看片淫黄大片看国产片| 国产精品18久久久久久麻辣| 菠萝蜜影院一区二区免费| 欧美老女人bb| 97超级碰碰人国产在线观看| 亚洲毛片一区二区| 精品久久中文字幕久久av| 亚洲xxxx视频| 欧美日韩在线视频首页| 在线成人激情视频| 一区二区国产精品视频| 欧美一区二区大胆人体摄影专业网站| 91av视频在线播放| 国产精品久久久久久久久久新婚| 久久在线免费视频| 国产成人av网| 97视频在线免费观看| 日韩av免费观影| 国内精品视频在线| 国产精品久久99久久| 国产精品一区二区三区毛片淫片| 中文字幕亚洲情99在线| 久久69精品久久久久久久电影好| 欧美日韩免费一区| 亚洲精品少妇网址| 国产成人综合精品在线| 亚洲国产日韩精品在线| 在线电影中文日韩| 欧美另类精品xxxx孕妇| 色综合久久88色综合天天看泰| 国产精品日本精品| 国产精品久久99久久| 色视频www在线播放国产成人| 欧美日韩视频免费播放| 国产原创欧美精品| 国产精品自在线| 亚洲欧美综合区自拍另类| 欧美日韩国产va另类| 91九色国产在线| 亚洲欧美国产视频| 91精品久久久久久久久| 亚洲第一精品福利| 精品久久久一区二区| 国产精品扒开腿做爽爽爽的视频| 国产亚洲欧美aaaa| 欧美午夜精品久久久久久人妖| 一本一本久久a久久精品综合小说| 美女精品视频一区| 韩国19禁主播vip福利视频| 伊人伊成久久人综合网站| 国产成人免费av电影| 98午夜经典影视| 欧美色videos| 久久精品中文字幕免费mv| 日韩电视剧在线观看免费网站| 亚洲男人天堂手机在线| 国产精品午夜视频| 在线一区二区日韩| 91视频九色网站| 色www亚洲国产张柏芝| 91黑丝在线观看| 亚洲福利视频免费观看| 永久555www成人免费| 一区二区三区亚洲| 国产成人综合精品| 亚洲无av在线中文字幕| 日本aⅴ大伊香蕉精品视频| 久久中文字幕一区| 国内揄拍国内精品少妇国语| 精品在线观看国产| 国产精品久久久久久久久男| 午夜精品久久久久久久久久久久久| 国产成人亚洲综合91精品| 中文字幕亚洲色图| 久操成人在线视频| 国产精品久久久久久av下载红粉| 青青青国产精品一区二区| 国产精品国产三级国产aⅴ9色| 欧美日韩国产黄| 97在线视频免费看| 国产丝袜精品视频| 91高清视频免费观看| 日本精品视频网站| 97精品视频在线播放| 中文字幕亚洲在线| 性亚洲最疯狂xxxx高清| 日本一区二区三区四区视频| 午夜免费日韩视频|