第三节 歌词.pptx

上传人:s****8 文档编号:68959078 上传时间:2022-12-30 格式:PPTX 页数:29 大小:578.22KB
返回 下载 相关 举报
第三节 歌词.pptx_第1页
第1页 / 共29页
第三节 歌词.pptx_第2页
第2页 / 共29页
点击查看更多>>
资源描述

《第三节 歌词.pptx》由会员分享,可在线阅读,更多相关《第三节 歌词.pptx(29页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、注:课件和视频版权归作者所有,未经许可不准上传、传播、商用。注:课件和视频版权归作者所有,未经许可不准上传、传播、商用。正版视频:http:/ 接下来我将用认真、严谨、诚恳、专业的态度接下来我将用认真、严谨、诚恳、专业的态度和大家一起学习这个播放器的制作。将带领大家从和大家一起学习这个播放器的制作。将带领大家从无到有,完整的编写一个酷酷的播放器。手写每一无到有,完整的编写一个酷酷的播放器。手写每一行代码,讲述每一个关键技术。行代码,讲述每一个关键技术。现在很多书籍内容很多,做出来的东西却粗制现在很多书籍内容很多,做出来的东西却粗制滥造。结尾的都会加一句滥造。结尾的都会加一句“进一步需要读者自己

2、完进一步需要读者自己完善善”。有时候我就在想有没有一本写完整的书?真。有时候我就在想有没有一本写完整的书?真是一堆垃圾!是一堆垃圾!这个酷酷的播放器是开源网上的代码演变而来,这个酷酷的播放器是开源网上的代码演变而来,然后我尽了所有知道的知识去完善它,然后我尽了所有知道的知识去完善它,希望能给学习希望能给学习C#C#朋友,带来帮助!朋友,带来帮助!介绍:介绍:介绍:介绍:第三节第三节 歌词设计歌词设计11.歌词显示原理1.用正则表达式分解歌词的 时间 内容存入一个Dictionary字典集合,时间-Key、内容-Value;2.设置一个定时器,在歌曲播放时载入歌词Dictionary。3.根据当

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

4、System.Text.RegularExpressions。4.一个正则匹配结果接收集合。时间提取正则表达式时间提取正则表达式歌词的格式:时间 XXX内容xxxxx提取时间语法为:前面有 一到多个字符 后面有。1.前面有 我们要选用“零宽断言”,语法为(?=exp:它断言自身出现的位置的前面能匹配表达式exp)。2.后面有 我们要选用“零宽断言”,语法为(?=exp:它断言自身出现的位置的后面能匹配表达式exp)。3.字符串用什么表示呢。这里用.(匹配除“n”之外的任何单个字符)4.要匹配一个或多个字符串呢用+(一次或多次匹配前面的字符或子表达式)5.默认匹配的 字符为“贪心模式”,例:12

5、3456 匹配的结果是123456.因此我们要使用“非贪心模式”用?紧随任何其他限定符(*、+、?、n、n,、n,m)之后.(”非贪心模式”匹配搜索到的、尽可能短的字符串)。表达式为:(?=).+?(?=)歌词提取正则表达式歌词提取正则表达式歌词的格式:时间 XXX内容xxxxx提取歌词语法为:前面有紧接的不是零个或多个字符串。1.前面有 语法为(?=)(?=exp:它断言自身出现的位置的前面能匹配表达式exp)。2.紧接着没有 我们要选用“零宽断言”,语法为(?!exp:它断言自身出现的位置的后面不能匹配表达式exp)。3.字符串用.(匹配除“n”之外的任何单个字符)4.要匹配零个或多个字符

6、串呢用*(零次或多次匹配前面的字符或子表达式)表达式为:(?=)(?!)*.集合集合1.用到字典集合Dictionary2.只用到了简单的添加方法Add()注:集合的具体学习,可查看C#入门经典一书。LinqLinq查询查询1.用到Linq查询的查询,和排序 注:Linq的更多学习,可查看C#入门经典一书。3.3.歌词类编写歌词类编写1.建立控制台程式。2.调试主要功能。3.添加Lrc类。关键功能调试代码(读取LRC所有行):public static Dictionary lrcDictionary=new Dictionary();static void Main(string args)

7、string excTime=(?=).*?(?=);string excText=(?=)(?!).*;MatchCollection matchTime;MatchCollection matchText;/读取文件所有行 string str=File.ReadAllLines(.给你们.lrc);foreach(string s in str)Console.WriteLine(s);关键功能调试代码(匹配正则式):for(int i=0;i str.Length-1;i+)matchTime=Regex.Matches(stri,excTime);matchText=Regex.Ma

8、tches(stri,excText);foreach(var s in matchTime)string strTemp=;foreach(var m in matchText)strTemp+=m;try lrcDictionary.Add(s.ToString(),strTemp);catch(Exception e)Console.WriteLine(e.ToString();Console.WriteLine(0 1,s,strTemp);关键功能调试代码(Linq排序):Console.WriteLine(=排序-升=);Dictionary order=(from n in lr

9、cDictionary orderby n.Key select n).ToDictionary(k=k.Key,v=v.Value);foreach(var o in order)Console.WriteLine(o.Key);关键功能调试代码(方法排序):Console.WriteLine(=方法排序=);Dictionary lrc=lrcDictionary.OrderBy(o=o.Key).ToDictionary(k=k.Key,v=v.Value);foreach(var o in lrc)Console.WriteLine(o.Key);Console.ReadKey();排

10、序图:添加添加LrcLrc类类1.编写一个构造函数。2.添加一个字典集合属性。3.一个私有获取歌词内容方法。构造函数:public Lrc(string path)if(File.Exists(path)=false)throw new System.ArgumentException(歌词文件不存在);getLrcContext(path);字典集合类属性和成员:private Dictionary lrcCollections;public Dictionary LrcCollection get return lrcCollections;set/只读 获取歌词内容方法.1:privat

11、e void getLrcContext(string path)lrcCollections=new Dictionary();/正则表达式 元字符 string excTime=(?=).*?(?=);string excText=(?=)(?!).*;/正则表达式匹配结果集合 MatchCollection matchTime;MatchCollection matchText;/读取歌词内容存入 string str=File.ReadAllLines(path);获取歌词内容方法.2:for(int i=0;i str.Length-1;i+)matchTime=Regex.Matc

12、hes(stri,excTime);matchText=Regex.Matches(stri,excText);foreach(var s in matchTime)string strTemp=;foreach(var m in matchText)strTemp+=m;获取歌词内容方法.3:try lrcCollections.Add(s.ToString(),strTemp);catch(Exception)4.4.歌词与播放器整合歌词与播放器整合思路:1.编写歌词搜索函数,搜索歌词。2.在每次播放歌曲时,将歌词载入内存中3.添加一个定时器,歌词载入成功则刷新歌词。4.在窗体添加一个La

13、bel显示歌词搜索歌词:Dictionary lrcCollection;Boolean isLrc=false;/歌词是否存在标记变量 public void LrcSearch()string allPath;allPath=namesMusicNum.Replace(Path.GetExtension(namesMusicNum),.lrc);try Lrc lrc=new Lrc(allPath);lrcCollection=lrc.LrcCollection;isLrc=true;catch(Exception)isLrc=false;lrcCollection=null;定时器刷新

14、歌词:private void timer4_Tick(object sender,EventArgs e)string time;if(isLrc=true)time=this.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;var lrc=from n in lrcCollection where n.Key.Contains(time)select n.Value;if(lrc.Count()0)label_Lrc.Text=lrc.First().ToString();else label_Lrc.Text=axWindowsMediaPlayer1.currentMedia.name;Paly函数中载入歌词:public Boolean play(string namepath)略 if(IsPlay=true)/打开成功切换按钮图片 pictureBoxPlay.Image=Properties.Resources.pause_on;/载入歌词 LrcSearch();return true;略 效果图:完工!完工!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 生活常识

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