基于vc++mp3播放器的課程設(shè)計(jì)_第1頁(yè)
已閱讀1頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、<p><b>  武漢大學(xué)珞珈學(xué)院</b></p><p>  多媒體技術(shù) 課 程 設(shè) 計(jì) </p><p>  題 目 MP3播放器的設(shè)計(jì) </p><p>  系 (部) 計(jì)算機(jī)科學(xué)與技術(shù)系 </p><p>  班 級(jí)

2、 </p><p>  姓 名 </p><p>  學(xué) 號(hào) </p><p>  指導(dǎo)教師 </p><p>  2010 年 7 月 12 日至 7 月 16 日 共 1 周<

3、;/p><p>  2010年 7 月 16 日</p><p>  面向?qū)ο蟪绦蛟O(shè)計(jì) 課程設(shè)計(jì)任務(wù)書(shū)</p><p><b>  注:可以附頁(yè)</b></p><p><b>  課程設(shè)計(jì)成績(jī)?cè)u(píng)定表</b></p><p><b>  1 引言</b>&l

4、t;/p><p>  MP3播放器的設(shè)計(jì)是利用MFC應(yīng)用程序、媒體控制接口MIC的基本知識(shí)而設(shè)計(jì)的。</p><p><b>  1.1 MFC簡(jiǎn)介</b></p><p>  MFC是Visual C++是核心。MFC類庫(kù)將所有圖形用戶界面的元素如窗口、菜單和按鈕等都以類的形式進(jìn)行了封裝,MFC AppWizard向?qū)Ц鶕?jù)繼承性利用MFC派生出自

5、己的類,并對(duì)Windows應(yīng)用程序進(jìn)行了分解,利用MFC派生類對(duì)應(yīng)用程序重新進(jìn)行組裝,同時(shí)還規(guī)定了應(yīng)用程序中各個(gè)MFC派生類對(duì)象之間的相互聯(lián)系,實(shí)現(xiàn)了標(biāo)準(zhǔn)Windows應(yīng)用程序的功能,這就是向?qū)傻乃^MFC應(yīng)用程序框架。每個(gè)MFC類都包括了一些函數(shù),函數(shù)放到類中,符合C++編程方法。這些函數(shù),必須通過(guò)類定義對(duì)象才能使用[1]。</p><p><b>  1.2 MCI簡(jiǎn)介</b><

6、;/p><p>  MCI(Media Control Interface)媒體控制接口是MircroSoft提供的一組多媒體設(shè)備和文件的標(biāo)準(zhǔn)接口,它的好處是可以方便地控制絕大多數(shù)多媒體設(shè)備包括音頻、視頻、影碟、錄像等多媒體設(shè)備,而不需要知道它們的內(nèi)部工作狀況。它所支持的媒體格式包括avi、wav、mpeg等等[2]。</p><p>  音頻技術(shù)發(fā)展較早,幾年前一些技術(shù)已經(jīng)成熟并產(chǎn)品化,音頻

7、技術(shù)主要包括四個(gè)方面:音頻數(shù)字化、語(yǔ)音處理、語(yǔ)音合成及語(yǔ)音識(shí)別。</p><p>  音頻文件包括多種格式的文件,MP3就是其中的一種。MP3的全稱是Moving Picture Experts Group,Audio Layer Ⅲ,它所使用的技術(shù)是在VCD(MPEG-1)的音頻壓縮技術(shù)上發(fā)展出的第三代,而不是MPEG-3。MP3是一種音頻壓縮的國(guó)際技術(shù)標(biāo)準(zhǔn),它一般需要MP3播放器來(lái)讀取。</p>

8、<p><b>  2 總體設(shè)計(jì)</b></p><p><b>  2.1 實(shí)現(xiàn)功能</b></p><p>  MP3播放器主要對(duì)常用Windows音頻格式的文件實(shí)現(xiàn)播放控制:播放歌曲、暫停播放、停止播放等;實(shí)現(xiàn)音量控制:靜音、聲音放大以及聲音減小的功能[3]。</p><p><b>  2.2

