简单多媒体制作实验报告

时间:2024.3.31

多媒体播放器实验报告

项目名称:                        

专业年级:                         

姓    名:                        

学    号:                        

指导教师:                        

 

                                      

   

20##年11月24日

目录

一  问题定义与可行性研究. 2

1   问题定义. 2

2  可行性研究. 2

二  需求分析. 3

1 功能描述:. 3

三  开发平台的介绍. 3

四   概要设计. 4

五   多媒体设计过程. 4

1 模块实现函数说明. 4

2 界面设计. 5

3 播放列表. 5

4 添加文件. 6

5 保存列表. 8

6 播放文件. 9

(1)视频AVI格式. 9

(2)Wma格式音乐. 10

(3)MP3 格式音乐. 10

6 退出程序. 10

六 心得体会. 11

七  参考文献. 11

八 源代码. 11

一  问题定义与可行性研究 

本章分两部分,问题定义和可行性研究。问题定义阶段主要研究我们所学的知识能做什么项目,而可行性研究给出了制作视频播放器可行性。

1   问题定义

本次的课程设计就是利用MFC强大而全面的类库,结合ActiveX控件资源开发一款简单而实用的多媒体播放软件。

本次课程设计制作的多媒体播放器是利用Windows系统自带的Windows Media Player控件,可以分别通过按钮和菜单实现*.mp3、*.avi、*.wma、等媒体文件的打开、播放、保存、关闭等功能。同时具备自制的播放列表。

2  可行性研究

MFC(Microsoft Foundation Class)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库提供了高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。本文基于MFC环境下利用Windows Media Player控件实现了音频视频文件的播放。而上学期,学习了很多MFC编程的相关知识,已经具备开发该软件的能力。

二  需求分析 

1 功能描述:

本播放器主要有三种功能:第一、对文件进行操作;第二、对按钮的处理。

①对文件的操作

通过文件的读写知识,实现了对文件的浏览,在窗口中删除已经选取的歌曲或视频,清空原有的列表框,对已经选中的文件进行播放,以及通过双击列表框中的歌曲或视频来播放相应的文件。

②对按键的处理

对各种按键创建了类向导,并添加了事件处理,可以处理基本的浏览、播放、删除、清空等操作。

三  开发平台的介绍

   Microsoft Visual C++6.0

Visual C++6.0 是Microsoft公司在1998年推出的基于Windows 9X和Windows NT的优秀集成开发环境。该环境为用户提供了良好的可视化编程环境,程序员可以里利用该开发环境轻松地访问C++源代码编辑器,资源编辑器和使用内部调试器,并且可以创建项目文件。Visual C++6.0不仅包括编译器,而且它还包括许多有用组件,通过这些组件的协同工作,可以在Visual C++6.0集成环境中轻松地完成创建源文件,编辑资源,以及对程序的编译,连接和调试等各项工作。

MFC(Microsoft Foundation Class)是用来编写Windows应用程序的C++类集,其中封装了大部分WindowsAPI函数和Windows控件,使用MFC类库和Visual C++提供的高度可视的应用程序开发工具,可使应用程序开发变得简单,提高代码的可靠性和可重用性。随着多媒体性能的极大提升,程序中经常要播放一段视频或者一段音频,如果能够简单地插入音频和视频,将极大缩短程序的开发时间。本文基于MFC在Visual C++环境下利用Windows Media Player控件实现了音频视频文件的播放。它的源程序按C++语言的要求编写,并加入了微软提供的功能强大的MFC(Microsoft Foundation Class)类库。 MFC功能涉及到整个Windows操作系统。MFC不仅给用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件,这样,开发人员不必从头设计创建和管理一个标准Windows应用程序所需的程序,而是从一个比较高的起点编程,故节省了大量的时间。另外,它提供了大量的代码,指导用户编程时实现某些技术和功能。

因此,使用VC++提供的高度可视化的应用程序开发工具和MFC类库,可使应用程序开发变得简单。VC++6.0有很好的调试功能。VC基于C,C++语言,主要由是MFC组成,是与系统联系非常紧密的编程工具,它兼有高级,和低级语言的双重性,功能强大,灵活,执行效率高,几乎可说VC在 Windows平台无所不能。

四   概要设计

 

 

列表模块:显示歌曲。

打开模块:打开目标文件,如音频、视频文件。

