收藏 分享(赏)

第三节 歌词.pptx

上传人:gnk289057 文档编号:9180698 上传时间:2019-07-28 格式:PPTX 页数:29 大小:578.22KB
下载 相关 举报
第三节 歌词.pptx_第1页
第1页 / 共29页
第三节 歌词.pptx_第2页
第2页 / 共29页
第三节 歌词.pptx_第3页
第3页 / 共29页
第三节 歌词.pptx_第4页
第4页 / 共29页
第三节 歌词.pptx_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、MiniMusic播放器,注:课件和视频版权归作者所有,未经许可不准上传、传播、商用。,作者:吴鹏,邮箱:,电话:18575562535,正版视频: http:/ 朋友,带来帮助!,介绍:,第三节 歌词设计,1.歌词显示原理 2.关键技术解读 3.歌词类的编写 4.歌词与播放器整合,1,1.歌词显示原理,1.用正则表达式分解歌词的 时间 内容存入一个Dictionary字典集合,时间-Key 、内容-Value;2.设置一个定时器,在歌曲播放时载入歌词Dictionary。 3.根据当前媒体播放时间,匹配Dictionary中的时间。如果匹配成功,则调出对应的内容,显示到窗体,歌词显示完成。,

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

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

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

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

6、ing 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.Matches(st

7、ri, excText);foreach (var s in matchTime)string strTemp = “;foreach (var m in matchText)strTemp += m;trylrcDictionary.Add(s.ToString() , strTemp);catch (Exception e)Console.WriteLine(e.ToString();Console.WriteLine(“0 1“,s,strTemp);,关键功能调试代码(Linq排序):,Console.WriteLine(“=排序-升=“);Dictionary order =(fro

8、m n in lrcDictionaryorderby n.Keyselect 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(

9、o.Key);Console.ReadKey(); ,排序图:,添加Lrc类,1.编写一个构造函数。 2.添加一个字典集合属性。 3.一个私有获取歌词内容方法。,构造函数:,public Lrc(string path)if (File.Exists(path) = false)throw new System.ArgumentException(“歌词文件不存在“);getLrcContext(path);,字典集合类属性和成员:,private Dictionary lrcCollections; public Dictionary LrcCollectionget return lrcC

10、ollections;set /只读,获取歌词内容方法.1:,private void getLrcContext(string path)lrcCollections = new Dictionary();/正则表达式 元字符string excTime = “(?=).*?(?=)“;string excText = “(?=)(?!).*“;/正则表达式匹配结果集合MatchCollection matchTime;MatchCollection matchText;/读取歌词内容存入string str = File.ReadAllLines(path);,获取歌词内容方法.2:,fo

11、r (int i = 0; i str.Length - 1; i+)matchTime = Regex.Matches(stri, excTime);matchText = Regex.Matches(stri, excText);foreach (var s in matchTime)string strTemp = “;foreach (var m in matchText)strTemp += m;,获取歌词内容方法.3:,trylrcCollections.Add(s.ToString(), strTemp);catch (Exception ),4.歌词与播放器整合,思路:1.编写

12、歌词搜索函数,搜索歌词。2.在每次播放歌曲时,将歌词载入内存中3.添加一个定时器,歌词载入成功则刷新歌词。4.在窗体添加一个Label显示歌词,搜索歌词:,Dictionary lrcCollection;Boolean isLrc = false;/歌词是否存在标记变量 public void LrcSearch()string allPath;allPath = namesMusicNum.Replace(Path.GetExtension(namesMusicNum),“.lrc“); tryLrc lrc = new Lrc(allPath);lrcCollection = lrc.L

13、rcCollection;isLrc = true;catch (Exception)isLrc = false;lrcCollection = null;,定时器刷新歌词:,private void timer4_Tick(object sender, EventArgs e)string time;if (isLrc = true)time = this.axWindowsMediaPlayer1.Ctlcontrols.currentPositionString;var lrc =from n in lrcCollectionwhere n.Key.Contains(time)selec

14、t n.Value;if (lrc.Count() 0)label_Lrc.Text = lrc.First().ToString();elselabel_Lrc.Text = axWindowsMediaPlayer1.currentMedia.name;,Paly函数中载入歌词:,public Boolean play(string namepath) 略if (IsPlay = true)/打开成功切换按钮图片pictureBoxPlay.Image = Properties.Resources.pause_on;/载入歌词LrcSearch();return true; 略,效果图:,完工!,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报