9、 功能模塊圖</b></p><p>  圖2-1 系統(tǒng)功能模塊圖</p><p><b>  3 詳細(xì)設(shè)計(jì)</b></p><p>  3.1 界面布局設(shè)計(jì)</p><p>  (1) 創(chuàng)建一個(gè)對(duì)話框類,類名為Mp3PlayerDlg。</p><p>  (2) 向?qū)υ捒蛑刑砑覩r

10、oup Box控件、Static Text控件以及按鈕控件。</p><p>  (3) 設(shè)置所添加的控件的屬性。</p><p>  系統(tǒng)界面的運(yùn)行結(jié)果圖如圖3-1所示。</p><p>  圖3-1 系統(tǒng)界面運(yùn)行結(jié)果圖</p><p>  Mp3Player對(duì)話框中所用控件的屬性描述如表3-1所示。</p><p>

11、;  表3-1 對(duì)話框控件ID及其描述</p><p>  3.2 各模塊功能設(shè)計(jì)</p><p>  3.2.1 處理“打開(kāi)”按鈕</p><p>  單擊“打開(kāi)”按鈕后,在OnButtonOpen()函數(shù)中,首先對(duì)文件類型進(jìn)行過(guò)濾,調(diào)用DoModa()函數(shù)打開(kāi)對(duì)話框選擇一個(gè)媒體文件,通過(guò)GetPathName()函數(shù)獲取文件路徑,通過(guò)GetFileName()函

12、數(shù)獲取文件名后,調(diào)用DisplayInfo()函數(shù)在Static Text控件上顯示“你選擇的歌曲是(文件名)”,然后利用GetDlgItem()函數(shù)設(shè)置“暫停”按鈕以及“停止”按鈕不可用。 </p><p>  3.2.2 處理“播放”按鈕</p><p>  單擊“播放”按鈕后,在OnButtonPlay()函數(shù)中,通過(guò)調(diào)用MCIMP3類的MCIOpen()函數(shù)獲取剛才選擇的文件路徑以

13、及文件名,調(diào)用該類的MCIPlay()函數(shù)播放歌曲,此時(shí)調(diào)用DisplayInfo()函數(shù)在Static Text控件上顯示“正在播放的歌曲是(文件名)”,進(jìn)行歌曲的播放,然后利用GetDlgItem()函數(shù)設(shè)置“播放”按鈕不可用。</p><p>  3.2.3 處理“暫?!卑粹o</p><p>  單擊“暫停”按鈕后,在OnButtonPause()函數(shù)中,首先通過(guò)調(diào)用MCIMP3類的

14、MCIPause()函數(shù)暫停正在播放的歌曲,然后調(diào)用DisplayInfo()函數(shù)在Static Text控件上顯示“暫停播放歌曲(文件名)”,此時(shí)的歌曲處于暫停時(shí)的進(jìn)度上,利用GetDlgItem()函數(shù)設(shè)置“播放”按鈕可用。</p><p>  3.2.4 處理“停止”按鈕</p><p>  單擊“停止”按鈕后,在OnButtonStop()函數(shù)中,首先通過(guò)調(diào)用MCIMP3類的MCI

15、Pause()函數(shù)停止正在播放的歌曲,然后調(diào)用DisplayInfo()函數(shù)在Static Text控件上顯示“停止播放歌曲(文件名)”,將停止正在播放歌曲,利用GetDlgItem()函數(shù)設(shè)置“暫?!卑粹o和“停止”按鈕不可用。</p><p>  3.2.5 處理“音量”按鈕</p><p>  單擊“音量”按鈕后,在OnButtonVolume()函數(shù)中,首先調(diào)用WinExec()函數(shù)

16、并且打開(kāi)C:/WINDOWS/System32/sndvol32.exe,彈出“主音量”對(duì)話框,在此對(duì)話框內(nèi)可以對(duì)音量進(jìn)行增大或減小以及靜音的設(shè)置。</p><p>  3.2.6 處理“退出”按鈕</p><p>  單擊“退出”按鈕后,在OnButtonQuit()函數(shù)中,調(diào)用CDialog類的OnCancel()函數(shù)將退出對(duì)話框,結(jié)束程序的運(yùn)行。</p><p&g