保存模块:保存列表中的文件存储地址和文件名称。

播放模块:播放音频、视频文件,播放列表。

关闭模块:关闭播放器。

五   多媒体设计过程

1  模块实现函数说明

这些实现模块功能的具体函数均属于CMFCDlg类,它是在建立MediaPlayer工程时由MFC建立的一个对话框的类,在该对话框上进行的操作函数即可实现程序所需要的所有功能,其实现函数则是调用ActiveMovie控件的相关函数,从而完成各项具体功能。各个模块的具体实现函数描述见下表所示:

2 界面设计

设计界面如下图所示,其中播放控制按钮有播放列表,添加文件,保存列表,播放文件,退出程序。其他控件有WMPlayer和List1。

3 播放列表

void CMFCDlg::Onlist()

{

 flag=!flag;

    if(!flag)

    {

        SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);

    }

    else

    {

        SetWindowPos(NULL,0,0,680,340,SWP_NOMOVE);

    }

}

函数注解:BOOL SetWindowPos(HWND hWnd, HWND hWndInsertAfter, int x, int y,int cx, int cy, UINT nFlags);

函数作用: 调用这个成员函数以改变子窗口、弹出窗口和顶层窗口的大小、位置和Z轴次序。窗口在屏幕上按照它们的Z轴次序排序。在Z轴次序上处于顶端的窗口将程序在所有其它窗口的顶部。子窗口的所有坐标都是客户坐标(相对于父窗口客户区的左上角)。窗口可以被移动到Z轴次序的顶部,既可以通过将pWndInsertAfter参数设为&wndTopMost,并确保没有设置SWP_NOZORDER标志,也可以通过设置窗口的Z轴次序使它位于所有现存的顶层窗口上方。当一个非顶层窗口被设为顶层窗口时,它拥有的窗口也被设为顶层的。它的拥有者不发生变化。如果顶层窗口被重新定位到Z轴次序的底部(&wndBottom)或任何非顶层窗口之后,则它将不再是顶层窗口。当顶层窗口被变为非顶层窗口时,它所有的拥有者和它拥有的所有窗口都被变为非顶层窗口。

参数作用:

pWndInsertAfter  标识了在Z轴次序上位于这个CWnd对象之前的CWnd对象。这个参数可以是指向CWnd对象的指针,也可以是指向其他值的指针。

x指定了窗口左边的新位置。 y指定了窗口顶部的新位置。cx指定了窗口的新宽度。 cy指定了窗口的新高度。 nFlags指定了大小和位置选项。当其值为SWP_NOMOVE 表示保持当前的位置(忽略x和y参数)。

4 添加文件

void CMFCDlg::Onadd()

{

char szFileFilter[]="媒体文件(*.avi,*.mp3,*.wma)|*.avi;*.mp3;*.wma;|"; 

 CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,szFileFilter);

POSITION pos=dlg.GetStartPosition();

if (dlg.DoModal()==IDOK)

{

while(pos!=NULL)

{

    m_pathname=dlg.GetNextPathName(pos);

    m_list.AddString(m_pathname);

}

}

}

类注解:

CFileDialog类封装了Windows常用的文件对话框。常用的文件对话框提供了一种简单的与Windows标准相一致的文件打开和文件存盘对话框功能。可以用构造函数提供的方式使用CFileDialog,也可以从CFileDialog派生出自己的对话类并编写一个构造函数来适应你的需要。每种情况下,对话框都与标准MFC对话框一样工作。因为它们都是CCommonDialog类的派生类。 

构造函数:

DoModal显示对话框并使用户可以进行选择。初始化对话框控件后,调用DoModal成员函数显示对话框并使用户输入路径和文件。DoModal返回不论是用户选择了OK(IDOK)还是取消(IDCANCEL)按钮。

GetNextPathName返回下一个选定文件的完整路径

GetStartPosition返回文件名列表的第一个元素位置

5 保存列表

void CMFCDlg::Onsave()

{

CStdioFile file;

file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);//打开文件

for (int i=0;i<m_list.GetCount();i++)

{

CString strtemp;

m_list.GetText(i,strtemp);

strtemp+="\n";   //需要换行

file.WriteString(strtemp);

}//对文件进行写操作

file.Close();//关闭文件

}

6 播放文件

void CMFCDlg::Onplay()

