C# 音乐播放器制作(第三节 歌词)_第1页
C# 音乐播放器制作(第三节 歌词)_第2页
C# 音乐播放器制作(第三节 歌词)_第3页
C# 音乐播放器制作(第三节 歌词)_第4页
C# 音乐播放器制作(第三节 歌词)_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

MiniMusic播放器注:课件和视频版权归作者所有,未经许可不准上传、传播、商用。作者:吴鹏邮箱:422457601@电话版视频:/item.htm?id=43905934666

接下来我将用认真、严谨、诚恳、专业的态度和大家一起学习这个播放器的制作。将带领大家从无到有,完整的编写一个酷酷的播放器。手写每一行代码,讲述每一个关键技术。

现在很多书籍内容很多,做出来的东西却粗制滥造。结尾的都会加一句“进一步需要读者自己完善”。有时候我就在想有没有一本写完整的书?真是一堆垃圾!

这个酷酷的播放器是开源网上的代码演变而来,然后我尽了所有知道的知识去完善它,

希望能给学习C#朋友,带来帮助!介绍:第三节歌词设计1.歌词显示原理2.关键技术解读3.歌词类的编写4.歌词与播放器整合11.歌词显示原理1.用正则表达式分解歌词的[时间][内容]存入一个Dictionary字典集合,[时间]->Key、 [内容]->Value;

2.设置一个定时器,在歌曲播放时载入歌词Dictionary。3.根据当前媒体播放时间,匹配Dictionary中的时间。如果匹配成功,则调出对应的内容,显示到窗体,歌词显示完成。歌词图解歌词作者歌曲标题时间歌词内容2.关键技术解读1.正则表达式2.集合3.Linq查询注:这几个技术非常常用,而且非常重要。但也有点复杂,视频中不做过多讲解。不懂的屌丝们自觉补脑。正则表达式1.正则表达式:一种筛选字符串的语法规则。(详细了解文档中\MiniMusic制作\网页资料\正则表达式30分钟入门教程)2.我们用到两个表达式:时间提取:@"(?<=\[).*?(?=\])";