17、t;<b>  4 總結(jié)</b></p><p>  經(jīng)過(guò)一周的面向?qū)ο蟪绦蛘n程設(shè)計(jì),我學(xué)到了很多。在這一周的實(shí)際動(dòng)手學(xué)習(xí)中,我對(duì)VC++這門(mén)課程有了更深刻的認(rèn)識(shí),掌握了用MFC創(chuàng)建基于對(duì)話框的應(yīng)用程序,同時(shí)了解了MCI相關(guān)知識(shí)。這次課程設(shè)計(jì)我做了MP3播放器的設(shè)計(jì),MP3播放器主要對(duì)常用Windows音頻格式的文件實(shí)現(xiàn)播放控制:播放歌曲、暫停播放、停止播放等;實(shí)現(xiàn)音量控制:靜音、聲音放大以

18、及聲音減小的功能。</p><p>  本次課程設(shè)計(jì)中雖然可以實(shí)現(xiàn)播放、暫停、停止以及音量等功能,但仍然存在著放多不足,比如列表管理的功能以及循環(huán)播放功能始終無(wú)法實(shí)現(xiàn),如果有時(shí)間一定會(huì)好好研究。</p><p>  課設(shè)是辛苦勞累的,但是收獲同樣是巨大的,在課設(shè)中每解決一個(gè)問(wèn)題,那種成就感是無(wú)法言語(yǔ)的,課設(shè)中第一次調(diào)試程序時(shí)出現(xiàn)了邏輯錯(cuò)誤,編譯能通過(guò),運(yùn)行始終無(wú)法通過(guò),后來(lái)經(jīng)過(guò)思考,進(jìn)行了

19、多次修改調(diào)試之后得到了運(yùn)行結(jié)果,雖然以前在程序中未曾見(jiàn)到過(guò),但是經(jīng)過(guò)改正調(diào)試最終達(dá)到了目的。像此類的問(wèn)題還有很多,不過(guò)經(jīng)過(guò)查詢資料,咨詢老師,與同學(xué)探討最終得到了理想的程序。</p><p><b>  參考文獻(xiàn)</b></p><p>  [1] 王育堅(jiān).Visual C++面向?qū)ο缶幊探坛?第2版.北京:清華大學(xué)出版社,2008</p><p&

20、gt;  [2] 侯俊杰.深入淺出MFC.第2版.廣東:南方出版社,2007</p><p>  [3] 嚴(yán)華峰等.Visual C++課程設(shè)計(jì)案例精編.北京:中國(guó)水利水電出版社,2004</p><p>  [4] 王維玉等.Visual C++高級(jí)編程技術(shù)精粹.北京:科學(xué)出版社,2008</p><p><b>  附錄</b></p

21、><p>  BOOL CMp3PlayerDlg::OnInitDialog() //初始化</p><p><b>  {</b></p><p>  CDialog::OnInitDialog();</p><p>  // Add "About..." menu item to system m

22、enu.</p><p>  // IDM_ABOUTBOX must be in the system command range.</p><p>  ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);</p><p>  ASSERT(IDM_ABOUTBOX < 0xF000);</p>

23、<p>  CMenu* pSysMenu = GetSystemMenu(FALSE);</p><p>  if (pSysMenu != NULL)</p><p><b>  {</b></p><p>  CString strAboutMenu;</p><p>  strAboutMenu.L

24、oadString(IDS_ABOUTBOX);</p><p>  if (!strAboutMenu.IsEmpty())</p><p><b>  {</b></p><p>  pSysMenu->AppendMenu(MF_SEPARATOR);</p><p>  pSysMenu->Appen

25、dMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);</p><p><b>  }</b></p><p><b>  }</b></p><p>  // Set the icon for this dialog. The framework does this automati

26、cally</p><p>  // when the application's main window is not a dialog</p><p>  SetIcon(m_hIcon, TRUE);// Set big icon</p><p>  SetIcon(m_hIcon, FALSE);// Set small icon<

27、/p><p>  // TODO: Add extra initialization here</p><p>  DisplayInfo(0,_T("歡迎使用Mp3Player!"),_T(""));</p><p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);&