{

                   m_player.SetUrl(m_pathname);

        

}

(1)视频AVI格式

(2)Wma格式音乐

(3)MP3 格式音乐

6 退出程序

程序代码:

void CMFCDlg::Onexit()

{

    OnOK();

}

六 心得体会

经过一个星期的努力,终于在所学习的MFC的基础上,设计制作一款小巧实用的多媒体播放器。在课程设计过程中,虽然遇到了很多问题,但是经过反复查阅资料和不断尝试,以及和其他同学的讨论,最终顺利完成了设计工作,调试过后可以在要求的条件下完美运行。当然,能力水平有限,所以播放器的功能不多,还不能播放更多格式比如rmvb,flv,wmv等格式的视频文件,但完全可以实现日常的媒体播放任务。

本次设计任务并不是很难,主要依据在互联网上找了一个关于制作简单音乐播放器的视频,通过跟随操作以快速熟悉相关控件、变量、函数等之间的关联。幸好,Windows Media Player这一控件本身提供的操作函数很丰富,可以直接调用。随着不断的学习,我对这一控件和这次设计的目标越来越熟悉,逐渐产生了一些想法,通过附加一些简单的命令语句,使软件更加的人性化,操作界面更加友好。尽管如此,我觉得自己制作的多媒体播放器的可用性实在不佳,虽然能够实现基本功能,在程序结构方面应该还有很大的优化空间。

总之,通过自己的努力完成了本次设计工作,内心很有成就感,但是我也知道,我所做的设计都是拿别人的成果重新进行组建。如果想要在软件方面有所发展,那还有很长的路要走。同时我也明白了,想要把学习的知识变成自己的,就要在学习的过程中,不断的融入自己的思想,更加创新和人性化。

七  参考文献

【1】黄维通,贾续涵.Visual C++面向对象与可视化程序设计[M].北京:清华大学出版社,20##年

2梁普选.Visual C++程序设计与实践:实验与指导[M].北京:清华大学出版社,北京交通大学出版社,20##年

【3】Charles Petzold 著,方敏 译,清华大学出版社出版的《windows程序设计》

【4】 刘雅琴,夏玉杰. 基于MFC的多媒体播放器的实现[J]. 信息技术, 2009,(03) .  

【5】 龚月琴. 多功能媒体播放器的设计与开发[J]. 福建电脑, 2004,(07) .

【6】.Charles Petzold 著,方敏 译,清华大学出版社出版的《windows程序设计》

八 源代码 

#include "stdafx.h"

#include "MFC视频播放器.h"

#include "MFC视频播放器Dlg.h"

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

int flag;

CString m_pathname;

/////////////////////////////////////////////////////////////////////////////

// CAboutDlg dialog used for App About

class CAboutDlg : public CDialog

{

public:

   CAboutDlg();

// Dialog Data

   //{{AFX_DATA(CAboutDlg)

   enum { IDD = IDD_ABOUTBOX };

   //}}AFX_DATA

   // ClassWizard generated virtual function overrides

   //{{AFX_VIRTUAL(CAboutDlg)

   protected:

   virtual void DoDataExchange(CDataExchange* pDX);    // DDX/DDV support

   //}}AFX_VIRTUAL

// Implementation

protected:

   //{{AFX_MSG(CAboutDlg)

   //}}AFX_MSG

   DECLARE_MESSAGE_MAP()

};

CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)

{

   //{{AFX_DATA_INIT(CAboutDlg)

   //}}AFX_DATA_INIT

}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)

