




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
MiniMusic播放器注:課件和視頻版權(quán)歸作者所有,未經(jīng)許可不準(zhǔn)上傳、傳播、商用。作者:吳鵬郵箱:422457601@電話版視頻:/item.htm?id=43905934666
接下來我將用認(rèn)真、嚴(yán)謹(jǐn)、誠懇、專業(yè)的態(tài)度和大家一起學(xué)習(xí)這個播放器的制作。將帶領(lǐng)大家從無到有,完整的編寫一個酷酷的播放器。手寫每一行代碼,講述每一個關(guān)鍵技術(shù)。
現(xiàn)在很多書籍內(nèi)容很多,做出來的東西卻粗制濫造。結(jié)尾的都會加一句“進(jìn)一步需要讀者自己完善”。有時候我就在想有沒有一本寫完整的書?真是一堆垃圾!
這個酷酷的播放器是開源網(wǎng)上的代碼演變而來,然后我盡了所有知道的知識去完善它,
希望能給學(xué)習(xí)C#朋友,帶來幫助!介紹:第三節(jié)歌詞設(shè)計1.歌詞顯示原理2.關(guān)鍵技術(shù)解讀3.歌詞類的編寫4.歌詞與播放器整合11.歌詞顯示原理1.用正則表達(dá)式分解歌詞的[時間][內(nèi)容]存入一個Dictionary字典集合,[時間]->Key、 [內(nèi)容]->Value;
2.設(shè)置一個定時器,在歌曲播放時載入歌詞Dictionary。3.根據(jù)當(dāng)前媒體播放時間,匹配Dictionary中的時間。如果匹配成功,則調(diào)出對應(yīng)的內(nèi)容,顯示到窗體,歌詞顯示完成。歌詞圖解歌詞作者歌曲標(biāo)題時間歌詞內(nèi)容2.關(guān)鍵技術(shù)解讀1.正則表達(dá)式2.集合3.Linq查詢注:這幾個技術(shù)非常常用,而且非常重要。但也有點(diǎn)復(fù)雜,視頻中不做過多講解。不懂的屌絲們自覺補(bǔ)腦。正則表達(dá)式1.正則表達(dá)式:一種篩選字符串的語法規(guī)則。(詳細(xì)了解文檔中\(zhòng)MiniMusic制作\網(wǎng)頁資料\正則表達(dá)式30分鐘入門教程)2.我們用到兩個表達(dá)式:時間提取:@"(?<=\[).*?(?=\])";
內(nèi)容提取:@"(?<=\])(?!\[).*";3.操作正則表達(dá)似的類為Regex,使用時導(dǎo)入空間:usingSystem.Text.RegularExpressions。4.一個正則匹配結(jié)果接收集合。時間提取正則表達(dá)式歌詞的格式:[時間]XXX內(nèi)容xxxxx提取時間語法為:前面有’[‘一到多個字符后面有’]’。1.前面有‘[’我們要選用“零寬斷言”,語法為(?<=exp:它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp)。2.后面有‘]’我們要選用“零寬斷言”,語法為(?=exp:它斷言自身出現(xiàn)的位置的后面能匹配表達(dá)式exp)。3.字符串用什么表示呢。這里用‘.’(匹配除“\n”之外的任何單個字符)4.要匹配一個或多個字符串呢用+(一次或多次匹配前面的字符或子表達(dá)式)5.默認(rèn)匹配的字符為“貪心模式”,例:[123][456]匹配的結(jié)果是123][456.因此我們要使用“非貪心模式”用’?’緊隨任何其他限定符(*、+、?、{n}、{n,}、{n,m})之后.(”非貪心模式”匹配搜索到的、盡可能短的字符串)。
表達(dá)式為:(?<=\[).+?(?=\])歌詞提取正則表達(dá)式歌詞的格式:[時間]XXX內(nèi)容xxxxx提取歌詞語法為:前面有’]‘緊接的不是’[’零個或多個字符串。1.前面有‘]’語法為(?<=\])(?<=exp:它斷言自身出現(xiàn)的位置的前面能匹配表達(dá)式exp)。2.緊接著沒有‘[’我們要選用“零寬斷言”,語法為(?!exp:它斷言自身出現(xiàn)的位置的后面不能匹配表達(dá)式exp)。3.字符串用‘.’(匹配除“\n”之外的任何單個字符)4.要匹配零個或多個字符串呢用*(零次或多次匹配前面的字符或子表達(dá)式)
表達(dá)式為:(?<=\])(?!\[)*.集合1.用到字典集合Dictionary2.只用到了簡單的添加方法Add()
注:集合的具體學(xué)習(xí),可查看《C#入門經(jīng)典》一書。Linq查詢1.用到Linq查詢的查詢,和排序
注:Linq的更多學(xué)習(xí),可查看《C#入門經(jīng)典》一書。3.歌詞類編寫1.建立控制臺程式。2.調(diào)試主要功能。3.添加Lrc類。關(guān)鍵功能調(diào)試代碼(讀取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);}關(guān)鍵功能調(diào)試代碼(匹配正則式):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);}}關(guān)鍵功能調(diào)試代碼(Linq排序):Console.WriteLine("=========排序-升=============");Dictionary<string,string>order=(fromninlrcDictionaryorderbyn.Keyselectn).ToDictionary(k=>k.Key,v=>v.Value);foreach(varoinorder){Console.WriteLine(o.Key);}關(guān)鍵功能調(diào)試代碼(方法排序):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.編寫一個構(gòu)造函數(shù)。2.添加一個字典集合屬性。3.一個私有獲取歌詞內(nèi)容方法。構(gòu)造函數(shù):publicLrc(stringpath)
{if(File.Exists(path)==false)
{thrownewSystem.ArgumentException("歌詞文件不存在");
}getLrcContext(path);
}字典集合類屬性和成員:privateDictionary<string,string>lrcCollections;publicDictionary<string,string>LrcCollection
{get
{returnlrcCollections;}set{}//只讀
}
獲取歌詞內(nèi)容方法.1:privatevoidgetLrcContext(stringpath)
{lrcCollections=newDictionary<string,string>();
//正則表達(dá)式
元字符stringexcTime=@"(?<=\[).*?(?=\])";stringexcText=@"(?<=\])(?!\[).*";
//正則表達(dá)式匹配結(jié)果集合MatchCollectionmatchTime;MatchCollectionmatchText;
//讀取歌詞內(nèi)容存入string[]str=File.ReadAllLines(path);獲取歌詞內(nèi)容方法.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;
}獲取歌詞內(nèi)容方法.3:try
{lrcCollections.Add(s.ToString(),strTemp);
}catch(Exception)
{
}
}
}
}
4.歌詞與播放器整合思路: 1.編寫歌詞搜索函數(shù),搜索歌詞。 2.在每次播放歌曲時,將歌詞載入內(nèi)存中 3.添加一個定時器,歌詞載入成功則刷新歌詞。 4.在窗體添加一個Label顯示歌詞搜索歌詞:
Dictionary<string,string>lrcCollection;BooleanisLrc=false;//歌詞是否存在標(biāo)記變量
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. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 天津市房屋租賃合同書范本6篇
- 2025年煤炭供應(yīng)與合作合同協(xié)議范本
- 2025年建筑項(xiàng)目管理與執(zhí)行合同協(xié)議
- 2025年停車位租用合同標(biāo)準(zhǔn)文本
- 2025年企業(yè)正式工勞動合同書
- 2025年設(shè)備更新貸款擔(dān)保借款合同模板
- 2025年乳制品銷售合同范本
- 2025年個人信用消費(fèi)貸款合同標(biāo)準(zhǔn)文本
- 2025年醫(yī)院院長任期內(nèi)聘用合同書
- 2025年健身館合作經(jīng)營合同范本
- GB/T 7631.5-1989潤滑劑和有關(guān)產(chǎn)品(L類)的分類第5部分:M組(金屬加工)
- GB/T 41326-2022六氟丁二烯
- 注塑模具分類及結(jié)構(gòu)組成
- GB/T 14002-2008勞動定員定額術(shù)語
- 盆腔炎性疾病后遺癥-病因病機(jī)-(中醫(yī))
- 沁園春雪拼音版
- 傳染病防治法培訓(xùn)講義課件
- 法律方法階梯實(shí)用版課件
- KET詞匯表(英文中文完整版)
- 實(shí)驗(yàn) 探究彈簧彈力與形變量的關(guān)系2022-2023學(xué)年高一物理(人教版2019必修第一冊)
- 《三位數(shù)的加減法》單元分析
評論
0/150
提交評論