




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
一、軟件說(shuō)明:功能說(shuō)明:一個(gè)簡(jiǎn)易小巧的MP3播放器,可以播放已經(jīng)下載好的MP3格式的音樂(lè)。解決什么樣的實(shí)際問(wèn)題:市場(chǎng)上的音樂(lè)播放器大都占用資源比較大,而且需要聯(lián)網(wǎng),即使播放本地音樂(lè),也會(huì)占用較多的網(wǎng)速,而這款播放器解決了這些問(wèn)題。(雖然還是有很多缺陷,但用起來(lái)還是比較方便的。)性能說(shuō)明:可以播放單首或多首歌曲,可以保存或清空當(dāng)前播放列表,支持列表循環(huán),順序播放,單曲循環(huán)。(但目前只支持MP3格式。)程序類(lèi)型說(shuō)明:這個(gè)播放器是winform應(yīng)用程序。二、軟件設(shè)計(jì)軟件整體結(jié)構(gòu)圖及模塊劃分:軟件整體結(jié)構(gòu)圖:控制模塊:歌曲列表顯示區(qū):在VS的“解決方案資源管理器”中的文件說(shuō)明:整個(gè)項(xiàng)目的文件如下:其中,Properties中所包含的的文件有:這里包含的是定義程序集屬性的文件,用來(lái)設(shè)定生成的有關(guān)程序集的常規(guī)信息dll文件的一些參數(shù)。引用中包含的文件有:這里包含的是這個(gè)項(xiàng)目所用的的一些類(lèi)庫(kù)信息。Form1.cs中包含有:這些是窗體的設(shè)計(jì)信息,而Program.cs是整個(gè)源程序的入口。各模塊對(duì)應(yīng)的主要對(duì)象或方法:控制模塊中主要用到的是axWindowsmediaPlayer控件以及MenuStrip控件。其中WindowsmediaPl(wèi)ayer控件用到的方法屬性主要有:axWindowsMediaPlayer1.BeginInit();//初始化axWindowsMediaPlayer1.settings.autoStart;//自動(dòng)播放axWindowsMediaPlayer1.settings.setMode("shuffle",false);//順序播放axWindowsMediaPlayer1.settings.enableErrorDialogs;axWindowsMediaPlayer1.settings.balance;axWindowsMediaPlayer1.settings.mute;axWindowsMediaPlayer1.settings.volume;MenuStrip控件用到的方法事件有:privatevoid打開(kāi)文件ToolStripMenuItem1_Click(objectsender,EventArgse);privatevoid添加歌曲ToolStripMenuItem_Click(objectsender,EventArgse);privat(yī)evoid添加文件夾ToolStripMenuItem_Click(objectsender,EventArgse);privatevoid退出ToolStripMenuItem_Click(objectsender,EventArgse);privatevoid清空列表ToolStripMenuItem1_Click(objectsender,EventArgse);privatevoid順序播放ToolStripMenuItem_Click(objectsender,EventArgse);privatevoid單曲循環(huán)ToolStripMenuItem_Click(objectsender,EventArgse);privatevoid隨機(jī)播放ToolStripMenuItem_Click(objectsender,EventArgse);數(shù)據(jù)庫(kù)設(shè)計(jì)或數(shù)據(jù)文件說(shuō)明:由于播放器使用數(shù)據(jù)量較小,故采用TXT保存歌曲文件列表。使用的是文件處理。設(shè)計(jì)思路:播放器模塊的設(shè)計(jì)結(jié)構(gòu)如下:MP3播放器MP3播放器播放窗體列表窗體打開(kāi)歌曲歌曲的播放歌曲的暫停歌曲的停止音量設(shè)置進(jìn)度條控制歌曲列表顯示播放點(diǎn)擊歌曲播放窗體列表窗體打開(kāi)歌曲歌曲的播放歌曲的暫停歌曲的停止音量設(shè)置進(jìn)度條控制歌曲列表顯示播放點(diǎn)擊歌曲三、測(cè)試:?測(cè)試用例列表:F:\Music\ALittleLove.mp3F:\Music\ChristmasInMyHeart.mp3F:\Music\Everytime.mp3F:\Music\LivingToLoveYou.mp3F:\Music\LoveParadise.mp3F:\Music\LuckyTwice-MeAndYou.mp3F:\Music\Morning.mp3F:\Music\TravelingLight.mp3F:\Music\TroubleIsAFriend.mp3F:\Music\WishYouWereHere.mp3F:\Music\YouandMe.mp3F:\Music\Ψ?.mp3F:\Music\一直很安靜.mp3F:\Music\一首簡(jiǎn)單的歌.mp3F:\Music\七里香.mp3F:\Music\下一個(gè)天亮.mp3F:\Music\不再猶豫.mp3F:\Music\不完整的旋律.mp3F:\Music\東風(fēng)破.mp3F:\Music\依戀.mp3F:\Music\依然愛(ài)你.mp3F:\Music\光輝歲月.mp3F:\Music\蘭若詞.mp3F:\Music\再見(jiàn)理想.mp3F:\Music\分手快樂(lè).mp3F:\Music\勇氣.mp3F:\Music\匿名的好友.mp3F:\Music\單身美好.mp3F:\Music\喜歡兩個(gè)人.mp3F:\Music\圍巾.mp3F:\Music\在樹(shù)上唱歌.mp3F:\Music\夜曲.mp3F:\Music\大城小愛(ài).mp3F:\Music\天空.mp3F:\Music\如果有一天.mp3F:\Music\孤單北半球.mp3F:\Music\孩子氣.mp3F:\Music\寧夏.mp3F:\Music\左邊.mp3F:\Music\帶我走.mp3軟件運(yùn)行截圖:測(cè)試情況分析經(jīng)測(cè)試,軟件運(yùn)行情況基本良好,但單曲循環(huán)功能有些缺陷,有待改進(jìn),總體情況還算良好。四、小結(jié)這一次的課程設(shè)計(jì)開(kāi)發(fā)的這個(gè)軟件是我的第一個(gè)軟件,看到它能夠基本實(shí)現(xiàn)我想要的功能,感到非常開(kāi)心,盡管還有很多缺陷。在做這個(gè)軟件的時(shí)候,遇到過(guò)很多問(wèn)題,一開(kāi)始覺(jué)得有問(wèn)題上網(wǎng)找就是了,但在做的的時(shí)候卻并不是如此,上網(wǎng)百度,用C#開(kāi)發(fā)的播放器源碼很多,教程也不少,但都講的很亂,而且那些屬性名,控件名,方法名之類(lèi)的都和自己的不同,原理不懂,給你源碼也沒(méi)用。沒(méi)辦法,就只能惡補(bǔ),像各種控件的屬性,尤其是axWindowsmediaPl(wèi)ayer控件的各種屬性及使用方法(這也是我這次課程設(shè)計(jì)最大的收獲。),文件處理等。通過(guò)這次課程設(shè)計(jì),我學(xué)到了很多課堂和書(shū)本學(xué)不到的東西,我覺(jué)得最重要的一點(diǎn)就是注意細(xì)節(jié)以及動(dòng)手之前弄懂基本原理。五、附錄用到的第三方控件或組件說(shuō)明:這個(gè)程序用到的第三方控件是axWindowsmediaPlayer控件,這個(gè)控件是一個(gè)COM組件,是windows自帶的控件,用于播放媒體文件,在開(kāi)發(fā)媒體播放器時(shí)使用是非常方便的。程序的主要代碼(對(duì)應(yīng)上面第二條):窗體設(shè)計(jì)代碼From1.cs:usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.IO;namespaceMyMusicPlayer{publicpartialclassMusicPlayer:Form{publicMusicPlayer(){InitializeComponent();}string[]musicPath=newstring[1000];//用于保存歌曲目錄intmusicCount=0;privatevoidForm1_Load(objectsender,EventArgse){myPlayer.BeginInit();//初始化myPlayer.settings.autoStart=true;//自動(dòng)播放myPlayer.settings.setMode("shuffle",false);//順序播放myPlayer.settings.enableErrorDialogs=true;myPlayer.settings.balance=0;myPlayer.settings.mute=false;myPl(wèi)ayer.settings.volume=100;//聲音設(shè)為最大if(File.Exists("listbox.txt"))//如果存在播放列表,那么加載播放列表{StreamReaderreader=newStreamReader("listbox.txt");try{while(reader.Peek()!=-1){stringfilepat(yī)h=reader.ReadLine();if(File.Exists(filepath)){musicPath[musicCount++]=filepath;stringfilename=Path.GetFileName(filepath);listBox1.Items.Add(filename);//listbox用來(lái)顯示歌曲名myPl(wèi)ayer.currentPlaylist.insertItem(myPlayer.currentPlaylist.count,myPl(wèi)ayer.newMedia(filepath));}}listBox1.SelectedIndex=0;}catch(Exception){listBox1.SelectedIndex=-1;MessageBox.Show("加載播放列表失敗或者列表為空!","提示",MessageBoxButtons.OK,MessageBoxIcon.Error);}finally{reader.Close();}}}privatevoid打開(kāi)文件ToolStripMenuItem1_Click(objectsender,EventArgse)//打開(kāi)單首歌曲,但不加載到播放列表{DialogResultdr=openFileDialog1.ShowDialog();if(dr==DialogResult.OK){myPlayer.URL=openFileDialog1.FileName;}}privatevoid添加歌曲ToolStripMenuItem_Click(objectsender,EventArgse)//打開(kāi)單首歌曲,并加載到播放列表{DialogResultdr=openFileDialog1.ShowDialog();if(dr==DialogResult.OK){myPlayer.URL=openFileDialog1.FileName;stringfilepath=openFileDialog1.FileName;stringfilename=Pat(yī)h.GetFileName(filepat(yī)h);listBox1.Items.Add(filename);musicPath[musicCount++]=filepath;myPlayer.currentPlaylist.insertItem(myPlayer.currentPlaylist.count,myPlayer.newMedia(filepath));}}privat(yī)evoid添加文件夾ToolStripMenuItem_Click(objectsender,EventArgse)//打開(kāi)媒體文件夾,并加載到播放列表{DialogResultdr=folderBrowserDialog1.ShowDialog();if(dr==DialogResult.OK){string[]filepath=Directory.GetFiles(folderBrowserDialog1.SelectedPath);foreach(stringsinfilepath){if(Path.GetExtension(s)==".mp3"){stringfilename=Path.GetFileName(s);listBox1.Items.Add(filename);musicPath[musicCount++]=s;myPlayer.currentPl(wèi)aylist.insertItem(myPlayer.currentPl(wèi)aylist.count,myPlayer.newMedia(s));}}}}privat(yī)evoid退出ToolStripMenuItem_Click(objectsender,EventArgse)//退出播放器并保存當(dāng)前播放列表{myPl(wèi)ayer.Ctlcontrols.stop();myPlayer.close();StreamWriterwriter=newStreamWriter("listbox.txt",false,Encoding.Unicode);//保存播放列表for(inti=0;i<=musicCount-1;i++){if(musicPat(yī)h[i]!=string.Empty){writer.WriteLine(musicPat(yī)h[i]);}}writer.Close();Application.Exit();}privatevoidaxWindowsMediaPlayer1_Pl(wèi)ayStateChange(objectsender,AxWMPLib._WMPOCXEvents_PlayStateChangeEvente)//顯示播放狀態(tài){if(myPlayer.playState==WMPLib.WMPPl(wèi)ayState.wmppsPlaying){strings=myPlayer.currentMedia.sourceURL;for(inti=0;i<myPlayer.currentPlaylist.count;i++){if(listBox1.Items[i].ToString()==Path.GetFileName(s)){listBox1.SelectedIndex=i;break;}}}}privatevoid清空列表ToolStripMenuItem1_Click(objectsender,EventArgse)//清空當(dāng)前播放列表{myPlayer.Ctlcontrols.stop();//先停止播放器listBox1.Items.Clear();//清空l(shuí)istboxmyPl(wèi)ayer.currentPlaylist.clear();//清空播放列表for(intj=0;j<musicCount;j++){musicPat(yī)h[j]="";}}privat(yī)evoidForm1_KeyPress(objectsender,KeyPressEventArgse){if(char.Equals(e.KeyChar,'')){if(myPl(wèi)ayer.playState==WMPLib.WMPPlayStat(yī)e.wmppsPl(wèi)aying){myPlayer.Ctlcontrols.pause();}}}privatevoid順序播放ToolStripMenuItem_Click(objectsender,EventArgse)//按列表順序播放歌曲文件{myPlayer.settings.playCount=1;myPl(wèi)ayer.currentPlaylist.clear();for(intj=0;j<musicCount;j++){if(musicPath[j]!=string.Empty){myPlayer.currentPlaylist.insertItem(myPlayer.currentPlaylist.count,myPlayer.newMedia(musicPath[j]));}}myPlayer.settings.setMode("shuffle",false);myPl(wèi)ayer.Ctlcontrols.playItem(myPlayer.currentPlaylist.get_Item(0));}privatevoid單曲循環(huán)ToolStripMenuItem_Click(objectsender,EventArgse)//單曲循環(huán){myPl(wèi)ayer.Ctlcontrols.stop();myPl(wèi)ayer.currentPlaylist.clear();if(listBox1.SelectedIndex!=-1&&listBox1.Items.Count>0){intk=listBox1.SelectedIndex;for(inti=0;i<1000;i++){myPlayer.currentPlaylist.insertItem(myPlayer.currentPlaylist.count,myPlayer.newMedia(musicPath[k]));}}myPlayer.Ctlcontrols.playItem(myPl(wèi)ayer.currentPlaylist.get_Item(0));}privatevoid隨機(jī)播放ToolStripMenuItem_Click(objectsender,EventArgse)//隨機(jī)播放列表歌曲文件{myPlayer.settings.playCount=1;myPl(wèi)ayer.Ctlcontrols.stop();myPlayer.currentPlaylist.clear();Randomrd=newRandom(DateTime.Now.Millisecond);for(inti=0;i<1000;i++){intj=rd.Next(0,musicCount);if(musicPat(yī)h[j]!=string.Empty){myPlayer.currentPl(wèi)aylist.insertItem(myPlayer.currentPl(wèi)aylist.count,myPlayer.newMedia(musicPath[j]));}}myPlayer.Ctlcontrols.playItem(myPlayer.currentPlaylist.get_Item(0));}privatev
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 公司遷址代辦合同范本
- 單位勞?;厥蘸贤侗?/a>
- 醫(yī)療衛(wèi)生招聘測(cè)試題(含參考答案)
- 個(gè)人股份轉(zhuǎn)讓協(xié)議書(shū)
- 鉗工四級(jí)理論知識(shí)題庫(kù)(附參考答案)
- 個(gè)人犯錯(cuò)萬(wàn)能檢討書(shū)
- 雙向鋼塑格柵買(mǎi)賣(mài)合同范例
- 公司窗簾采購(gòu)合同范本
- 高壓電工(運(yùn)行)模擬練習(xí)題(附答案)
- 口罩居間協(xié)議合同范本
- 家校共育之道
- DeepSeek入門(mén)寶典培訓(xùn)課件
- 西安2025年陜西西安音樂(lè)學(xué)院專(zhuān)職輔導(dǎo)員招聘2人筆試歷年參考題庫(kù)附帶答案詳解
- 《作文中間技巧》課件
- 廣東省2025年中考物理仿真模擬卷(深圳)附答案
- 2025屆八省聯(lián)考 新高考適應(yīng)性聯(lián)考英語(yǔ)試題(原卷版)
- 新蘇教版一年級(jí)下冊(cè)數(shù)學(xué)第1單元第3課時(shí)《8、7加幾》作業(yè)
- 2024年山東電力高等專(zhuān)科學(xué)校高職單招職業(yè)技能測(cè)驗(yàn)歷年參考題庫(kù)(頻考版)含答案解析
- 《平面廣告賞析》課件
- 人教鄂教版六年級(jí)下冊(cè)科學(xué)全冊(cè)知識(shí)點(diǎn)
- (正式版)HGT 22820-2024 化工安全儀表系統(tǒng)工程設(shè)計(jì)規(guī)范
評(píng)論
0/150
提交評(píng)論