《簡易音樂播放器.》由會員分享,可在線閱讀,更多相關《簡易音樂播放器.(19頁珍藏版)》請在裝配圖網(wǎng)上搜索。
1、使用第三方庫使用音頻引幣FMOD. FMODnJ以在如卜網(wǎng)址卜載: htt/vmw.fmod.orgjndex1php/download 木次使川的足Windows 32bit版木.4.30.00下戦完成版,安裝到某個目錄Z下。使用前.要先配萱相關的頭文件和庫文件計算機技術培訓中心L使用第三方庫/l:Tools-OptionsProjects and Solutions-VC+ Directories-Show directories for: 分別填入路徑,如:Include files的路彳仝足:f:developFMOD Programmers API Win32apiincLibrar
2、y files的路徑足:f:developFMOD Programmers API Win32apilibi Todw Tett Anarpe Window He4pAttach to ProcCTi.Ctri*Alt*Pto rvcw.Devce Security Manoge-.Dovco EfluJator Mordgor.Connect toCement to.Code Sppet%Ctd-*K, Ctrl BOko Toolbc* It.iv*Add-n ManagerMacrosfind Mere Eterwrs,.DotC/sbor 右iit-Properties-Configu
3、ration Properties-Linker-lnput-AdditionalDependencies在其中填入庫文件的名稱,如:fmodex vc.lib并H在旃應的代碼中include相應的頭文件.如:#in cludeArHfiraM11嚴 AllIj-crr 5pecMvdJ OUeg rUI M-dnvC)wteelX 巧 1 L 1“ * 一:444a wl ilw to add to Zi lac krw“ lb -BuSd5yCakUcie Cccferc4E. 6uadd Ctiv-aMbanCustom Uld Axles.2 3 0AddAdd 幵b “*rcVirC
4、ew OiegrSt 8 OXW rejKt3”etoXiweRcrrcPtQfaOp 24 -J* *-)Mnlh-凹卜巧- id taoarr.h q Sewfce Mcc- M%i(fuvrkp 孑 MiCi/yrrr Q Maeif teyerzJ fcMcwU MtCKl 2沖 “cM“l(fā)gyo0b8 “ *川80(WE . 0#include od. hpptpraffna oncel/ CMub icPl ayerDls 丈1適惟k1469 CMuslcFlayerDls : public CDLaleprotected:FMOD: :System *mSy-;tr z 卩MOD
5、: : Sound *m:c i i FMOD:Channel *mC i - r1mChannel = NULL:1創(chuàng)建一個壘于對話框的項冃.命名為MusicPIayer2、ri MusicPIayer.h的頂端includerf頻引擎的頭文件:#inelude 3、為MusicPIayer.h?加依籟項:fmod vc.lib4、為class CMusicPIayerDIg添加如下的成員:FMOD:System wmSystem; FMOD:Sound *mSound; FMOD:Channel *mChannel;5、編寫音頻引翠的初始化代碼/ MusicPlayerDlg.cppll,
6、BOOL CMusicPlayerDlg:OnlnitDialog()省略/TODO: 4此添加額外的初始化代碼初始化咅頻引擎系統(tǒng)FMOD:System_Create( &mSystem ); mSystem-init( 200, FMODJNIT_NORMAL. 0 ); mSound = NULL; . 0/ MusicPIayerDIg.h 中/為class CMusicPIayerDIg添加個成員隨數(shù)聲明:/ filename :你文件路彳仝void PlayMusic(const char* filename);/ MusicPIayerDIg.cpp111定義PlayMusic函數(shù)
7、void CMusicPlayerDlg:PlayMusic(const char* filename) 如果冇聲道正在播放,停止播放if( mChannel != NULL)mCha nn el-stop();如果m Sound不為空釋/AmSoundif( mSound 匚 NULL )mSound-release();mSystem-createStream( filename, FMOD DEFA mSystem-playSound( FMOD CHANNEL FREE, SmChannel); . 0計算機技術培訓qP心,為對話梅添加個Button,并H把HCaption改為“Pla
8、y 01.mp3M . 件改名為O1.mp3JiL變制到MusicPIay項冃所fT的口錄 匸 雙rlrPlay O1.mp3添加單擊響應。/ MusicPIayerDIg.cpp 屮void CMusicPlayerDlg:OnBnClickedButtonPlayonemusic()PlayMusicC01.mp3 J;運行.并忖點擊一下按鈕。把-首音樂文Buttoe0 MuiicP1yera| Ol.fTp2v awcicBwc M Edt Comrc- 詡 Combo Boa HI lift Bow n Grop BonAm dUTi 畫CCTLO 3D Horzcntjl SereI
9、I &or 國 VertK;al Sroll Gar4 Slider Control Spin Control ftrorew Ccerol Hot Key List Control *re CorelKpnfe計算機技術培訓t心#添加個List Box利個Button并4對石控件右泄屈件.修改其加件值修改左的值如衣所示:List BoxButton屈性名 帕性值IDIDCJJ ST_MUSICSCaption Add MusicIDIDC_BUTTON_ADDPQV01.rn)3AcdMv 火 |PC Check Box*lCcrrolComoo Box碣迄III Group Bak 儈 R
10、edo ButtonAil Static Text SR Picture Control 麗 Hcxirotnal Sell S Vsgl icrol Bar o- Slider Corclc KAn*wior*cCojren, (ff rotator not reo-rQ -CaCBC Controlvanefatefjam. rtj5tw*MPCSCrtroi P: !CCjjy_KtCSCategory: ControlVariable name: mListBoxMusicsCUstCcxVcorol tzpeCortB rooert*機技術培訓qp心乂| PK Ol.n301.-T0
11、303.mp301.TO3雙擊名為”Add Music-的Button.添加單擊響應:/ MusicPIayerDIg.cpp中void CMusicPlayerDlg:O nBnCllckedBuMonAdd()mListBoxMusics.AddString( T(M01 .mp3”); 嘗試運彳幾巾擊按鈕我們的冃的:1 點 ikAdd Music2、彈出個打開文件對話框3、選中文件4、添加到List Box中去(ListBox/*文件的完整路彳乞)打開或者保存文件對話框可以用CFIIeDialog-其構造函數(shù)如卜:explicit CFileDialog(BOOL bOpenFileDi
12、alog, / TRUE for FileOpen, FALSE for FileSaveAsLPCTSTR IpszDefExt = NULL,LPCTSTR IpszFileName = NULL,DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,LPCTSTR IpszFilter = NULL,CWncT pParentWnd = NULL,DWORD dwSize = 0.BOOL bVistaStyle = TRUE);修改Add Music Button的甲擊響血函數(shù)/ MusicPIayerDIg.cpppvoid C
13、MusicPlayerDlg:O nBnClickedButtonAdd()CFileDialog dlg(TRUE,/TRUE打開文fh FALSE保存文件0,默認打開的文件的后綴0,默認的文件名.0農(nóng)示沒育默認文件4|2f標志用默認的4|2就行_TMusicFileCmp3)rmp3)/文件過濾.只保留厲綴為mp3的文件if( dlg.DoModalQ = IDOK )/ 顯示對話框返回文件名/ CString fileName = dlg.GetFileName(); 返回完整的文件路徑CString fullPath = dlg.GetPathName(); mListBoxMusic
14、s.AddString( fullPath ); 處成 式込行,并S加mp3 z f i機技粗咅訓中心List Box-右說屬性 卅件LBN一DBCLICK添丿JUXZ擊響應川P戍擊Lis活ox的咅樂文們名時,就播放相應的音樂。編寫響應p*l數(shù)。Prcpert*e斗 XIOC LIST MUSICS (Uxboa Coni 麝MEL機技術培訓中心CurCopyAdd Evwt HandlerInsert ActiveX Controls.Add Clan.Add V,rib taAfign TopsLBTV_KILXXn-X LBN.&CLCANC LBN.SCLCM4K LBh.SfTFOC
15、U NMJMEMEaCheck Mnemorwcsvoid CMusicPlayerDlg:OnLbnDblclkListMusics()Prop# woe/ 11標的char字符小/丨1標電匕 /空PlayMusic( cstyleFileName );/播放疔樂if( mListBoxMusics.GetCount()0 ) return;int index = mListBoxMusics.GetCurSelQ; if( index = -1 )/ index = -1 衣示沒冇逑屮 return;獲得當前選中的字符串 CString fileName; mListBoxMusics.G
16、etText( index, fileName );轉化成cha廣字符中 char cstyleFileNameMAX_PATH;WideCharToMultiByte( / 慶寬字符到char的轉化 CP_ACP,/ 轉換成 ANSI 碼0,/歡認為0的標応fileName.GetBuffer(O), / J京寬了符巾 tileName.GetLength()+1f / 字條串長度 cstyleFileName. MAX PATH, NULL; NULL);只算機技術培訓中心丿添加 個進度條Process Control,來控制疔樂的播放進度。 修改進度條屈件Process ControlI
17、DIDC PROGRESS右鍵進丿復條添加變雖I P&V 01-HO3Process ControlCategoryVariable name mProcessC3 Bvttor UT Check Bo 2 Edit Control 旦 Camhe Bom SB IkT Boa ft Of cop Bqa 席 lUdb Butler * 2ttir Txt 囲 Pkxure Control PR Honrontn Scroll B* 趨 Vertical Sc*cil Bar O- Sider Ccrtro 6 Spin Cortiol TlfogrdZonlron P HOC 5 口 Lh
18、Control fe TreCortrol Tab ConerolComment計算彳幾技術培訓qAdd Num.成員變屆值Control少宅翊Process Comrol右饞屬性 事件響應添加NM_RELEASEDCAPTURE 響 應,表示拖動進度條,松開時的 響應。m聽 01 rTp3Q iUDMRNHeft 畫l 士毋B二 BCMJttcPiSoigNM CUCTOMDI進度條用來控件聲樂的播放進度CopyoweDdctecn)o rk 7ouipm (row: Bold J計算機技術培訓q訟j町以便用“圧時器函數(shù),圧時器兄個函數(shù),但址它毎隔泄的時間間隔就執(zhí)行 次,這個時間間隔可以由我
19、們自已來指定。gv 01 fro?対石対話柜 右鍵屬性A消息 WM_TIMER OnTimerU.A ,CutCopy心3XDdHeAddHndLInsert ActiveX ControL.牝Ad g JWe to C5rtmtAlign Ufe7FMge TqqCheck MfiemoRicsJ - /piAM RBCTONDCAMAM.RENDtRALLfAM.RENOERFOR AM.StTCVRSORAM SCTFOCU5AM.SSnNGCW W.SHOWWtNDAM.SIZSCllPfiOAM.SC1NGAM.SPOOIERGT;AM.SYSCMAR AM.scotona AM.5
20、YSC0MMAI OrSyfComnwnd計尊機技術i罰|中心AM.SYSKEVDO.V AM.SSWHJP AMJCAADAM_TWMECHAhAM TVcl(CHANgetPosition( &curPosition, FMOD_TIMEUNIT_MS ); 、丄條的位宣-一mProcess.SetPosf curPosition );訐算嘰技術:培訓/ MusicPlayerDlg.cpp,|,修改O nTimer用數(shù)void CMusicPlayerDlg:OnTimer(UINT PTR n ID Event)if( mChannel != NULL)獲得音樂當前播放的位用單位宅秒u
21、nsigned int curPosition;mChannel-getPosition( &curPosition, FMOD_TIMEUNIT_MS ); 卍卅胡條的位月二mProcess.SetPos( curPosition );unsigned int second = curPosition/1000%60; unsigned int minute = curPosition/1000/60%60J CString strTime;運行CDialog:O nTimer(nlDEvenl);strTime.Format( _T(u%d:%dM). minute, sec mStati
22、cTime.SetWindowTextf strTime);機技術培訓I個播放器應該有播放 “初停、“停止”下iT “上忡按鈕Pay 01.*setPaused( false );暫停音樂void CMusicPlayerDlg:OnBnClickedButtonPause() if( mChannel != NULL)mChannel-setPaused( true );停il:音樂void CMusicPIayerDIg:OnBnClickedButtonStopOif( mChannel != NULL)mCha nn el-stop(); 一 -WL 七r-計算機技術培訓中心下-Wvo
23、id CMusicPlayerDlg:OnBnClickedButtonNext()int index = mListBoxMusics.GetCurSel();if( index =1 | index + 1 = mListBoxMusics.GetCount() return;in dex+;CString fileName;mListBoxMusics.GetText( index, fileName); mListBoxMusics.SetCurSel( index );/轉化成cha廣字符笊char cstyleFileNameMAX_PATH;WideCharToMultiByte
24、( / 從寬 7行到char的傳化CP_ACP,/轉換成ANSI碼0,/默認為0的標吉fileName.GetBuffer(O), / 原寬字符巾 fileName.GetLength()+1, / j 條;1 度 cstyleFileName, / 白標的char字符串*MAX_PATH,冃標/ 符;I K度 /NULL,空J /NULL);/ 空7*PlayMusic( cstyleFileName );/播放上一首void CMusicPlayerDlg:OnBnClickedButtonPreview()自己完成甘樂播成器的功能還自保存列農(nóng)、儀入列農(nóng)的功能。叮以蘭試1(2完成。另外,列農(nóng)中的了符申是完鶴的文 件路彳b IE常難看.有什么辦法可 以只在列表中只顯示文件名,但乂 叫以播放到相應的文件呢?廿仙3 IIj Md Mjk J State捉示:可以使用std:map來實現(xiàn) std:map的A體用広對攻白l!住找0-P折I Ps I | S3| 卩訶訥;