28、lt;/p><p>  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);</p><p>  GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);</p><p>  return TRUE; // return TRUE unless you set th

29、e focus to a control</p><p><b>  }</b></p><p>  void CMp3PlayerDlg::OnButtonOpen() //打開(kāi)</p><p><b>  {</b></p><p>  // TODO: Add your control

30、notification handler code here</p><p>  char szFileFilter[]="All Music Files(*.*)|*.*||"; </p><p>  CFileDialog FileOpenDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter/*, this*/);<

31、/p><p>  if( FileOpenDlg.DoModal() == IDOK )</p><p><b>  {</b></p><p>  m_csPathName = FileOpenDlg.GetPathName();</p><p>  m_csSongName = FileOpenDlg.GetFileNa

32、me();</p><p>  DisplayInfo(1,_T("你選擇的歌曲是:"),m_csSongName);</p><p>  m_bIsOpened = TRUE;</p><p>  m_bIsNoSelectFile = FALSE;</p><p><b>  }</b><

33、/p><p><b>  else</b></p><p><b>  {</b></p><p>  m_bIsNoSelectFile = TRUE;</p><p><b>  }</b></p><p>  if (m_bIsOpened &

34、& m_mcimp3.MCIIsPlaying())</p><p><b>  {</b></p><p>  m_mcimp3.MCIClose();</p><p>  m_mcimp3.MCIStop();</p><p><b>  }</b></p><p

35、>  if (m_bIsOpened && m_mcimp3.MCIIsPlaying() </p><p>  && m_bIsNoSelectFile)</p><p><b>  {</b></p><p>  m_mcimp3.MCIResume();</p><p>&

36、lt;b>  }</b></p><p>  if (m_bIsOpened && m_bIsPressPauseBtn)</p><p><b>  {</b></p><p>  m_bIsPauseOpen = TRUE;</p><p><b>  }</b>

37、;</p><p>  BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)->IsWindowEnabled();</p><p>  if (!bIsPlayBtnEnabled)</p><p><b>  {</b></p><p>  GetDlgIte

38、m(IDC_BUTTON_PLAY)->EnableWindow(TRUE);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CMp3PlayerDlg::OnButtonPlay() //播放</p><p><b

39、>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  if (m_bIsPauseOpen)</p><p><b>  {</b></p><p>  if (m_bIsNoSe

40、lectFile)</p><p><b>  {</b></p><p>  m_mcimp3.MCIResume();</p><p>  DisplayInfo(1,_T("繼續(xù)播放歌曲:"),m_csSongName);</p><p>  m_bIsPressPauseBtn = FALSE

41、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  m_mcimp3.MCIOpen(m_csPathName);</p><p>  m_mcimp3.M

42、CIPlay();</p><p>  DisplayInfo(1,_T("正在播放的歌曲是:"),m_csSongName);</p><p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);</p><p>  m_bIsNoSelectFile = TRUE;</p&

43、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  else if (m_bIsOpened && m_bIsPressPauseBtn)</p><p><b>  {</b></p><p>  m

44、_mcimp3.MCIPlay();</p><p>  DisplayInfo(1,_T("繼續(xù)播放歌曲:"),m_csSongName);</p><p>  m_bIsPressPauseBtn = FALSE;</p><p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);&l

45、t;/p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  if (m_bIsNoSelectFile)</p><p><b>  {</b>&l

46、t;/p><p>  DisplayInfo(0,_T("你還沒(méi)有選擇歌曲,點(diǎn)擊播放沒(méi)有意義!"),_T(""));</p><p><b>  return;</b></p><p><b>  }</b></p><p>  m_mcimp3.MCIOpen(

47、m_csPathName);</p><p>  m_mcimp3.MCIGetLength(&m_dwLen);</p><p>  m_mcimp3.MCIPlay();</p><p>  SetTimer(1, 1000, NULL);</p><p>  DisplayInfo(1,_T("正在播放的歌曲是:&q

48、uot;),m_csSongName);</p><p>  m_bIsPressStopBtn = FALSE;</p><p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(FALSE);</p><p><b>  } </b></p><p>  BOOL bIsP

49、auseBtnEnabled = GetDlgItem(IDC_BUTTON_PAUSE)->IsWindowEnabled();</p><p>  if (!bIsPauseBtnEnabled)</p><p><b>  {</b></p><p>  GetDlgItem(IDC_BUTTON_PAUSE)->Enable

50、Window(TRUE);</p><p><b>  }</b></p><p>  BOOL bIsStopBtnEnabled = GetDlgItem(IDC_BUTTON_STOP)->IsWindowEnabled();</p><p>  if (!bIsStopBtnEnabled)</p><p>

51、;<b>  {</b></p><p>  GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(TRUE);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CMp3Playe

52、rDlg::OnButtonPause() //暫停</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  BOOL bIsPlaying = m_mcimp3.MCIIsPlaying();

53、</p><p>  if (bIsPlaying)</p><p><b>  {</b></p><p>  m_mcimp3.MCIPause();</p><p>  DisplayInfo(1,_T("暫停播放歌曲:"),m_csSongName);</p><p>

54、  m_bIsPressPauseBtn = TRUE;</p><p><b>  }</b></p><p>  BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)->IsWindowEnabled();</p><p>  if (!bIsPlayBtnEnabled)</

55、p><p><b>  {</b></p><p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(TRUE);</p><p><b>  }</b></p><p><b>  }</b></p><p> 