{

   CDialog::DoDataExchange(pDX);

   //{{AFX_DATA_MAP(CAboutDlg)

   //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)

   //{{AFX_MSG_MAP(CAboutDlg)

       // No message handlers

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMFCDlg dialog

CMFCDlg::CMFCDlg(CWnd* pParent /*=NULL*/)

   : CDialog(CMFCDlg::IDD, pParent)

{

   //{{AFX_DATA_INIT(CMFCDlg)

       // NOTE: the ClassWizard will add member initialization here

   //}}AFX_DATA_INIT

   // Note that LoadIcon does not require a subsequent DestroyIcon in Win32

   m_hIcon = AfxGetApp()->LoadIcon(IDI_ICON1);

}

void CMFCDlg::DoDataExchange(CDataExchange* pDX)

{

   CDialog::DoDataExchange(pDX);

   //{{AFX_DATA_MAP(CMFCDlg)

   DDX_Control(pDX, IDC_LIST1, m_list);

   DDX_Control(pDX, IDC_OCX1, m_player);

   //}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMFCDlg, CDialog)

   //{{AFX_MSG_MAP(CMFCDlg)

   ON_WM_SYSCOMMAND()

   ON_WM_PAINT()

   ON_WM_QUERYDRAGICON()

   ON_BN_CLICKED(IDC_list, Onlist)

   ON_BN_CLICKED(IDC_add, Onadd)

   ON_LBN_DBLCLK(IDC_LIST1, OnDblclkList1)

   ON_BN_CLICKED(IDC_play, Onplay)

   ON_BN_CLICKED(IDC_save, Onsave)

   ON_BN_CLICKED(IDC_exit, Onexit)

   //}}AFX_MSG_MAP

END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////

// CMFCDlg message handlers

BOOL CMFCDlg::OnInitDialog()

{

   CDialog::OnInitDialog();

   // Add "About..." menu item to system menu.

   // IDM_ABOUTBOX must be in the system command range.

   ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);

   ASSERT(IDM_ABOUTBOX < 0xF000);

   CMenu* pSysMenu = GetSystemMenu(FALSE);

   if (pSysMenu != NULL)

   {

       CString strAboutMenu;

       strAboutMenu.LoadString(IDS_ABOUTBOX);

       if (!strAboutMenu.IsEmpty())

       {

          pSysMenu->AppendMenu(MF_SEPARATOR);

          pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);

       }

   }

   // Set the icon for this dialog.  The framework does this automatically

   //  when the application's main window is not a dialog

   SetIcon(m_hIcon, TRUE);         // Set big icon

   SetIcon(m_hIcon, FALSE);    // Set small icon

   SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);//无相对移动

   m_list.SetHorizontalExtent(1000);

   CStdioFile *fsp=new

       CStdioFile(".\\list.txt",CFile::modeRead);

   CString strtemp;

   while (fsp->ReadString(strtemp))

       m_list.AddString(strtemp);

   fsp->Close();

   delete fsp;

  

   // TODO: Add extra initialization here

  

   return TRUE;  // return TRUE  unless you set the focus to a control

}

void CMFCDlg::OnSysCommand(UINT nID, LPARAM lParam)

{

   if ((nID & 0xFFF0) == IDM_ABOUTBOX)

   {

       CAboutDlg dlgAbout;

       dlgAbout.DoModal();

   }

   else

   {

       CDialog::OnSysCommand(nID, lParam);

   }

}

// If you add a minimize button to your dialog, you will need the code below

//  to draw the icon.  For MFC applications using the document/view model,

//  this is automatically done for you by the framework.

void CMFCDlg::OnPaint()

{

   if (IsIconic())

   {

       CPaintDC dc(this); // device context for painting

       SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);

       // Center icon in client rectangle

       int cxIcon = GetSystemMetrics(SM_CXICON);

       int cyIcon = GetSystemMetrics(SM_CYICON);

       CRect rect;

       GetClientRect(&rect);

       int x = (rect.Width() - cxIcon + 1) / 2;

       int y = (rect.Height() - cyIcon + 1) / 2;

       // Draw the icon

       dc.DrawIcon(x, y, m_hIcon);

   }

   else

   {

       CDialog::OnPaint();

   }

}

// The system calls this to obtain the cursor to display while the user drags

//  the minimized window.

HCURSOR CMFCDlg::OnQueryDragIcon()

{

   return (HCURSOR) m_hIcon;

}

void CMFCDlg::Onlist()

{

 flag=!flag;

   if(!flag)

   {

       SetWindowPos(NULL,0,0,480,340,SWP_NOMOVE);

   }

   else

   {

       SetWindowPos(NULL,0,0,680,340,SWP_NOMOVE);

   }

}

void CMFCDlg::Onadd()

{

char szFileFilter[]="媒体文件(*.avi,*.mp3,*.wma)|*.avi;*.mp3;*.wma;|";  

 CFileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_NOCHANGEDIR|OFN_ALLOWMULTISELECT,szFileFilter);

POSITION pos=dlg.GetStartPosition();

if (dlg.DoModal()==IDOK)

{

while(pos!=NULL)

{

    m_pathname=dlg.GetNextPathName(pos);

   m_list.AddString(m_pathname);

}

}

}