内容提取:@"(?<=\])(?!\[).*";3.操作正则表达似的类为Regex,使用时导入空间:usingSystem.Text.RegularExpressions。4.一个正则匹配结果接收集合。时间提取正则表达式歌词的格式:[时间]XXX内容xxxxx提取时间语法为:前面有’[‘一到多个字符后面有’]’。1.前面有‘[’我们要选用“零宽断言”,语法为(?<=exp:它断言自身出现的位置的前面能匹配表达式exp)。2.后面有‘]’我们要选用“零宽断言”,语法为(?=exp:它断言自身出现的位置的后面能匹配表达式exp)。3.字符串用什么表示呢。这里用‘.’(匹配除“\n”之外的任何单个字符)4.要匹配一个或多个字符串呢用+(一次或多次匹配前面的字符或子表达式)5.默认匹配的字符为“贪心模式”,例:[123][456]匹配的结果是123][456.因此我们要使用“非贪心模式”用’?’紧随任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后.(”非贪心模式”匹配搜索到的、尽可能短的字符串)。

表达式为:(?<=\[).+?(?=\])歌词提取正则表达式歌词的格式:[时间]XXX内容xxxxx提取歌词语法为:前面有’]‘紧接的不是’[’零个或多个字符串。1.前面有‘]’语法为(?<=\])(?<=exp:它断言自身出现的位置的前面能匹配表达式exp)。2.紧接着没有‘[’我们要选用“零宽断言”,语法为(?!exp:它断言自身出现的位置的后面不能匹配表达式exp)。3.字符串用‘.’(匹配除“\n”之外的任何单个字符)4.要匹配零个或多个字符串呢用*(零次或多次匹配前面的字符或子表达式)

表达式为:(?<=\])(?!\[)*.集合1.用到字典集合Dictionary2.只用到了简单的添加方法Add()

注:集合的具体学习,可查看《C#入门经典》一书。Linq查询1.用到Linq查询的查询,和排序

注:Linq的更多学习,可查看《C#入门经典》一书。3.歌词类编写1.建立控制台程式。2.调试主要功能。3.添加Lrc类。关键功能调试代码(读取LRC所有行):publicstaticDictionary<string,string>lrcDictionary=newDictionary<string,string>();staticvoidMain(string[]args){ stringexcTime=@"(?<=\[).*?(?=\])";stringexcText=@"(?<=\])(?!\[).*";MatchCollectionmatchTime;MatchCollectionmatchText;//读取文件所有行string[]str=File.ReadAllLines(".\\给你们.lrc");foreach(stringsinstr){Console.WriteLine(s);}关键功能调试代码(匹配正则式):for(inti=0;i<str.Length-1;i++){matchTime=Regex.Matches(str[i],excTime);matchText=Regex.Matches(str[i],excText);foreach(varsinmatchTime){stringstrTemp="";foreach(varminmatchText){strTemp+=m;}try{lrcDictionary.Add(s.ToString(),strTemp);}catch(Exceptione){Console.WriteLine(e.ToString());}Console.WriteLine("{0}{1}",s,strTemp);}}关键功能调试代码(Linq排序):Console.WriteLine("=========排序-升=============");Dictionary<string,string>order=(fromninlrcDictionaryorderbyn.Keyselectn).ToDictionary(k=>k.Key,v=>v.Value);foreach(varoinorder){Console.WriteLine(o.Key);}关键功能调试代码(方法排序):Console.WriteLine("======方法排序=========");Dictionary<string,string>lrc=lrcDictionary.OrderBy(o=>o.Key).ToDictionary(k=>k.Key,v=>v.Value);foreach(varoinlrc){Console.WriteLine(o.Key);}Console.ReadKey();}排序图:添加Lrc类1.编写一个构造函数。2.添加一个字典集合属性。3.一个私有获取歌词内容方法。构造函数:publicLrc(stringpath)

{if(File.Exists(path)==false)

{thrownewSystem.ArgumentException("歌词文件不存在");

}getLrcContext(path);

}字典集合类属性和成员:privateDictionary<string,string>lrcCollections;publicDictionary<string,string>LrcCollection

{get

{returnlrcCollections;}set{}//只读

}

获取歌词内容方法.1:privatevoidgetLrcContext(stringpath)

{lrcCollections=newDictionary<string,string>();

//正则表达式

元字符stringexcTime=@"(?<=\[).*?(?=\])";stringexcText=@"(?<=\])(?!\[).*";

//正则表达式匹配结果集合MatchCollectionmatchTime;MatchCollectionmatchText;

//读取歌词内容存入string[]str=File.ReadAllLines(path);获取歌词内容方法.2:for(inti=0;i<str.Length-1;i++)

{matchTime=Regex.Matches(str[i],excTime);matchText=Regex.Matches(str[i],excText);foreach(varsinmatchTime)

{stringstrTemp="";foreach(varminmatchText)

{strTemp+=m;

}获取歌词内容方法.3:try

{lrcCollections.Add(s.ToString(),strTemp);

}catch(Exception)

{

}

}

}

}

4.歌词与播放器整合思路: 1.编写歌词搜索函数,搜索歌词。 2.在每次播放歌曲时,将歌词载入内存中 3.添加一个定时器,歌词载入成功则刷新歌词。 4.在窗体添加一个Label显示歌词搜索歌词:

Dictionary<string,string>lrcCollection;BooleanisLrc=false;//歌词是否存在标记变量

publicvoidLrcSearch()

{stringallPath;allPath=names[MusicNum].Replace(Path.GetExtension(names[MusicNum]),".lrc");

try

{Lrclrc=newLrc(allPath);lrcCollection=lrc.LrcCollection;isLrc=true;

}catch(Exception)

{isLrc=false;lrcCollection=null;

}

}定时器刷新歌词:

privatevoidtimer4_Tick(objectsender,EventArgse)

{stringtime;if(isLrc==true)

{time=this.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;varlrc=fromninlrcCo

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论