56、 void CMp3PlayerDlg::OnButtonStop() //停止</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  if (m_mcimp3.MCIStop()==0)//

57、停止播放</p><p><b>  {</b></p><p>  m_bIsPressStopBtn = TRUE;</p><p>  m_bIsPressPauseBtn = FALSE;</p><p>  GetDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE)

58、;</p><p>  DisplayInfo(1,_T("停止播放歌曲:"),m_csSongName);</p><p>  m_mcimp3.MCIClose();</p><p>  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);</p><p><

59、b>  }</b></p><p>  BOOL bIsPlayBtnEnabled = GetDlgItem(IDC_BUTTON_PLAY)->IsWindowEnabled();</p><p>  if (!bIsPlayBtnEnabled)</p><p><b>  {</b></p><

60、;p>  GetDlgItem(IDC_BUTTON_PLAY)->EnableWindow(TRUE);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void CMp3PlayerDlg::OnButtonQuit() //退出</p&

61、gt;<p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  CDialog::OnCancel();</p><p><b>  }</b></p><p&g

62、t;  void CMp3PlayerDlg::OnButtonVolume() //音量</p><p><b>  {</b></p><p>  // TODO: Add your control notification handler code here</p><p>  WinExec( "C:\\WINDOW

63、S\\System32\\sndvol32.exe", SW_NORMAL );</p><p><b>  }</b></p><p>  void CMp3PlayerDlg::DisplayInfo(bool bOPInfo,CString csInfo,CString csSongName)</p><p><b>

64、;  {</b></p><p>  if (!bOPInfo)</p><p><b>  {</b></p><p>  m_csInfo = csInfo;</p><p><b>  }</b></p><p><b>  else</b&

65、gt;</p><p><b>  {</b></p><p>  m_csInfo = csInfo;</p><p>  m_csInfo += csSongName;</p><p><b>  }</b></p><p>  GetDlgItem(IDC_STATIC

66、_INFO)->SetWindowText(m_csInfo);</p><p><b>  }</b></p><p>  void CMp3PlayerDlg::OnTimer(UINT nIDEvent) </p><p><b>  {</b></p><p>  // TODO: A

67、dd your message handler code here and/or call default</p><p>  if ( nIDEvent == 1)</p><p><b>  {</b></p><p>  if ( 0 == m_dwLen )</p><p><b>  {</

68、b></p><p>  KillTimer(1);</p><p>  DisplayInfo(1,_T("已經(jīng)播放完歌曲:"),m_csSongName); </p><p>  GetDlgItem(IDC_BUTTON_PAUSE)->EnableWindow(FALSE);</p><p>  Ge

69、tDlgItem(IDC_BUTTON_STOP)->EnableWindow(FALSE);</p><p><b>  return;</b></p><p><b>  }</b></p><p>  m_dwLen--;</p><p><b>  }</b>&l

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論