版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
姓名)姓名)專業(yè)技術(shù)職稱/學(xué)位)畢業(yè)設(shè)計(jì)說明書學(xué)生姓名學(xué)號(hào)學(xué)院計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)(軟件工程)題目音樂播放器的設(shè)計(jì)與實(shí)現(xiàn)指導(dǎo)教師摘要:隨著生活水平的提高,娛樂已成為非常主流的話題,人們不僅需要通過音樂陶冶情操,而且越來越多的人傾向于使用音樂、視頻等娛樂和放松自己,這大大促進(jìn)了媒體軟件的發(fā)展?本文旨在介紹研究常用數(shù)字音頻編碼和解碼的相關(guān)知識(shí),并結(jié)合VS2008編寫多功能音樂播放器,了解音樂播放器功能的實(shí)現(xiàn),掌握開發(fā)音樂播放器所需的相關(guān)知識(shí),采用了面向?qū)ο筌浖こ谭椒?,其開發(fā)主要包括應(yīng)用程序界面設(shè)計(jì)和后臺(tái)代碼運(yùn)行兩個(gè)方面,實(shí)現(xiàn)了多功能音樂播放器在計(jì)算機(jī)上的應(yīng)用,可以在很大程度上滿足用戶的需求?該系統(tǒng)主要具備:音樂播放控制、音樂文件控制、音量控制、下載控制、歌詞控制、進(jìn)度控制、音樂剪輯等功能模塊。關(guān)鍵字:音樂播放器,音頻編碼格式,TechSmithScreenCaptureCodec,FFmpeg,C#,VisualStudio2008Abstract:Withtheimprovementofstandardsofliving,entertainmenthasbecomeverymainstreamtopics,itisrequirednotonlybymusic,edifying,andasmoreandmorepeopletendtousemusic,videoandotherentertainmentandrelax,whichgreatlypromotedthedevelopmentofmediasoftware.Thisarticleaimstointroducetheresearchknowledgeofcommondigitalaudioencodinganddecoding,andinconjunctionwithVS2008preparedmultifunctionalmusicplayer,understandthefunctionsofthemusicplayertoacquirerelatedknowledgeneededtodevelopmusicplayer,object-orientedsoftwareengineeringmethodsareused,theirdevelopmentincludestheapplicationinterfacedesignandcodetoruninthebackgroundtrackstorealizemultifunctionalmusicplayerapplicationonyourcomputer,youcantoalargeextent,meettheneedsofusers.Thesystemmainlyincludes:amusicplayer,musicfilecontrol,volumecontrol,control,control,schedulecontroloflyrics,musiceditingfunctionmodule.Keywords:musicplayer,audiocodingformat,techsmithscreencapturecodec,c#,visualstudio2008目錄TOC\o"1-5"\h\z1前言-4-\o"CurrentDocument"1.1選題的背景及意義-5-\o"CurrentDocument"1.2網(wǎng)絡(luò)流行音樂播放器簡(jiǎn)介-5-\o"CurrentDocument"2系統(tǒng)相關(guān)技術(shù)及開發(fā)平臺(tái)介紹-6-\o"CurrentDocument"2.1開發(fā)應(yīng)用技術(shù)介紹-6-\o"CurrentDocument"2.2開發(fā)及運(yùn)行壞境-8-\o"CurrentDocument"3系統(tǒng)的分析-9-\o"CurrentDocument"3.1可行性分析-9-3.2常見的幾種音頻格式及其特點(diǎn)-10-3.3需求分析-11-4系統(tǒng)設(shè)計(jì)-13-4.1系統(tǒng)概要設(shè)計(jì)-13-4.2系統(tǒng)功能設(shè)計(jì)及描述-13-5系統(tǒng)功能實(shí)現(xiàn)-15-5.1歌曲添加模塊-16-5.2歌曲列表模塊-20-5.3播放控制模塊-21-5.4音量控制模塊-24-5.5進(jìn)度控制模塊-25-5.6滾動(dòng)字幕模塊-25-5.7歌曲下載模塊-30-5.8歌曲剪輯模塊-32-結(jié)論-36-參考文獻(xiàn)-37-致謝-38-前言選題的背景及意義音樂是情感的藝術(shù),美妙動(dòng)聽的音樂來源于情感,又潛移默化地影響情感,讓我們進(jìn)入瑰麗多彩的虛化與現(xiàn)實(shí)的意境之中。向上追溯百年或千年,直至最原始的音樂誕生之初,我相信音樂是為了傾訴而不是表現(xiàn),是自然的流露而不是技巧的夸張,是自我的沉醉而不是別人的掌聲。因?yàn)閻叟c感動(dòng),因?yàn)樯膱A滿與缺憾,因?yàn)樗枷氲撵`動(dòng)與創(chuàng)造。所以音樂不單在樂譜上,更在我們的心中。眾所周知任何格式的音樂都要通過音樂播放軟件播放,那么音樂播放軟件是通過什么樣的原理實(shí)現(xiàn)音樂的播放的呢?音樂播放器就是音頻解碼器的可視化操作界面,其實(shí)質(zhì)是針對(duì)各種音頻編碼格式的解碼器。例如APE格式調(diào)用的是Monkey'sAudio解碼器,F(xiàn)LAC格式調(diào)用的是FLAC解碼器,MP3調(diào)用的是lame解碼器。大部分音樂播放器都支持多種音樂格式的文件,這是因?yàn)檫@些播放器將不同的音頻解碼器打包起來,并制作統(tǒng)一的播放界面,從而讓使用者能夠方便地播放和聆聽各種音樂。伴隨著改革開放人們的生活水平普遍提高如今音樂已成為越來越多人的心靈寄托。隨著因特網(wǎng)在我國(guó)的普及隨之而來的是各式各樣的播放器軟件。盡管未來的音樂播放器將具備各種豐富多彩的功能,但作為一款多媒體軟件,音頻應(yīng)用才是最基本的,也是最能決定獲取用戶數(shù)量的因素?;谏鲜龇治鲆糍|(zhì)高,外形美觀,小巧且功能強(qiáng)大是未來播放器發(fā)展的主流趨勢(shì)。作為一個(gè)音樂愛好者兼軟件工程專業(yè)的一員若能編寫一款小巧功能強(qiáng)大的音樂播放器無疑是一件很有成就感的事情。網(wǎng)絡(luò)流行音樂播放器簡(jiǎn)介本小節(jié)舉例介紹目前網(wǎng)絡(luò)上流行的幾款音樂播放器,比如國(guó)產(chǎn)千千靜聽,酷狗音樂等。比較分析了它們各自特有的功能,此外還集中介紹了常見的幾種編碼格式以及它們各自的特點(diǎn)。千千靜聽千千靜聽是一款專為用戶定制的全新一代的免費(fèi)聽歌下載音樂播放器軟件。提供百萬(wàn)首歌曲免費(fèi)試聽下載,擁有最新、最流行的歌曲,提供第一時(shí)間音樂資訊;超高品質(zhì)(320kbps)的音樂歌曲下載,給耳朵更優(yōu)質(zhì)的享受;超炫的智能語(yǔ)音搜歌功能讓聽歌更加快捷;免費(fèi)的手機(jī)鈴聲歌曲下載;輕松拖拽歌詞,保持歌詞同步,支持邊聽邊唱;支持在線播放下載;流量限額提醒功能。軟件特色:1、高精度音質(zhì),完美還原聽覺;2、在線自動(dòng)下載歌詞,卡拉OK式同步顯示;3、軟件小、運(yùn)行快、支持眾多插件,自由編輯歌詞,由你做主;4、自由轉(zhuǎn)換MP3、WMA,APE,WAV等多種音頻格式,批量修改歌曲標(biāo)簽信息;5、個(gè)性化皮膚,多種視覺效果享受永遠(yuǎn)免費(fèi)??峁芬魳房峁芬魳肥侵袊?guó)領(lǐng)先的數(shù)字音樂交互服務(wù)提供商,互聯(lián)網(wǎng)技術(shù)創(chuàng)新的領(lǐng)軍企業(yè),致力于為互聯(lián)網(wǎng)用戶和數(shù)字音樂產(chǎn)業(yè)發(fā)展提供最佳的解決方案,公司的使命是成為亞太地區(qū)最大的數(shù)字音樂銷售推廣企業(yè)。自公司創(chuàng)建以來,一直在數(shù)字音樂發(fā)展上大膽嘗試,先后與幾十家唱片公司、版權(quán)管理機(jī)構(gòu)合作探索發(fā)展,積累了數(shù)萬(wàn)首數(shù)字音樂版權(quán),并在推動(dòng)廣范圍的跨行業(yè)、跨平臺(tái)合作上做出努力,在艱巨的全球音樂數(shù)字化進(jìn)程中做出自身的貢獻(xiàn)。全球最受歡迎的免費(fèi)中文播放軟件,流行音樂搜索平臺(tái)。軟件特色:1、迷你界面、界面更酷、絢麗流行;保持了WindowsVista和XP下的完美表現(xiàn),讓人耳目一新;2、卡拉0K酷狗獨(dú)創(chuàng)“卡拉0K”歌詞顯示,多種模式,邊聽邊唱,讓你聽歌更好玩;3、支持本地音樂播放完美音質(zhì),支持所有的音頻文件,本地文件拖放,同時(shí)支持網(wǎng)絡(luò)高速下載和本地播放;4、超強(qiáng)搜索和下載優(yōu)化歌曲搜索引擎,提高搜索準(zhǔn)確度;智能化節(jié)約帶寬,可關(guān)閉網(wǎng)絡(luò)功能;5、流行音樂資訊酷狗榜單家族、狗友推薦、酷吧、狗窩,最新流行音樂一網(wǎng)打盡,好聽的音樂來“找”你;6、個(gè)性化手機(jī)炫鈴DIY,讓擁有張揚(yáng)個(gè)性的鈴聲7、音頻格式我選擇我的歌曲我制作,音質(zhì)音效我決定8、收音機(jī)動(dòng)感音樂識(shí)別體驗(yàn)精選多家電臺(tái),收聽全球風(fēng)云變化,更能識(shí)別電臺(tái)中的音樂。系統(tǒng)相關(guān)技術(shù)及開發(fā)平臺(tái)介紹本系統(tǒng)是采用面向?qū)ο蟮能浖_發(fā)方法,基于微軟的VisualStudio.Net開發(fā)平臺(tái),以C#作為本系統(tǒng)的開發(fā)語(yǔ)言實(shí)現(xiàn)音樂播放器預(yù)定的需求功能。開發(fā)應(yīng)用技術(shù)介紹TechSmithScreenCaptureCodec簡(jiǎn)介TechSmithScreenCaptureCodec是TechSmith公司開發(fā)的CamtasiaStudio的一個(gè)組件,用于壓縮CamtasiaRecorder中的視頻文件,最大的優(yōu)點(diǎn)是可以保證圖像的質(zhì)量,截取的屏幕經(jīng)過多次壓縮,還能保證高質(zhì)量。比傳統(tǒng)的壓縮方式相比,優(yōu)勢(shì)十分明顯。CamtasiaStudio是TechSmith旗下一款專門錄制屏幕動(dòng)作的工具,無論在何種顏色模式下它都能輕松地對(duì)屏幕動(dòng)作進(jìn)行記錄,包括聲音、圖像、鼠標(biāo)的移動(dòng)軌跡等。此外,它還能夠?qū)σ纛l片段進(jìn)行編輯、壓縮、剪接從而實(shí)現(xiàn)多種音效的播放。它還能輸出包括Flash(SWF/FLV)、AVI、WMV、M4V、CAMV、MOV、RM、GIF動(dòng)畫等多種常見格式,是制作視頻演示的絕佳工具。其實(shí)CamtasiaStudio已不僅僅是一個(gè)錄屏工具了,它包括了5個(gè)組件:Camtasia錄像器、菜單制作器、音頻編輯器、劇場(chǎng)及播放器。本播放器在運(yùn)行之前需要安裝TechSmithScreenCaptureCodec組件,此組件會(huì)和系統(tǒng)一起打包發(fā)行,用戶也可以自己從網(wǎng)上下載更高版本的組件,只有安裝此組件才能實(shí)現(xiàn)播放器中的歌詞剪切功能。FFmpeg簡(jiǎn)介FFmpeg在Linux平臺(tái)下開發(fā),但它同樣也可以在其它操作系統(tǒng)環(huán)境中編譯運(yùn)行,包括Windows、MacOSX等。這個(gè)項(xiàng)目最早由FabriceBellard發(fā)起,現(xiàn)在由MichaelNiedermayer維護(hù)。許多FFmpeg的開發(fā)人員都來自MPlayer項(xiàng)目,而且當(dāng)前FFmpeg也是放在MPlayer項(xiàng)目組的服務(wù)器上。項(xiàng)目的名稱來自MPEG視頻編碼標(biāo)準(zhǔn),前面的"FF"代表"FastForward"。使用本播放器如果要對(duì)flv格式的文件進(jìn)行播放則要安裝FFmpeg。VisualStudio.Net集成開發(fā)環(huán)境簡(jiǎn)介.NET平臺(tái)為創(chuàng)建新一代分布式Web應(yīng)用提供了所有工具和技術(shù)(表示技術(shù)、構(gòu)件技術(shù)和數(shù)據(jù)庫(kù)技術(shù))。.NET平臺(tái)支持標(biāo)準(zhǔn)的Internet協(xié)議,包括HTTP(超文本傳輸協(xié)議)、XML(可擴(kuò)展標(biāo)記語(yǔ)言)和SOAP(簡(jiǎn)單對(duì)象訪問協(xié)議)等,從而實(shí)現(xiàn)了異構(gòu)系統(tǒng)間應(yīng)用程序的集成和通信,即用戶和供應(yīng)商可將在此平臺(tái)上開發(fā)的產(chǎn)品和服務(wù)無縫地嵌入自身的業(yè)務(wù)進(jìn)程和日?;顒?dòng)的信息架構(gòu)中。.NET平臺(tái)建立在開放系統(tǒng)結(jié)構(gòu)基礎(chǔ)之上,集Microsoft在軟件領(lǐng)域的主要技術(shù)成就于一身。.NET平臺(tái)包括一下4種核心技術(shù):.NETFramework、.NET企業(yè)服務(wù)器、構(gòu)件模塊服務(wù)和VisualStudio.NET。.NETFramework是.NET平臺(tái)核心中的核心,它為.NET平臺(tái)下應(yīng)用程序的運(yùn)行提供基本框架,如果把Windows操作系統(tǒng)比作一幢摩天大廈的地基,那么.NETFramework就是摩天大廈中由鋼筋和混凝土搭成的框架。.NET企業(yè)服務(wù)器是Microsoft為企事業(yè)單位提供的技術(shù)服務(wù)中的一部分,它包括MicrosoftBizTalkServer、MicrosoftCommerceServer、HostIntegrationServer、ExchangeServer、SQLServer等技術(shù)的開發(fā)工具包。構(gòu)建模塊服務(wù)主要是Microsoft提供的COM+組件服務(wù)和XMLWeb服務(wù)技術(shù),利用構(gòu)建模塊服務(wù)開發(fā)應(yīng)用程序模塊,可以迅速地組裝一個(gè)功能完備的軟件。VisualStudio.NET是.NET平臺(tái)的主要開發(fā)工具,由于.NET平臺(tái)是建立在開放系統(tǒng)結(jié)構(gòu)基礎(chǔ)之上的,因此應(yīng)用程序開發(fā)人員也可以使用其它開發(fā)工具。C#語(yǔ)言簡(jiǎn)介C#(#原為音樂標(biāo)記,讀Sharp)是一種面向?qū)ο蟮木幊陶Z(yǔ)言,主要用于開發(fā)可以運(yùn)行在.NET平臺(tái)上的應(yīng)用程序。C#語(yǔ)言是微軟公司開發(fā)的基于.NETFramework的一種編程語(yǔ)言,它繼承了C/C++優(yōu)良傳統(tǒng),又借鑒了Java的很多特點(diǎn)。微軟對(duì)C#的定義是:“C#是從C和C++派生出來的一種簡(jiǎn)單、現(xiàn)代、面向?qū)ο蠛皖愋桶踩木幊陶Z(yǔ)言。C#主要是從C/C++編程語(yǔ)言家族移植過來的,C和C++的程序員能夠很快熟悉它。C#試圖結(jié)合VisualBasic的快速開發(fā)能力和C++的強(qiáng)大靈活的能力?!雹艭#是2000年6月微軟公司發(fā)布的一種全新編程語(yǔ)言,是由AndersHejlsberg和他的微軟開發(fā)團(tuán)隊(duì)所設(shè)計(jì),具體如下特點(diǎn):?通用,支持跨平臺(tái)。C#程序的客戶端可以運(yùn)行在不同類型的客戶端上,如PDA、手機(jī)等PC裝置。簡(jiǎn)單,主要體現(xiàn)在垃圾收集、指代等特性上。垃圾收集機(jī)制將減輕開發(fā)人員對(duì)內(nèi)存的管理負(fù)擔(dān),而指代功能更是可以讓開發(fā)者不經(jīng)過內(nèi)部類就調(diào)用函數(shù)。利用C#的這些功能,可以使開發(fā)者通過較少的代碼來實(shí)現(xiàn)更強(qiáng)大的應(yīng)用程序,并且能夠更好地避免錯(cuò)誤發(fā)生,從而縮短了應(yīng)用系統(tǒng)的開發(fā)周期。?面向?qū)ο笤O(shè)計(jì),C#具有封裝、繼承和多態(tài)等面向?qū)ο蟪绦蛘Z(yǔ)言的特征。與Web應(yīng)用緊密的結(jié)合,C#支持絕大多數(shù)的Web標(biāo)準(zhǔn),如HTML、XML、SOAP等。這是C#最大的特點(diǎn),使用它可以輕松開發(fā)各種企業(yè)級(jí)應(yīng)用平臺(tái)。安全性機(jī)制,消除軟件開發(fā)中常見錯(cuò)誤(如語(yǔ)法錯(cuò)誤),.NET提供的垃圾回收器能夠幫助開發(fā)者有效的管理內(nèi)存資源。?兼容性,C#遵循.NET的公共語(yǔ)言規(guī)范(CLS),能夠保證與其它語(yǔ)言開發(fā)組件兼容。?靈活的版本處理技術(shù),C#在語(yǔ)言本身內(nèi)置了版本控制功能,開發(fā)人員可以更加容易地開發(fā)和維護(hù)。C#提供了完善的錯(cuò)誤和異常觸發(fā)機(jī)制。開發(fā)及運(yùn)行壞境硬件平臺(tái):CPU奔騰雙核(主頻2.0GHz)內(nèi)存1G32位PC機(jī)160G硬盤軟件平臺(tái):操作系統(tǒng):WindowsXP\Win7\Win8開發(fā)工具:VisualStudio2008。本軟件占用系統(tǒng)空間小,能滿足用戶對(duì)常見音頻格式文件的播放要求,還具有歌曲、歌詞下載等功能,界面美觀交互性好,易于用戶理解操作,且不依賴于其它軟件,消耗資源少易維護(hù),程序有較好的健壯性和正確性。運(yùn)行該軟件所需的壞境配置不高,能滿足絕大多數(shù)用戶的需求。系統(tǒng)的分析可行性分析可行性研究(feasibilitystudy)的目的,是弄清楚待開發(fā)的項(xiàng)目是不是可能實(shí)現(xiàn)和值得進(jìn)行,通常由系統(tǒng)分析員完成,并需寫出可行性論證報(bào)告。如結(jié)論認(rèn)為可行,即可制定項(xiàng)目實(shí)施計(jì)劃,同時(shí)開始軟件開發(fā);如結(jié)論認(rèn)為不可行,則應(yīng)提出終止該項(xiàng)目的建議??尚行哉撟C其實(shí)是在高層次上進(jìn)行的一次大大簡(jiǎn)化了的需求分析與設(shè)計(jì)。但它的目的不是去解決用戶提出的問題,僅是確定這項(xiàng)開發(fā)是否值得進(jìn)行,分析它存在哪些風(fēng)險(xiǎn)。換句話來說,在投入大量精力前研究成功的可能性,減小可能出現(xiàn)的風(fēng)險(xiǎn)。即使研究的結(jié)論是不值得進(jìn)行,所花的精力也并不浪費(fèi),因?yàn)樗苊饬艘淮胃蟮睦速M(fèi)。下面我們將根據(jù)本系統(tǒng)的特點(diǎn)具體描述以下可行性分析。[3]經(jīng)濟(jì)可行性開發(fā)一個(gè)基于計(jì)算機(jī)的系統(tǒng)主要是為了獲取較好的經(jīng)濟(jì)效益和社會(huì)效益。因此對(duì)待開發(fā)系統(tǒng)的經(jīng)濟(jì)可行性論證就成為可行性研究的重要內(nèi)容。成本-效益分析可用于評(píng)估系統(tǒng)的經(jīng)濟(jì)合理性,給出系統(tǒng)開發(fā)的成本估算,并將估算的成本與獲得的利潤(rùn)進(jìn)行比對(duì),從經(jīng)濟(jì)的角度論證待開發(fā)系統(tǒng)是否可行。一般來說,基于計(jì)算機(jī)系統(tǒng)的成本主要由4部分組成:購(gòu)置并安裝軟硬件及有關(guān)設(shè)備的費(fèi)用。系統(tǒng)開發(fā)費(fèi)用。系統(tǒng)安裝、運(yùn)行和維護(hù)費(fèi)用。人員培訓(xùn)費(fèi)用。結(jié)合畢業(yè)設(shè)計(jì)的整個(gè)開發(fā)過程可知開發(fā)音樂播放器所需的全部軟件平臺(tái)都是免費(fèi)的,所以在經(jīng)濟(jì)上是完全可行的。技術(shù)可行性技術(shù)可行性是可行性研究的關(guān)鍵內(nèi)容。由于系統(tǒng)分析和定義過程與系統(tǒng)技術(shù)可行性評(píng)估過程同時(shí)進(jìn)行,此時(shí)系統(tǒng)的功能、性能和目標(biāo)的不確定性會(huì)給技術(shù)可行性論證帶來許多困難。因此,技術(shù)可行性研究往往是系統(tǒng)開發(fā)過程中難度最大的工作。該音樂播放器是用C#語(yǔ)音開發(fā)的,調(diào)試比較簡(jiǎn)單,所需的計(jì)算機(jī)硬件配置要求不高,一般PC機(jī)完全能滿足開發(fā)要求。軟件方面:基于微軟.net開發(fā)平臺(tái)使用C#面向?qū)ο蟮木幊陶Z(yǔ)音,它開發(fā)速度快,簡(jiǎn)單易用,技術(shù)成熟,軟件也容易從網(wǎng)上獲得,完全能滿足開發(fā)需求。法理可行性法律可行性主要研究新系統(tǒng)的開發(fā)和使用是否會(huì)侵犯他人權(quán)益,是否觸犯了國(guó)家的法律法規(guī)。本次的畢業(yè)設(shè)計(jì)是由本人獨(dú)立完成,開發(fā)的系統(tǒng)不會(huì)侵犯任何人的權(quán)益,所用的軟件都是通過合法途徑獲取,因此完全符合法律法規(guī)。綜上所述,本系統(tǒng)的開發(fā)從經(jīng)濟(jì)上、技術(shù)上、法律上都是完全可行的。常見的幾種音頻格式及其特點(diǎn)MP3格式:MP3的全稱是MovingPictureExpertsGroupAudioLayerIII。MP3是Fraunhofer-IIS研究所的杰出成果。在MP3出現(xiàn)前,以有損方式進(jìn)行音頻編碼最好的效果能夠壓縮到4:1。而強(qiáng)大的MP3可以實(shí)現(xiàn)12:1的高壓縮比,正是因?yàn)檫@種性能的巨大提升,并且在實(shí)現(xiàn)高壓縮比的同時(shí)還能夠保持較好的音質(zhì),所以使得MP3迅速地流行起來。MP3是世界上第一個(gè)實(shí)用化的有損壓縮編碼方案,幾乎所有的播放軟件都支持它,也曾今產(chǎn)生了許多第三方的編碼工具。MP3編碼質(zhì)量分為:固定碼率(CBR),平均碼率(ABR)和動(dòng)態(tài)碼率(VBR)。⑷特點(diǎn):音質(zhì)好,壓縮比比較高,被大量軟件和硬件支持,應(yīng)用廣泛。WMA格式:WMA就是WindowsMediaAudio編碼后的文件,它是微軟公司推出的與MP3格式齊名的一種新的音樂格式。WMA在壓縮比和音質(zhì)方面都超過了MP3,更是遠(yuǎn)勝于RA(RealAudio),即使在較低的采樣頻率下也能產(chǎn)生較好的音質(zhì)。WMA針對(duì)的不是單機(jī)市場(chǎng),而是網(wǎng)絡(luò)!競(jìng)爭(zhēng)對(duì)手就是網(wǎng)絡(luò)媒體市場(chǎng)中著名的RealNetworks。WMA格式有非常高的壓縮率,一般為1:18,因此它的文件所占空間比相應(yīng)的MP3文件少一半。這是通過提高音質(zhì)、減少數(shù)據(jù)流量的方法來實(shí)現(xiàn)更高的壓縮率的。此外它還有很強(qiáng)的防盜版功能。特點(diǎn):低碼率下的音質(zhì)表現(xiàn)難有對(duì)手。[4]WAV格式:WAV是微軟Windows系統(tǒng)本身自帶的音頻格式,因?yàn)閃indows系統(tǒng)的普及性,此格式已經(jīng)成了當(dāng)前最主流的音頻格式之一。WAV文件里面存放的每一塊數(shù)據(jù)都有自己獨(dú)立的標(biāo)識(shí),通過這些標(biāo)識(shí)可以告訴用戶究竟是什么數(shù)據(jù)。WAV格式的設(shè)計(jì)非常靈活,該格式本身與任何媒體數(shù)據(jù)都不沖突,只要有軟件支持,我們甚至可以在WAV格式里面存放圖像。在Windows平臺(tái)上,通過ACM結(jié)構(gòu)及相應(yīng)的驅(qū)動(dòng)程序,例如CODEC編碼/解碼器,可以在WAV文件中存放超過20種的壓縮格式,比如ADPCM、GSM、CCITTG711、G.723和MP3等。[4]特點(diǎn):音質(zhì)非常好,被大量軟件所支持。RA格式:RA格式是RealNetworks公司所開發(fā)的一種新型流式音頻RealAudio文件格式。這是網(wǎng)上接觸得非常多的一種格式,大部分音樂網(wǎng)站的在線試聽都采用了RealAudio,這種格式完全針對(duì)的就是網(wǎng)絡(luò)上的媒體市場(chǎng),支持非常豐富的功能。最大的優(yōu)點(diǎn)就是這種格式可以根據(jù)聽眾的帶寬來控制自己的碼率,在保證流暢的前提下盡可能提高音質(zhì)。[4]特點(diǎn):碼率可控,支持多種音頻編碼,可邊讀邊放。需求分析軟件需求是指用戶對(duì)目標(biāo)軟件系統(tǒng)在功能、性能、行為、設(shè)計(jì)約束等方面的期望。需求分析就是通過對(duì)應(yīng)用問題及其壞境的分析與理解采用一系列的分析方法和技術(shù)將用戶的需求逐步精確化、完全化、一致化,最終形成需求規(guī)模說明文檔的過程。本節(jié)將從不同的角度描述系統(tǒng)的需求。播放器的基本控制需求在著手開發(fā)系統(tǒng)之前首先要明確該系統(tǒng)應(yīng)該實(shí)現(xiàn)的一些最基本的功能,然后逐步細(xì)化,為每個(gè)功能創(chuàng)建一個(gè)模塊,再對(duì)各個(gè)模塊進(jìn)行開發(fā)。通過分析我們得出一款音樂播放器的基本控制如圖3-1所示:
歌曲添加播放暫停下一曲音量控制歌曲下載歌詞顯示進(jìn)度控制上一曲歌曲添加播放暫停下一曲音量控制歌曲下載歌詞顯示進(jìn)度控制上一曲圖3-1播放器基本控制圖功能需求功能需求規(guī)定開發(fā)人員必須在產(chǎn)品中實(shí)現(xiàn)的軟件功能,用戶利用這些功能來完成任務(wù),滿足業(yè)務(wù)需求。功能需求有時(shí)也被稱作行為需求(behavioralrequirement),因?yàn)榱?xí)慣上總是用“應(yīng)該”對(duì)其進(jìn)行描述。功能需求描述是開發(fā)人員需要實(shí)現(xiàn)什么。功能需求定義一個(gè)軟件系統(tǒng)或組件的功能,也是一個(gè)系統(tǒng)需提供的功能及服務(wù)。功能可以用一組輸入、行為及輸出的組合來表示。功能需求可以是計(jì)算、技術(shù)細(xì)節(jié)、數(shù)據(jù)處理或其他說明系統(tǒng)希望達(dá)成功能的內(nèi)容。功能需求會(huì)以非功能性需求(或是質(zhì)量需求)為其基礎(chǔ)。結(jié)合音樂播放器所要實(shí)現(xiàn)的內(nèi)容,我們列出用戶操作的模塊,其中每個(gè)模塊對(duì)應(yīng)一個(gè)功能。用戶啟動(dòng)程序進(jìn)入主界面,用戶可以通過添加模塊添加本地歌曲,可以一首一首添也可以添加整個(gè)歌曲文件夾。通過播放列表用戶可以實(shí)現(xiàn)對(duì)歌曲的查找、播放、暫停、音量調(diào)節(jié)、靜音。通過歌詞模塊可以實(shí)行歌曲歌詞的顯示、比對(duì)、歌詞字體選擇。此外用戶還可以聯(lián)網(wǎng)下載歌詞、歌曲。其功能模塊時(shí)序圖如下3-2所示:系統(tǒng)設(shè)計(jì)系統(tǒng)概要設(shè)計(jì)在需求明確、準(zhǔn)備開始編碼之前,要做概要設(shè)計(jì)。概要設(shè)計(jì)的主要任務(wù)是把需求分析得到的DFD轉(zhuǎn)換為軟件結(jié)構(gòu)和數(shù)據(jù)結(jié)構(gòu)。設(shè)計(jì)軟件結(jié)構(gòu)的具體任務(wù)是:將一個(gè)復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面等。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)包括數(shù)據(jù)特征的描述、確定數(shù)據(jù)的結(jié)構(gòu)特性、以及數(shù)據(jù)庫(kù)的設(shè)計(jì)。概要設(shè)計(jì)有多種方法。在早期有模塊化方法、功能分解方法;在60年代后期提出了面向數(shù)據(jù)流和面向數(shù)據(jù)結(jié)構(gòu)的設(shè)計(jì)方法;近年來又提出面向?qū)ο蟮脑O(shè)計(jì)方法等。本系統(tǒng)采用模塊化軟件設(shè)計(jì),自頂向下逐層把軟件系統(tǒng)劃分成若干模塊。每個(gè)模塊完成一個(gè)特定的功能,最后將所有模塊按照某種方法組合成一個(gè)整體,達(dá)到整個(gè)播放器所要求的功能。系統(tǒng)功能設(shè)計(jì)及描述本音樂播放器不僅要實(shí)現(xiàn)對(duì)一些常見的音頻格式文件的播放,而且還要有友好的用戶界面。其最終設(shè)計(jì)目標(biāo)是:實(shí)現(xiàn)對(duì)多種音頻格式文件的播放、實(shí)現(xiàn)對(duì)歌詞的滾動(dòng)播放及當(dāng)前播放曲目長(zhǎng)度顯示、顯示歌曲文件信息、實(shí)現(xiàn)靜音和音量控制;播放器軟件占用系統(tǒng)資源少、運(yùn)行平臺(tái)要求不高、界面美觀舒適、操作簡(jiǎn)單、易維護(hù)、高穩(wěn)定性、,能滿足用戶的常見需求。主要?jiǎng)澐譃橐韵缕邆€(gè)功能模塊,每個(gè)功能模塊的作用描述如下:>播放控制:控制歌曲的播放狀態(tài),如:播放、暫停、上一曲、下一曲。播放過的歌曲按播放順序排列在播放列表中,每次退出程序、重啟播放器后播放列表中的播放記錄會(huì)自動(dòng)保存不會(huì)清空。>文件控制:主要用來打開本地播放文件。通過研究音頻編碼解碼的相關(guān)技術(shù),了解音頻編碼解碼的原理和過程,本音樂播放器支持常見音頻格式文件播放如:MP3、WMA、WAV等。可以單個(gè)曲目添加,也可以將整個(gè)文件夾中的曲目全部添加,實(shí)現(xiàn)歌曲文件添加的多樣化;此外還可以對(duì)播放列表進(jìn)行清空,對(duì)曲目的播放順序進(jìn)行控制;當(dāng)播放列表中曲目過多時(shí),可以從播放列表中快速搜索到需要播放的歌曲。還有對(duì)播放列表進(jìn)行控制如:打開文件所在目錄、移除列表、刪除文件、顯示歌曲文件的相關(guān)信息如:歌手、專輯等。>歌詞控制:播放音樂時(shí)控制是否顯示歌曲歌詞,若歌詞存在則同步滾動(dòng)顯示歌詞,若歌詞不存在則可聯(lián)網(wǎng)下載歌詞。此外還可以對(duì)歌詞字體進(jìn)行設(shè)置。>進(jìn)度控制:顯示當(dāng)前歌曲的播放總時(shí)長(zhǎng)和已播放時(shí)長(zhǎng),可以通過鼠標(biāo)調(diào)整歌曲的播放進(jìn)度,實(shí)現(xiàn)歌曲的跳躍式播放。其實(shí)現(xiàn)方式是通過進(jìn)度條和時(shí)間的同步顯示。>聲音控制:調(diào)整歌曲音量的大小,顯示是否靜音。>下載控制:可以聯(lián)網(wǎng)下載自己喜歡的歌曲、歌詞。若不知道歌曲名稱則可以按歌手名查找歌曲下載,若知道歌曲名則可直接輸入名稱進(jìn)行下載,可以在下載進(jìn)度列表中查看下載狀態(tài)。>音樂剪切:對(duì)音樂文件進(jìn)行剪切。添加當(dāng)前路徑,對(duì)想要的歌曲進(jìn)行播放,在歌曲播放過程中你可以在任何地方設(shè)置一個(gè)起點(diǎn),然后,再設(shè)置一個(gè)終點(diǎn)?!霸嚶牳枨本褪前涯氵x出來的這一段播放一遍,看是不是你要的那一段,有時(shí)候可以早開始了幾秒或者早結(jié)束了幾秒,這個(gè)時(shí)候可以直接在起點(diǎn)和終點(diǎn)的地方進(jìn)行調(diào)整。然后在這個(gè)窗口的上面有個(gè)“保存歌曲”,就可以把你選出來的這段音樂保存起來了。我們可以通過歌曲剪切功能截取自己喜歡的音樂片段,來做為自己的手機(jī)鈴聲。其具體功能模塊如圖4-1所示:
歌詞歌字詞體比設(shè)對(duì)置圖4-1音樂播放器功能模塊圖系統(tǒng)功能實(shí)現(xiàn)根據(jù)上一章對(duì)系統(tǒng)各個(gè)模塊的分析,本節(jié)主要講述如何具體實(shí)現(xiàn)這些模塊功能。幾乎所有的Windows程序都離不開窗體,Windows窗體應(yīng)用程序是Windows下進(jìn)行軟件開發(fā)的基礎(chǔ)。在C#中,通過VisualStudio2008開發(fā)平臺(tái)模版,可以自動(dòng)生成多種基于Windows的應(yīng)用程序框架,主要包括基于.NETFramework的Windows窗體應(yīng)用程序、Windows服務(wù)應(yīng)用程序。最常用的是Windows窗體應(yīng)用程序。在Windows窗體應(yīng)用程序中,有窗體(Form)和控件(Contro1)兩個(gè)基本概念。窗體是控件的容器,控件是應(yīng)用程序顯示數(shù)據(jù)或接受數(shù)據(jù)輸入的相對(duì)獨(dú)立的用戶界面元素。.NET類庫(kù)提供了豐富的窗體相關(guān)類,包括窗體、按鈕、狀態(tài)欄、工具欄、菜單、文本框、列表等多種不同的界面元素;此外還提供各種控件、組件、容器。通過這些界面元素的不同組合,可以設(shè)計(jì)出友好的用戶界面。對(duì)于軟件開發(fā)中要用到的圖片可以自己繪制,相關(guān)控件可以調(diào)用類庫(kù),從而設(shè)計(jì)出外形美觀的界面。但這也做相當(dāng)費(fèi)時(shí),由于畢業(yè)設(shè)計(jì)的時(shí)間有限,圖片都從網(wǎng)上下載,并做稍微處理,所以美觀方面有一定欠缺,待以后有時(shí)間慢慢改進(jìn)。此外界面是由窗體、控件拖放組成,大部分代碼由視圖設(shè)計(jì)器自動(dòng)生成,無需太多改動(dòng),因此這一部分不再詳細(xì)闡述,下面將主要介紹主要功能模塊的核心代碼實(shí)現(xiàn)。歌曲添加模塊很多的應(yīng)用程序都有打開文件功能,本程序使用OpenFi1eDia1og組件,用來打開本地磁盤上的一個(gè)或多個(gè)文件,并添加到文件播放列表中。添加歌曲文件為了趕上社會(huì)的潮流,我們經(jīng)常會(huì)從網(wǎng)上下載最熱門的音樂,本模塊功能就是實(shí)現(xiàn)添加本地歌曲或已下載到電腦的最新歌曲到播放列表,同時(shí)更新播放列表,使我們能及時(shí)欣賞到自己喜歡的音樂。其具體代碼如下:privatevoidAddSong_Click(objectsender,EventArgse){ofd.Filter二"音樂文件(*.wmv,*.mp3,*.wav)|*.wmv;*.mp3;*.wav||Allfiles(*.*)|*.*";ofd.InitialDirectory=Application.StartupPath;ofd.FileName="";ofd.RestoreDirectory=false;ofd.Title="添加音樂文件";if(ofd.ShowDialog()==DialogResult.OK){stringstrLongPath=ofd.FileName;WriteFileByLongPath(strLongPath);}privatevoidWriteFileByLongPath(stringstrLongPath){intb=strLongPath.LastIndexOf("\\");stringstrShortPathWithExtension=strLongPath.Substring(b+1);StreamWritersw=newStreamWriter("list.ini",true);stringextension=strShortPathWithExtension.Substring(strShortPathWithExtension.Length-3);if(extension.ToLower()=="wmv"||extension.ToLower()=="mp3"||extension.ToLower()=="wav"){stringstrShortPathWithoutExtension=strLongPath.Substring(b+1,strShortPathWithExtension.Length-4);Mp3mp3=newMp3(strLongPath);if(!(String.IsNullOrEmpty(mp3.Artist)||String.IsNullOrEmpty(mp3.Title))){//獲取成功的結(jié)果(歌手名-歌曲名)strShortPathWithoutExtension=mp3.Artist.Trim()+"-"+mp3.Title.Trim();}//否則原文件名if(!this.myListBox.Items.Contains(strShortPathWithoutExtension)){//不包含songList.Add(strShortPathWithoutExtension);Imageimage=getImageByArtistOrSongName(mp3.Artist,strShortPathWithoutExtension);imageList.Add(image);this.myListBox.Items.Add(strShortPathWithoutExtension);this.myListBox.songList=songList;this.myListBox.imageList=imageList;sw.WriteLine(strShortPathWithoutExtension);sw.WriteLine(strLongPath);//寫入全路徑}}sw.Flush();sw.Close();}5.1.2添加歌曲文件夾當(dāng)我們要欣賞歌曲專輯時(shí),可能要添加的文件比較多,顯然單曲添加比較麻煩,這時(shí)我們就可以使用OpenFileDialog組件的Multiselect屬性和Filenames屬性實(shí)現(xiàn)整個(gè)文件夾的添加,同時(shí)更新播放列表。代碼如下:privatevoidtsmiAddSongFolder_Click(objectsender,EventArgse){if(fbd.ShowDialog()==DialogResult.OK){stringstr=fbd.SelectedPath;DirectoryInfor=newDirectoryInfo(str);GetAllFiles(r);}}publicvoidGetAllFiles(DirectoryInfodir){FileSystemInfo[]fileinto=dir.GetFileSystemInfos();foreach(FileSystemInfoiinfileinto){if(iisDirectoryInfo){GetAllFiles((DirectoryInfo)i);}else{stringstrLongPath=i.FullName;WriteFileByLongPath(strLongPath);}}}privatevoidtsmiSearch_Click(objectsender,EventArgse){if(this.mySearchPanel.boolSearchShow){//已經(jīng)打開,則關(guān)閉this.mySearchPanel.close();}else{this.mySearchPanel.boolSearchShow=true;this.mySearchPanel.lb=this.myListBox;this.mySearchPanel.copyValueList();}initialSearchPanel();添協(xié)音樂文科:.?血卜Debug?songT好I蹬箕8宙A—-J—-3--#箱創(chuàng)托的藝耒B輙軻胡底臥-童話生“2+EJLSU冋?qǐng)D片?董小琥-砂目然,”3董琥?-夢(mèng)屋時(shí)分…St迅事卞我斬梁-問.mpH9問Mn』旨樂?迥歩神稅園”mp32DownByTheSalleyGa...JoanieMadder丹計(jì)算機(jī)三爲(wèi)本垃鑑盤(C:).1TOOLS(D:)―DATA〔叩.iBACKUP(F:j/1pur文伴呂四:醪神秘回,EpS音樂文件L.mpSrwnmCiffav)〒取消打幵回取消圖5-1打開文件5.2歌曲列表模塊播放列表主要用來顯示要播放歌曲的信息,如歌手、照片、曲名。在這里我們使用ListBox控件來實(shí)現(xiàn)相關(guān)功能。詳細(xì)代碼如下:this.myListBox.Anchor=((System.Windows.Forms.AnchorStyles)(((System.Windows.Forms.AnchorStyles.Top|System.Windows.Forms.AnchorStyles.Bottom)|System.Windows.Forms.AnchorStyles.Left)));this.myListBox.DrawMode=System.Windows.Forms.DrawMode.OwnerDrawVariable;this.myListBox.FormattingEnabled=true;this.myListBox.Location二newSystem.Drawing.Point(2,115);this.myListBox.Name=""myListBox"";this.myListBox.Size=newSystem.Drawing.Size(302,354);this.myListBox.Tablndex=0;this.myListBox.MouseDown+=newSystem.Windows.Forms.MouseEventHandler(this.myListBox_MouseDown);
privatevoidmyListBox_MouseDown(objectsender,MouseEventArgse){if(this.myListBox.thisIndex!=-1){if(e.Button二二System.Windows.Forms.MouseButtons.Right){this.myListBox.ContextMenuStrip=this.cmsListBox;}}}4梁靜茹-間4梁靜茹-間1ft小謙-站一順其自婕2Ju:inieMaiiden-DliwtlEyTheS:=lL1eyG:±fiierLZ3架靜茹-夢(mèng)睡時(shí)分E'A1estli£e-MyLove61+1卓克童'T組合-等畫走了以啟85503.Com參勢(shì)葛品質(zhì)音樂網(wǎng)-5583.Com繆整SMariakrredondo晉持英諸聽力爰-Burnin.g10NobodyWonder<rirl511耳七冉也浚有像找毘祥的人了呼12劃若央-聽說Y13林俊杰-畫不合絕跡14加木年華-完美世界王題曲15kkonft.?瑋柏-Ba彷th.Ton16胡眈-為月的南n訐茹丟-—簾幽夢(mèng)18阿桑-寂苒在唱談19云◎泣-羞淚20傳奇21Zacure-養(yǎng)折蘭畫眉口駕曲錄音盈檻外的卿藏(許茹蕓齊-05獨(dú)角啟23加勒比洱益-he11sa.pirate74因誰(shuí)一匚口FiVihntmR1up圖5-2播放列表5.3播放控制模塊播放是音樂播放器最重要的功能。本程序使用WindowsMediaPlayer命名空間中定
義的屬性和方法來實(shí)現(xiàn)歌曲的播放、暫停、上下去切換等。其核心代碼如下:privatevoidinitialBtn(){if(playStatue==MediaPlayer.PlayStatue.播放){//正在播放,暫停圖片btnPlay.Image=Image.FromFile("pic\\pause.bmp");}elseif(playStatue二二MediaPlayer.PlayStatue.暫停||playStatue==MediaPlayer.PlayStatue.停止){//開始播放圖片btnPlay.Image=Image.FromFile("pic\\play.bmp");}if(this.boolVolumn){this.btnVolumn.Image=Image.FromFile("pic\\02.gif");}elsethis.btnVolumn.Image=Image.FromFile("pic\\01.gif");}privatevoidnextSongPlay(){//下一曲if(playStyle==MediaPlayer.PlayStyle.隨機(jī)播放){//選擇隨機(jī)播放時(shí)就產(chǎn)生一個(gè)隨機(jī)數(shù)組,播放記錄,根據(jù)數(shù)組,上一曲下一曲都有用if(randomIndex+1>=randomList.Count){randomSongPlay();}elsethis.myListBox.doubleClickIndex=(int)randomList[++randomIndex];}elseif(playStyle==MediaPlayer.PlayStyle.順序播放){this.myListBox.doubleClickIndex++;if(this.myListBox.doubleClickIndex>=this.myListBox.Items.Count){playStatue=MediaPlayer.PlayStatue.停止;this.myListBox.doubleClickIndex=this.myListBox.Items.Count-1;stop();initialBtn();return;}}else{//下一曲,如果到底,將播放第一首歌曲,全部循環(huán)this.myListBox.doubleClickIndex++;if(this.myListBox.doubleClickIndex>=this.myListBox.Items.Count){//轉(zhuǎn)第一首this.myListBox.doubleClickIndex=0;}}btnChangeSong();initialBtn();}privatevoidlastSongPlay(){if(playStyle==MediaPlayer.PlayStyle.隨機(jī)播放&&randomindex>=1){this.myListBox.doubleClickIndex=(int)randomList[--randomIndex];}elseif(playStyle==MediaPlayer.PlayStyle.順序播放){this.myListBox.doubleClickIndex--;if(this.myListBox.doubleClickIndex<=-1){this.myListBox.doubleClickIndex=0;playStatue=MediaPlayer.PlayStatue.停止;stop();initialBtn();return;}}else{this.myListBox.doubleClickIndex--;if(this.myListBox.doubleClickIndex<=-1){//轉(zhuǎn)最后一首this.myListBox.doubleClickIndex=this.myListBox.Items.Count-1;}}btnChangeSong();}音量控制模塊通過調(diào)節(jié)音量大小來達(dá)到歌曲播放的最佳狀態(tài)??梢哉{(diào)用API函數(shù)SENDMESSAGEAPPCOMMAND_VOLUME_MUTE和TrackBar類來實(shí)現(xiàn)音量控制。代碼如下:privatevoidbtnVolumn_Click(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+"\\INI.ini";if(this.boolVolumn){player.setAudioOnOff("off");this.boolVolumn=false;IniUtility.WriteIniKey("Player","boolVolumn","0");}else{player.setAudioOnOff("on");this.boolVolumn=true;IniUtility.WriteIniKey("Player","boolVolumn","1");}initialBtn();}privatevoidmyTBVolumn_Scroll(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+"\\INI.ini";intvalue=this.myTBVolumn.Value;player.SetVolume(value);IniUtility.WriteIniKey("Player","Volume",value.ToString());}進(jìn)度控制模塊進(jìn)度控制用來顯示歌曲的播放進(jìn)度,也可以通過鼠標(biāo)拖動(dòng)實(shí)現(xiàn)歌曲的任意播放,通過把當(dāng)前播放長(zhǎng)度和進(jìn)度條同步結(jié)合起來實(shí)現(xiàn)。此外還能夠顯示歌曲的播放時(shí)長(zhǎng),這是通過Timer組件的Tick事件實(shí)現(xiàn)。其主要代碼如下:privatevoidmyTBPlayProcess_MouseDown(objectsender,MouseEventArgse){player.setPlayPosition(this.myTBPlayProcess.Value);this.lblTime.LblCurSecond=this.myTBPlayProcess.Value;}privatevoidchangeCurSecond(intvalue){this.myTBPlayProcess.Value=value;this.showLrc.curPlayTimeSecond=value;}滾動(dòng)字幕模塊有很多音樂播放器都可以實(shí)現(xiàn)一邊聽音樂一邊看歌詞的功能,這樣做可以幫助用戶更好地欣賞音樂,同時(shí)還可以強(qiáng)化對(duì)歌詞的記憶進(jìn)而達(dá)到背誦,為聽者以后獨(dú)唱歌曲做鋪墊。此外還可以對(duì)歌詞字體進(jìn)行設(shè)置,從而達(dá)到視覺和聽覺的雙重享受。其核心代碼如下:publicpartialclassShowLrc:Form{//歌詞文件名就是ListBox中項(xiàng)的名稱publicShowLrc(){InitializeComponent();privateFontfont=newFont("華文行楷",25.0f,FontStyle.Bold);publicintcurPlayTimeSecond=0;//lblTime傳遞過來播放的秒數(shù)(用于歌詞提前和延后),因?yàn)橛袝r(shí)候獲取時(shí)間不準(zhǔn)確publicboolisPlay=false;privatevoidShowLrc_Load(objectsender,EventArgse){initialBtn();}publicvoidinitial(){graphics=this.CreateGraphics();time.Interval=100;time.Tick+=newEventHandler(time_Tick);initialINI();}voidtimer_Tick(objectsender,EventArgse){clearPanel();if(string.IsNullOrEmpty(strLrcContext)){drawString(“未找到歌詞");}else{drawString(regc(curPlayTimeSecond));}}publicvoidclearContext(){curFileName="";subgc=null;mylist.Clear();}privatevoidclearPanel(){graphics.Clear(Color.Maroon);}privatevoidsplit(){subgc=strLrcContext.Split(newchar[]{'[',']','\r','\n'});//subgc存儲(chǔ)歌詞文件中所有的時(shí)間信息和歌詞//使用正則表達(dá)式判斷時(shí)間格式提取出時(shí)間信息,并進(jìn)行排序for(inti=0;i<subgc.Length;i++){if(Regex.IsMatch(subgc[i],〃八([01][0-9]|2[0-3]):[0-5][0-9].[0-9][0-9]$〃)||Regex.IsMatch(subgc[i],〃,[01][0-9]|2[0-3]):[0-5][0-9]$〃))//是否匹配{stringtemp=subgc[i];mylist.Add(subgc[i]);}}for(inti=0;i<mylist.Count-1;i++){for(intj=i;j<mylist.Count;j++){if(string.Compare(mylist[i].ToString(),mylist[j].ToString())>0){stringtemp;temp=mylist[i].ToString();mylist[i]=mylist[j];mylist[j]=temp;}}}privatevoidreadLrc(){if(curFileName==string.Empty)return;lrcPath=string.Format("lrc\\{0}.lrc",curFileName);if(!File.Exists(lrcPath)){strLrcContext="";return;}FileStreamfs=newFileStream(lrcPath,FileMode.Open);StreamReadersr=newStreamReader(fs,Encoding.UTF8);strLrcContext=sr.ReadToEnd();sr.Close();fs.Close();split();}privatestringregc(intstrTimeSecond){stringtemptime=secToMin(strTimeSecond);intk;for(k=0;k<mylist.Count;k++){if(string.Compare(temptime,mylist[k].ToString().Substring(0,5))<0)if(k<mylist.Count&&k>=1){stringtempsj=mylist[k-1].ToString().Substring(0,5);//歌詞的時(shí)間,查找時(shí)間顯示歌詞intindex=strLrcContext.IndexOf(tempsj);intlength=strLrcContext.Substring(index).IndexOf("]")+1;index+=length;while(strLrcContext[index]=='['){index+=length+1;}intl=strLrcContext.Substring(index).IndexOf('[');if(l<=0){.〃〃return"";}returnstrLrcContext.Substring(index,l);}}}.〃〃return"";}privatestringsecToMin(intseconds){inttempminute=seconds/60;stringminute=tempminute.ToString();inttempsecond=seconds%60;stringsecond=tempsecond.ToString();if(tempminute<10)privatevoidbuttonl_Click(objectsender,EventArgse){IniUtility.FilePath=Application.StartupPath+""\\INI.ini"";ColorDialogcolorDialog=newColorDialog();colorDialog.Color=foreColor;if(colorDialog.ShowDialog()==DialogResult.OK){foreColor=colorDialog.Color;drawString(regc(curPlayTimeSecond));IniUtility.WriteIniKey("ShowLrc",""FontColor",foreColor.Name);}}:寅廠堰-03.11?其自慕:寅廠堰-03.H?其自慕2爭(zhēng)靜茹_容矚盼3JoanieMalilen-IicuvnByTheS:±lLe)rG:進(jìn)dens搜索臓下翩表劭曲名歌手名下融n04梁靜茹-何誰(shuí)會(huì)讓你偶爾想要擁他在懷中圖5-3滾動(dòng)歌詞5.7歌曲下載模塊有時(shí)我們播放的歌曲沒有歌詞,這時(shí)我們就可以通過聯(lián)網(wǎng)下載歌詞,還可以下載自己喜歡的歌曲。實(shí)現(xiàn)代碼如下:privatevoidbtnSearch_Click(objectsender,EventArgse){this.lblErrorMsg.Text二;if(txtTitle.Text.Trim()==〃“){this.lblErrorMsg.Text=〃請(qǐng)?zhí)顚懲暾?return;}else{//信息完整//啟動(dòng)多線程,防止假死現(xiàn)象try{AsyncCallbackcallback=newAsyncCallback(this.AsyncCallBackImpl);getSongWord.BeginInvoke(this.txtTitle.Text.Trim(),this.txtArtist.Text.Trim(),callback,null);this.lblErrorMsg.Text="正在搜索請(qǐng)稍等";}catch(Exceptionex){this.lblErrorMsg.Text="未搜索到相關(guān)歌詞";}}}privatedelegatevoidbeginInvokeDelegate(DataTabledt);privatevoidAsyncCallBackImpl(IAsyncResultar){DataTabledt=getSongWord.EndInvoke(ar);if(dt==null||dt.Rows.Count==0){this.lblErrorMsg.Text="未搜索到相關(guān)歌詞";return;}this.lblErrorMsg.Text="搜索成功";this.dgvSongLrc.BeginInvoke(newbeginInvokeDelegate(dataBind),dt);//dataBind(dt);
}privatestaticDataTablegetSong(stringsongName,stringsingerName){Lrclrc=newLrc();returnlrc.getSongWord(songName,singerName);}privatevoiddataBind(DataTabledt){this.dgvSongLrc.DataSource=dt;}}歌曲信息:梁靜茹-問搜索下載關(guān)閉歌曲信息:梁靜茹-問搜索下載關(guān)閉圖5-4歌曲下載5.8歌曲剪輯模塊一個(gè)好的播放器不僅能夠播放各種格式的鈴聲還能對(duì)音樂文件進(jìn)行剪輯,使用戶能夠制作自己喜歡的鈴聲。此功能要用到TechSmithScreenCaptureCodec組件,核心代碼如下:partialclassMusicCuteprivateSystem.ComponentModel.IContainercomponents=null;protectedoverridevoidDispose(booldisposing){if(disposing&&(components!=null)){components.Dispose();}base.Dispose(disposing);}#regionWindowsFormDesignergeneratedcodeprivatevoidInitializeComponent(){System.ComponentModel.ComponentResourceManagerresources=newSystem.ComponentModel.ComponentResourceManager(typeof(MusicCute));this.btnOpen.Location=newSystem.Drawing.Point(43,171);this.btnOpen.Name="btnOpen";this.btnOpen.Size=newSystem.Drawing.Size(75,23);this.btnOpen.TabIndex=0;this.btnOpen.Text="打開歌曲";this.btnOpen.UseVisualStyleBackColor=true;this.btnMake.Location=newSystem.Drawing.Point(327,171);this.btnMake.Name="btnMake";this.btnMake.Size=newSystem.Drawing.Size(75,23);this.btnMake.TabIndex=1;this.btnMake.Text="制作";this.btnMake.UseVisualStyleBackColor=true;this.btnMake.Click+=newSystem.EventHandler(this.btnMake_Click);this.btnSetStart.Location=newSystem.Drawing.Point(139,171);this.btnSetStart.Name="btnSetStart";this.btnSetStart.Size=newSystem.Drawing.Size(75,23);this.btnSetStart.TabIndex=2;this.btnSetStart.Text="設(shè)置起點(diǎn)";this.btnSetStart.UseVisualStyleBackColor=true;this.btnSetStart.Click+=newSystem.EventHandler(this.btnSetStart_Click);this
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 職業(yè)發(fā)展與晉升通道設(shè)計(jì)計(jì)劃
- 礦產(chǎn)資源開發(fā)合作協(xié)議三篇
- 積極應(yīng)對(duì)職場(chǎng)變化的策略計(jì)劃
- 2024-2025部編版語(yǔ)文一年級(jí)上冊(cè)識(shí)字4日月山川
- 四川省成都市錦江區(qū)師一學(xué)校2022-2023學(xué)年八年級(jí)上學(xué)期期中物理試卷(含答案)
- 銷售汽車代理協(xié)議書范文
- 小賣部戰(zhàn)略合作協(xié)議書范文范本
- 李四光的生平事跡介紹
- 鐵路CPIII控制網(wǎng)測(cè)量方案
- 部編道德與法治七年級(jí)在品味情感中
- 中圖版2024-2025學(xué)年八年級(jí)地理上冊(cè)期中卷含答案
- 國(guó)開2024年秋《教育心理學(xué)》形成性考核1-4答案
- 市政道路及設(shè)施零星養(yǎng)護(hù)服務(wù)技術(shù)方案(技術(shù)標(biāo))
- 《中國(guó)心力衰竭診斷和治療指南2024》解讀(總)
- 2024助貸委托服務(wù)協(xié)議合同模板
- 國(guó)測(cè)省測(cè)四年級(jí)勞動(dòng)質(zhì)量檢測(cè)試卷
- 小腸梗阻的診斷與治療中國(guó)專家共識(shí)(2023版)解讀
- 有限空間作業(yè)審批表
- 五育融合深度育人PPT課件
- 乳頭溢液的診斷及處理ppt課件
- 《相信自己,我是最棒的》主題班會(huì)說課稿
評(píng)論
0/150
提交評(píng)論