void CMFCDlg::OnDblclkList1()

{   CString str;

    int index=m_list.GetCurSel();

   m_list.GetText(index,str);

   m_player.SetUrl(str);

   m_pathname=str;

  

}

void CMFCDlg::Onplay()

{

       m_player.SetUrl(m_pathname);

  

}

void CMFCDlg::Onsave()

{

CStdioFile file;

file.Open(".\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText);

for (int i=0;i<m_list.GetCount();i++)

{

CString strtemp;

m_list.GetText(i,strtemp);

strtemp+="\n";   //需要换行

file.WriteString(strtemp);

}

file.Close();

}

void CMFCDlg::Onexit()

{

OnOK();  

}

更多相关推荐:
多媒体实验报告

多媒体实验报告一姓名方子乙学号20xx00300336班级20xx级软件6班一实验目的1熟悉和掌握使用WindowsMCI进行编程的基本原理和方法2熟悉各种不同的音频文件格式3了解音频压缩的实现方法二实验内容使...

多媒体实验报告

班级姓名学号多媒体技术及应用实验报告U20xx12862Huffman编码一实验内容1了解BMP图像的格式实现BMP图片格式的数据域及文件头的分离2熟悉Huffman编码原理3用C语言使用Huffman编码算法...

多媒体实验报告

多媒体技术班级网络姓名李耿卓学号12023120xx0050多媒体中的多媒体通信技术1交互性交互性是多媒体通信系统区别于其他通信系统的重要标志它是指在通信系统中人与系统之间的相互控制能力交互性为用户提供了对通信...

多媒体技术基础实验报告

多媒体实验报告实验一数字音频实验一实验时间20xx年3月29日一实验目的1了解不同数字音频指标对所生成声音文件音质的影响2掌握音频播放器的基本使用方法3对声音文件进行简单的编辑和特殊效果处理4了解不同编码算法对...

多媒体实验报告

北京邮电大学多媒体通信专业综合实验多媒体通信专业综合实验报告题目窄带话音调频发送与接收系统班级组员学号北京邮电大学多媒体通信专业综合实验目录一课程目的1二实验要求11基本要求12提高要求1三实验分工11发送端1...

多媒体实验报告

多媒体技术期末作业题目用Flash制作一个多媒体作业姓名学号院系专业班级指导老师设计时间20xx20xx学年1学期20xx年12月目录1前言22确定选题33数据准备34系统制作41开始界面42视频界面65代码7...

多媒体技术实验报告

多媒体课程设计报告设计题目:物联网学院:计算机科学与信息学院专业:计科班级:计科101学号:XX学生姓名:XXX指导教师:XX20XX年11月21日目录摘要3第一章物联网简介及发展历程31.1什么是物联网31.…

多媒体实验报告音频处理

上海理工大学计算机工程学院实验报告实验名称课程名称音频处理多媒体技术学号1120xx0306姓名祝雅睿日期20xx11成绩地点机房教师欧广宇第1页共5页上海理工大学计算机工程学院实验报告第2页共5页1实验要求1...

多媒体作品设计与制作实验报告

实验报告20xx至20xx学年度第2学期课程名称多媒体作品设计与制作系别数学与计算机学院班级12数学与应用数学学号120xx31078姓名周康妹指导教师王福成目录实验项目一音频编辑处理CoolEditPro实验...

多媒体技术应用实验报告2

陕西理工学院实验报告20xx20xx学年第2学期实验地点实验室计算机课件制作室实验日期20xx年4月29日成绩院系教科学院专业班级教技1201学号120xx14005学生姓名曾志腾

网站设计基础(1)--多媒体技术基础实验指导书

杭州师范大学杭州国际服务工程学院网站设计基础1多媒体技术基础实验教学指导书软工晏明编写20xx年7月修订目录第一部分大纲和计划11实验教学大纲212实验实施计划表3第二部分实验说明21实验一文字的设计应用1与静...

多媒体作品设计与制作实验报告(汇总) - 副本

实验报告20xx至20xx学年度第1学期课程名称多媒体作品设计与制作系别电气工程系班级12电子信息工程2班学号120xx21094姓名沈左彪指导教师汪永生目录实验项目一音频编辑处理CoolEditPro实验项目...

多媒体实验报告(41篇)