版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上南京工程學(xué)院實(shí) 驗(yàn) 報(bào) 告課程名稱 多媒體編程基礎(chǔ) 實(shí)驗(yàn)項(xiàng)目名稱 音頻和視頻 實(shí)驗(yàn)學(xué)生班級 多媒體132 實(shí)驗(yàn)學(xué)生姓名 滕超 學(xué)號 同組學(xué)生姓名 無 實(shí)驗(yàn)時(shí)間 2016 年 5 月 26 日 實(shí)驗(yàn)地點(diǎn) 信息樓A213 實(shí)驗(yàn)5 音頻/視頻處理一、實(shí)驗(yàn)?zāi)康模?理解Windows系統(tǒng)中音頻、視頻處理的方法。2理解MCI接口的概念。3了解音視頻處理技巧,以及實(shí)際應(yīng)用方法4掌握實(shí)現(xiàn)音頻播放器和視頻播放器的常用方法。 二、實(shí)驗(yàn)環(huán)境及開發(fā)工具:PC機(jī)、Windows 8.1操作系統(tǒng)、Visual C+ 2013三、實(shí)驗(yàn)要求及內(nèi)容:1)理解第9章教材例題及上課所講的參考例程。2)運(yùn)用
2、學(xué)過的知識,在理解例題的基礎(chǔ)上自己編寫一個(gè)多媒體播放器應(yīng)用程序,包括:一個(gè)音頻(MP3、wma)播放器和一個(gè)視頻播放器處理(avi、wmv、asf)程序,要求具有以下功能: 可以播放本機(jī)中的音視頻媒體文件文件; 音頻播放參照課堂提供的例子, 必須創(chuàng)建一個(gè)播放類來實(shí)現(xiàn) 視頻播放可以直接使用WMP控件,適當(dāng)添加針對文件的操作功能。音頻設(shè)計(jì)流程圖:音頻界面設(shè)計(jì)如下:使用CPlayWave類/*PlayWave.h*/#pragma once#include mmsystem.hclass CPlayWave/定義保護(hù)保護(hù)成員protected:MCIDEVICEID m_DeviceID; /記錄波
3、形設(shè)備IDMCIDEVICEID m_ElementID; /記錄波形元素IDpublic:CPlayWave(void);CPlayWave(void);DWORD InitDevice(void);DWORD TeminalDevice(void);DWORD Play(HWND hWnd, LPCWSTR pFileName);DWORD Stop(void);DWORD Pause();DWORD Resume();/*PlayWave.cpp*/#include StdAfx.h#include PlayWave.hCPlayWave:CPlayWave(void)m_DeviceI
4、D = 0; /初始化設(shè)備IDm_ElementID = 0; /初始化元素IDInitDevice(); /調(diào)用InitDevice方法初始化設(shè)CPlayWave:CPlayWave(void)if (m_ElementID) /判斷波形元素是否為0Stop(); /停止波形元素if (m_DeviceID) /判斷波形設(shè)備是否為0TeminalDevice(); /停止波形設(shè)備DWORD CPlayWave:InitDevice(void)DWORD dwResult = 0; /定義一個(gè)整型變量if (m_DeviceID = 0) /如果設(shè)備ID為0MCI_OPEN_PARMS mci
5、InitParms; /定義打開參數(shù)mciInitParms.lpstrDeviceType = (LPWSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;dwResult = mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID| MCI_WAIT, (DWORD)(LPVOID)&mciInitParms); /打開波形設(shè)備m_DeviceID = mciInitParms.wDeviceID;return dwResult;DWORD CPlayWave:TeminalDevice(void)DWORD
6、 dwResult = 0; /定義一個(gè)整型變量if (m_DeviceID) /判斷設(shè)備ID是否為0/關(guān)閉波形設(shè)備dwResult = mciSendCommand(m_DeviceID, MCI_CLOSE, NULL, NULL);m_DeviceID = 0; /將波形設(shè)備ID設(shè)置為0return dwResult;DWORD CPlayWave:Play(HWND hWnd, LPCWSTR pFileName)MCI_OPEN_PARMS mciOpenParms; /定義打開參數(shù)memset(&mciOpenParms, 0, sizeof(MCI_OPEN_PARMS); /初
7、始化參數(shù)mciOpenParms.lpstrElementName = pFileName; /設(shè)置文件名DWORD dwResult = 0; /定義整型變量dwResult = mciSendCommand(m_DeviceID, MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&mciOpenParms); /打開波形元素if (!dwResult)m_ElementID = mciOpenParms.wDeviceID; /獲取波形元素IDMCI_PLAY_PARMS mciPlayParms; /定義播放參數(shù)mciPlayParms.dwCallb
8、ack = (DWORD)hWnd; /設(shè)置播放參數(shù)dwResult = mciSendCommand(m_ElementID, MCI_PLAY,MCI_NOTIFY, (DWORD)(LPVOID)&mciPlayParms); /播放wav文件return dwResult;DWORD CPlayWave:Stop(void)DWORD dwResult = 0; /定義一個(gè)整型變量if (m_ElementID) /判斷波形元素ID是否為0/關(guān)閉波形元素dwResult = mciSendCommand(m_ElementID, MCI_CLOSE, NULL, NULL);m_Ele
9、mentID = 0; /設(shè)置波形元素ID為0return dwResult;DWORD CPlayWave:Pause()mciSendCommand(m_ElementID, MCI_PAUSE, 0, NULL);return 0;DWORD CPlayWave:Resume()mciSendCommand(m_ElementID, MCI_RESUME, 0, NULL);return 0;/*+*/“添加”按鈕的事件處理void CMusicDlg:OnBnClickedAddlist()/ TODO: 在此添加控件通知處理程序代碼/m_List.ResetContent(); /清
10、空列表CFileDialog flDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT| OFN_ALLOWMULTISELECT, L音頻文件|*.wav;*.mp3;*.wma|, this); /定義一個(gè)問價(jià)打開對話框if (flDlg.DoModal() = IDOK) /判斷用戶是否按OK按鈕 POSITION pos = flDlg.GetStartPosition(); /獲取文件名列表的首位置while (pos != NULL) /利用循環(huán)遍歷文件名列表 m_List.AddString(flDlg.GetN
11、extPathName(pos); /將文件名添加的列表框控件中“播放”按鈕添加事件處理void CMusicDlg:OnLbnDblclkList1()/ TODO: 在此添加控件通知處理程序代碼int selIndex = m_List.GetCurSel(); /獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中/定義一個(gè)字符串對象CString str;/根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串m_List.GetText(selIndex, str);/停止播放wave.Stop();wave.TeminalDevice();/開始播放歌曲wave.
12、Play(m_hWnd, str);雙擊列表框播放音樂void CMusicDlg:OnLbnDblclkList1()/ TODO: 在此添加控件通知處理程序代碼int selIndex = m_List.GetCurSel(); /獲取當(dāng)前選擇的列表項(xiàng)索引 if (selIndex != LB_ERR) /判斷是否有項(xiàng)目被選中/定義一個(gè)字符串對象CString str;/根據(jù)索引獲取當(dāng)前項(xiàng)目的字符串m_List.GetText(selIndex, str);/停止播放wave.Stop();wave.TeminalDevice();/開始播放歌曲wave.Play(m_hWnd, str)
13、;“暫?!焙汀袄^續(xù)”事件處理void CMusicDlg:OnBnClickedBstopPlay()wave.Pause();is_stop = !is_stop;GetDlgItem(IDC_BSTOP_PLAY)-SetWindowText(L繼續(xù));if (is_stop)wave.Resume();GetDlgItem(IDC_BSTOP_PLAY)-SetWindowText(L暫停);視頻播放器設(shè)計(jì)流程圖:定義變量:CWMPPlayer4 m_play;CWMPControls m_mediacontrol; /控制按鈕關(guān)聯(lián) CWMPSettings m_mediasetting
14、; /設(shè)置按鈕關(guān)聯(lián) CWMPMedia m_media; /媒體 CProgressCtrl *m_progress; /進(jìn)度條 “打開”按鈕事件處理void CVideoPlayer:OnBnClickedVideoopen()CString filename;CFileDialog dlg(TRUE, NULL, L*.*, OFN_FILEMUSTEXIST,L串流多媒體(*.asf) | *.asf |L音頻視頻交錯(cuò)格式(*.avi) | *.avi |L即時(shí)播音系統(tǒng)(*.rm) | *.rm |L波音音頻設(shè)備(*.wav) | *.wav |L所有文件(*.*) | *.* |);i
15、f (IDOK = dlg.DoModal()filename = dlg.GetPathName();m_play.put_URL(filename); / 播放m_media = static_cast(m_play.newMedia(filename);m_progress-SetRange(0, (int)m_media.get_duration(); /媒體總長度 m_progress-SetPos(0);“播放”按鈕事件處理void CVideoPlayer:OnBnClickedVideoplay()m_mediacontrol.play();“暫?!卑粹o事件處理void CVi
16、deoPlayer:OnBnClickedVideosuspend()m_mediacontrol.pause();“停止”按鈕事件處理void CVideoPlayer:OnBnClickedVideostop()m_mediacontrol.stop();“全屏”按鈕事件處理void CVideoPlayer:OnBnClickedfullscreen()m_play.put_fullScreen(TRUE);“音量-”按鈕事件處理void CVideoPlayer:OnBnClickedVideol()m_mediasetting.put_volume(m_mediasetting.ge
17、t_volume() - 10);“音量+”按鈕事件處理void CVideoPlayer:OnBnClickedVideor()m_mediasetting.put_volume(m_mediasetting.get_volume() + 10);“進(jìn)度條”控件處理void CVideoPlayer:PlayStateChangeOcx1(long NewState)if (NewState = 3) /播放狀態(tài)時(shí), 開啟定時(shí)器 SetTimer(1, 1000, NULL);else if (NewState = 1) /停止時(shí), 關(guān)閉定時(shí)器, 進(jìn)度條回0 KillTimer(1);els
18、eKillTimer(1);void CVideoPlayer:OnTimer(UINT_PTR nIDEvent)if (nIDEvent != 1)return;m_progress-SetPos(m_progress-GetPos() + 1);CDialogEx:OnTimer(nIDEvent);“快進(jìn)”按鈕事件處理void CVideoPlayer:OnBnClickedBtnfront()m_mediacontrol.fastForward(); /快進(jìn) “快退”按鈕事件處理void CVideoPlayer:OnBnClickedBtnback()m_mediacontrol.fastReverse();
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 年度高品質(zhì)人造石英晶體戰(zhàn)略市場規(guī)劃報(bào)告
- 年度陶瓷制零件相關(guān)陶瓷制品競爭策略分析報(bào)告
- 2024版煤礦基建施工安全協(xié)議
- 2024版房屋裝飾裝修管理服務(wù)協(xié)議書
- 2024版房地產(chǎn)增資入股合同范本3篇
- 2024民宿布草租賃及民宿客房用品更新?lián)Q代合同3篇
- 二零二五年度水泥企業(yè)品牌保護(hù)與維權(quán)合同2篇
- 廠房租賃安全、環(huán)保責(zé)任協(xié)議書
- 2025版汽車零部件國際包銷合同3篇
- 二零二五年度企業(yè)間環(huán)保設(shè)施運(yùn)行保密與污染治理協(xié)議3篇
- 《存量房交易稅費(fèi)申報(bào)表》
- 第21套操作真題211小題題目
- 2023版押品考試題庫必考點(diǎn)含答案
- 養(yǎng)羊場應(yīng)急預(yù)案演練
- 了解慢阻肺疾病 控制治療慢阻肺課件
- 粒缺伴發(fā)熱指南 -中國中性粒細(xì)胞缺乏伴發(fā)熱患者抗菌藥物臨床應(yīng)用指南
- 昆明天大礦業(yè)有限公司尋甸縣金源磷礦老廠箐-小凹子礦段(擬設(shè))采礦權(quán)出讓收益評估報(bào)告
- GB/T 9978.5-2008建筑構(gòu)件耐火試驗(yàn)方法第5部分:承重水平分隔構(gòu)件的特殊要求
- GB/T 7409.3-2007同步電機(jī)勵(lì)磁系統(tǒng)大、中型同步發(fā)電機(jī)勵(lì)磁系統(tǒng)技術(shù)要求
- GB/T 5231-2001加工銅及銅合金化學(xué)成分和產(chǎn)品形狀
- GB/T 39965-2021節(jié)能量前評估計(jì)算方法
評論
0/150
提交評論