C# 音樂播放器制作(第三節(jié) 歌詞)_第1頁
C# 音樂播放器制作(第三節(jié) 歌詞)_第2頁
C# 音樂播放器制作(第三節(jié) 歌詞)_第3頁
C# 音樂播放器制作(第三節(jié) 歌詞)_第4頁
C# 音樂播放器制作(第三節(jié) 歌詞)_第5頁
已閱讀5頁,還剩24頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論