MP3音乐播放器实验报告

MP3音乐播放器实验报告
MP3音乐播放器实验报告

河南科技大学

课程设计说明书

课程名称面向对象程序课程设计

题目MP3仿真程序设计

院系电子信息工程学院

班级计103 班

学生姓名

指导教师

日期 2013.3.3~2013.3.17

课程设计任务书

任课教师:时间:2013.3.3

课程设计报告文档

题目:MP3仿真程序设计

一.引言

1.编写目的:

随着多媒体技术的发展,如何简单方便的播放各类媒体已成为人们普遍关注的问题。本设计就是基于面向对象技术,利用VC++6.0开发制作一个具有自己设计风格的简单的多媒体MP3播放器。该播放器是基于MFC集成开发环境,利用MCIWnd类,建立了一个MP3播放器,通过调用这个类的函数来实现MP3播放器的暂停,播放,上一首,下一首,快进等基本功能。它外观简洁,操作简便,系统资源占用少等功能。通过MP3仿真程序设计,更加深入了解面向对象的编程。通过本课程设计,巩固面向对象程序设计的基本概念、原理和技术,学会使用C++语言进行简单程序的开发,将理论与实际相结合,并在此基础上强化了实践意识,提高其实际动手能力和创新能力。

2.定义:

HWND m_PreAudio,m_Audio;

bool m_IsPaused,m_IsOpened;

前两个变量用来存储MCIWndCreate返回的窗口句柄,初始值为NULL;后两者分别用来记录文件的播放与暂停状态,初始值分别为true与false;

3.参考资料:

1.郑秋生、吴庆涛,《C/C++程序设计》,北京:电子工业出版社

2.谭浩强《C++程序设计》,北京:清华大学出版社

二.任务的描述

1.目标:

利用C++编写制作一个MP3播放器。

2.功能描述:

实现添加音乐,播放音乐,上一首,下一首,暂停,关闭播放,删除音乐,快进控制,循环播放,背景添加等功能。

3.性能描述

(1)数据精确度:各种按钮点击之后1秒内都会触发点击事件,其中快进拖动,反应时间在1—2秒。

(2)时间特性:程序2秒内就可以运行。功能按钮1秒内触发点击事件。4.运行环境:

硬件:装有Windows操作系统的计算机

软件:Visual C++6.0(编译环境)

5.条件与限制:

硬件:装有Windows操作系统的计算机

三.任务设计

1.类的划分:

CMyplayerDlg 多媒体播放器主程序。MCIWnd类,实现对音乐文件的添加、播放等控制,CFileDialog 类,打开特定格式的音乐文件,CListBox类,实现音乐歌曲名的列表框显示CFileFind类,对音乐文件的查找等。

2.对各个类的介绍:

(1)CMyplayerDlg多媒体播放器主程序

(2)MCIWnd类:MCI,是Media Control Interface的简写,也就是多媒体控制接口.它提供一组标准的命令,用来播放多媒体设备和记录多媒体资源;MCIWnd是一个控制多媒体设备的基于MCI的窗口类,要制作多媒体封面只需创建该类的一个窗口,然后向它发送打开和控制MCI设置的消息。

MCIWnd窗口底部的播放条(Playbar )包括一个播放/暂停(Play/Pause)按键、一个显示菜单(menu)按键和一个用于报告播放进程的标尺。在播放窗口的任何地方单击鼠标右键都会显示一个弹出菜单, 用于调整MCIWnd窗口的大小、MCI多媒体文件的声音、速度的大小、MCI命令等。

备注:MCIWnd并不属于MFC,因此不能从MCIWnd派生类。

MCIWnd类的基本函数(1)

MCIWndCreate(hwndParent,hInstance,dwStyle,szFile) 用于创建MCIWnd类的窗口;

hwndParent为父窗口句柄(拥有MCIWnd的窗口)

hInstance是程序句柄(通常可以利用AfxGetInstanceHandle()获得程序句柄) dwStyle定义了MCIWnd的窗口类型

szFile是供播放的MCI文件名,可以是MCI支持的各种类型文件,可以为NULL。MCIWndCreate()返回MCIWnd的窗口句柄,用于其他MCI Wnd函数。

注意:每次播放都要调用此函数打开设备,结束后要调MCIWndDdetroy (hWnd)关闭设备。

dwStyle的类型:

1.MCIWNDF_常量

MCIWNDF_NOAUTOSIZEWINDOW

MCIWNDF_NOPLAYBAR

MCIWNDF_NOAUTOSIZEMOVIE

MCIWNDF_NOMENU

MCIWNDF_SHOWNAME

MCIWNDF_SHOWPOS

MCIWNDF_SHOWMODE

MCIWNDF_SHOW ALL

2. WS_窗口类型常量,缺省为WS_CHILD|

WS_BORDER|WS_VISIBLE

所有这些函数都使用创建(MCIWndCreate)时获取的HWND句柄作为参数,返回一个long的值,0代表成功,其它为错误码;

MCIWndPlay(hWnd) 开始从文件开头播放,其参数hWnd为MCIWnd类的一个窗口句柄,也就是MCIWndCreate函数返回的值;

MCIWndPause(hWnd) 实现暂停功能;

MCIWndHome(hWnd) 返回至起始位置;

MCIWndResume(hwnd) 暂停后继续播放;

MCIWndStop(hWnd) 停止播放;

MCIWndDdetroy(hWnd)该函数向窗口发送WM_CLOSE消息,窗口接收到该消息之后,关闭所打开的MCI文件,并关闭窗口。

图--播放函数流程图

(3)CFileDialog 类:

作用:打开特定格式的文件

实例化CFileDialog 类的一个对象CFileDialog FileOpenDlg(TRUE,NULL,NULL, OFN_HIDEREADONLY,szFileFilter,CWnd* pointer);

TRUE表示建立一个打开文件的对话框,若为FALSE则表示建立“文件保存为”的对话框;

第五个变量指定了过滤的文件类型,本例可以将其设为Mp3格式,即“Mp3 File(*.mp3)|*.mp3|”,其他参看MSDN;

该函数的原型为

CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt= NULL,

LPCTSTR lpszFileName= NULL, DWORD dwFlags=

OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR

lpszFilter = NULL, CWnd* pParentWnd = NULL );

(4)CListBox类:

为列表框关联CListBox类的变量m_PlayList;

每次打开文件时都自动将文件添加到列表中,代码如下:if(m_PlayList.FindStringExact(-1,FileName)==LB_ERR)

{

m_PlayList.AddString(FileName);

}

m_PlayList.SetCurSel(m_PlayList.FindStringExact(-1,FileName));

说明:第一个函数查找在列表框中是否存在相同项(参数一为起始位置的索引,参数二为查找的项目),是则返回该列表的索引(从零开始),否则返回LB_ERR;第二个函数用于用于加载列表项;第三个函数使被选项处于高亮度显示状态,其参数为被选项的索引;

CListBox相关函数原型

int FindStringExact( int nIndexStart, LPCTSTR lpszFind ) const;

int AddString( LPCTSTR lpszItem );

int SetCurSel( int nSelect );

int GetSelCount( ) const;

int GetCaretIndex( ) const; int GetCurSel( ) const;此两函数功能相似,均为获取当前选择项的索引;

int GetText( int nIndex, LPTSTR lpszBuffer ) const;

int GetCount( ) const;

类5;CFileFind类。

CFileFind类的相关函数

virtual BOOL FindFile( LPCTSTR pstrName = NULL, DWORD dwUnused = 0 ); virtual BOOL FindNextFile( );

virtual CString GetFilePath( ) const;

这三个函数中,前两个函数必须依次序同时调用,且FindNextFile( )在FindFile ()之后; GetFilePath( ) 函数调用之前必须先至少一次调用FindNextFile();

四.编写代码

1.问题1

(1)问题描述:同时播放两首或者多首歌曲。

(2)解决办法:为了避免出现两首歌曲同时播放的现象,我们先判断是否已经有歌曲在播放:是,则停止播放该文件,然后再播放新的文件;否,则直接播放文件;

实现上述功能的基本方法:每次创建MCIWnd窗体时,将返回值同时付给m_PreAudio,m_Audio;

具体代码如下:

if(m_Audio == NULL)

{

m_Audio = m_PreAudio=MCIWndCreate(this->GetSafeHwnd(),

AfxGetInstanceHandle(),

WS_CHILD|WS_VISIBLE|MCIWNDF_NOMENU,PathName);

CString str;

str.Format("正在播放:%s",FileName);

SetDlgItemText(IDC_STATUS_STA TIC,str);

m_IsOpened=true;

}

else

{

MCIWndHome(m_Audio);

}

MCIWndPlay(m_Audio);

m_IsPaused=false;

2.问题2

(1)问题描述:编写上述程序,编译、运行,会发现在播放一首歌曲的时候,再播放其他歌曲,这时会变得很混乱,多首歌曲同时播放;

(2)解决办法:先判断m_IsOpened的值,如m_IsOpened 的值为true,表示有歌曲正在播放,因此要先停止该设备;

if(m_IsOpened==true)

{

MCIWndStop(m_PreAudio);

MCIWndDestroy(m_PreAudio);

}

3.问题3

(1)问题描述:当列表中有多项时,双击只能播放最后加到列表中的一首,这是因为:每次使用OpenFiles()打开文件时,FileName与PathName均被赋新值,因此在播放Play()时,播放的是最后一次的PathName;

(2)解决方法:在Play()函数中,添加如下代码:

if(m_PlayList.GetSelCount()==LB_ERR) //得到被选择项的项目总数

{ 对于单选择的列表框返回LB_ERR

int nIndex;CString str;

nIndex=m_PlayList.GetCaretIndex();//得到当前选择项的索引

m_PlayList.GetText(nIndex,str);//获取文本,本例即文件名,赋给str

CFileFind FileFind; //实例化CFileFind类的对象

FileFind.FindFile(str,0); //打开文件搜索

FileFind.FindNextFile(); //检查所找到的是否唯一,否,返回非零

PathName=FileFind.GetFilePath();//返回找到文件的路径

m_IsOpened=true;

FileName=str;

}

五.运行结果与分析

1.程序运行的过程:程序可以实现音乐的添加,播放,暂停,上一首,下一首,删除,快进等功能,但是,音量调节上的功能由于时间等原因未实现。

2.类的构造顺序:CMyplayerDlg类MCIWnd类,CFileDialog 类,CListBox 类,CFileFind类。

3.错误描述及其解决办法

(1)问题1:当没有歌曲时,点击播放会导致程序崩溃。

问题描述:假如列表中没有歌曲,点击播放或者删除的话会导致程序崩溃,因为,之前没有写判断函数,导致程序无法执行,所以崩溃。

解决办法:在播放函数中添加判断列表框是否有音乐,若有,则执行播放,若没有,则提示。代码如下:

int length;

nIndex=m_PlayList.GetCurSel();//0

nIndex+=1;

length=m_PlayList.GetCount();//获取当前列表项数

if(length==0)

{

m_PreTrack.EnableWindow(false);

AfxMessageBox("没有歌曲,请添加播放歌曲!");

m_PreTrack.EnableWindow(true);

}else if(m_Audio != NULL)

{

int i;

i=m_PlayList.GetCurSel();

m_PlayList.GetText(i,PathName);

m_Audio = m_PreAudio=MCIWndCreate(this->GetSafeHwnd(),AfxGetInstanceHandle(), WS_CHILD|WS_VISIBLE|MCIWNDF_NOMENU,PathName);

CString str;

str.Format("正在播放:%s",FileName);

SetDlgItemText(IDC_STATUS_STA TIC,str);

m_IsOpened=true;

}

(2)问题2

问题描述:如果删除的是最后一首歌曲,则会弹出两次提示框。但是不影响使用,只对用户体验稍微影响。

解决办法:因为删除完当前歌曲后,调用了下一首OnNextTrack()函数,而此函数调用了播放OnPlay()函数,因为在OnNextTrack()和OnPlay()函数中都做了判断列表框是否有歌曲,如果没有则会提示添加歌曲,所以会弹出两次“没有歌曲,请添加歌曲”的提示。对于此问题,对功能影响不大,由于时间有限,所以未做完善。

六、感想认识

面向对象编程首先给我们带来了极大的兴趣。可视化的操作给程序设计者提供了很大的便利。经过这一学期VC++的学习,我学到了很多,而且在这一段时间的实际动手学习中,我对VC++这门课程又有了更深刻的认识,基本掌握了用MFC创建基于对话框的应用程序的方法,同时了解了MCI相关知识。这次MP3播放器的设计主要对.mp3音频格式的文件实现播放控制:播放/暂停歌曲、停止播放、上/下首歌曲切换、删除歌曲、添加背景、循环播放、快进等功能;本次设计虽能实现MP3播放器的基本功能,但仍然存在着许多不足,音量的控制始终没有做好,由于时间等原因,最终交程序的时候还是没有调试好对音量的控制。

编程虽然遇到很多问题,过程中苦恼,着急等,但是收获同样是巨大的,在设计中每解决一个问题,那种成就感是无法言语的。编程中遇到的诸多问题,后来经过自己思考,找同学咨询,借助参考书资料以及网络资源,找到了问题所在,进行了多次修改调试之后终于得到了运行结果,这让我感觉到了学会收集资料也是很重要的,可以在这个过程中学到不少知识。在这过程中,老师和同学的帮助还是很大的,特别是老师的指导,能够更加了解到程序的设计等知识的重要性。

最后,通过这次设计,不但学会了如何去利用课本和参考资料,而且提高了设计和制作过程中解决实践问题的能力,把在课堂所学的知识灵活运用,理论联系实际,为以后的学习和工作打下了扎实的基础。其次,提高了自己的分析问题和软件调试能力,同时也大大提高了VC++6.0软件编程的能力,相信这次的收获远远大于做出程序本身。

七.程序代码

略(见电子版)

计算机系课程设计指导教师评分表

// MusicPlayerDlg.cpp : implementation file

//

#include "stdafx.h"

#include "MusicPlayer.h"

#include "MusicPlayerDlg.h"

#include "vfw.h"

#include "mmsystem.h"

#pragma comment(lib,"winmm.lib")

#include

#ifdef _DEBUG

#define new DEBUG_NEW

#undef THIS_FILE

static char THIS_FILE[] = __FILE__;

#endif

#define pointer

CString str;

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

// 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()

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

// CMusicPlayerDlg dialog

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

: CDialog(CMusicPlayerDlg::IDD, pParent)

{

//{{AFX_DATA_INIT(CMusicPlayerDlg)

//}}AFX_DATA_INIT

// Note that LoadIcon does not require a subsequent DestroyIcon in Win32 m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);

}

void CMusicPlayerDlg::DoDataExchange(CDataExchange* pDX)

{

CDialog::DoDataExchange(pDX);

//{{AFX_DATA_MAP(CMusicPlayerDlg)

DDX_Control(pDX, IDC_DELETE, m_Delete);

DDX_Control(pDX, IDC_CIRCLE, m_Circle);

DDX_Control(pDX, IDC_OPENFILES, m_OpenFiles);

DDX_Control(pDX, IDC_LIST1, m_PlayList);

DDX_Control(pDX, IDC_STOP_BUTTON, m_StopButton);

DDX_Control(pDX, IDC_PREVIOUS_TRACK, m_PreTrack);

DDX_Control(pDX, IDC_PLAY_BUTTON, m_PlayButton);

DDX_Control(pDX, IDC_PAUSE_BUTTON, m_PauseButton);

DDX_Control(pDX, IDC_NEXT_TRACK, m_NextTrack);

//}}AFX_DATA_MAP

}

BEGIN_MESSAGE_MAP(CMusicPlayerDlg, CDialog)

//{{AFX_MSG_MAP(CMusicPlayerDlg)

ON_WM_SYSCOMMAND()

ON_WM_PAINT()

ON_WM_QUERYDRAGICON()

ON_BN_CLICKED(IDC_PLAY_BUTTON, OnPlay)

ON_BN_CLICKED(IDC_PAUSE_BUTTON, OnPause)

ON_BN_CLICKED(IDC_STOP_BUTTON, OnStop)

ON_BN_CLICKED(IDC_OPENFILES, OnOpenFiles)

ON_LBN_SELCHANGE(IDC_LIST1, OnPlayList)

ON_BN_CLICKED(IDC_PREVIOUS_TRACK, OnPreviousTrack)

ON_BN_CLICKED(IDC_NEXT_TRACK, OnNextTrack)

ON_BN_CLICKED(IDC_CIRCLE, OnCircle)

ON_BN_CLICKED(IDC_DELETE, OnDelete)

//}}AFX_MSG_MAP

END_MESSAGE_MAP()

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

// CMusicPlayerDlg message handlers

BOOL CMusicPlayerDlg::OnInitDialog()

{

CDialog::OnInitDialog();

m_PlayButton.EnableWindow(false);

m_PauseButton.EnableWindow(false);

m_StopButton.EnableWindow(false);

m_PreTrack.EnableWindow(false);

m_NextTrack.EnableWindow(false);

m_Delete.EnableWindow(false);

m_Circle.EnableWindow(false);

// 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

// TODO: Add extra initialization here

HWND m_PreAudio, m_Audio;

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

}

void CMusicPlayerDlg::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 CMusicPlayerDlg::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

{

CPaintDC dc(this);

CRect rect;

GetClientRect(&rect);

CDC dcMem;

dcMem.CreateCompatibleDC(&dc);

CBitmap bmpBackground;

bmpBackground.LoadBitmap(IDB_BITMAP1); //IDB_BITMAP1是你自己的图对应的ID

BITMAP bitmap;

bmpBackground.GetBitmap(&bitmap);

CBitmap *pbmpOld=dcMem.SelectObject(&bmpBackground);

dc.StretchBlt(0,0,rect.Width(),rect.Height(),&dcMem,0,0,bitmap.bmWidth,bitm ap.bmHeight,SRCCOPY);

CDialog::OnPaint();

}

}

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

HCURSOR CMusicPlayerDlg::OnQueryDragIcon()

{

return (HCURSOR) m_hIcon;

}

void CMusicPlayerDlg::OnPlay()

{

// TODO: Add your control notification handler code here

int nIndex;

CString str;

if(m_IsOpened==true)

{

MCIWndStop(m_PreAudio,MCI_STOP,0,0);

MCIWndDestroy(m_PreAudio,WM_CLOSE,0,0);

}

int length;

nIndex=m_PlayList.GetCurSel();//0

nIndex+=1;

length=m_PlayList.GetCount();//获取当前列表项数

if(length==0)

{

m_PreTrack.EnableWindow(false);

AfxMessageBox("没有歌曲,请添加播放歌曲!");

m_PreTrack.EnableWindow(true);

}else if(m_Audio != NULL)

{

int i;

i=m_PlayList.GetCurSel();

m_PlayList.GetText(i,PathName);

m_Audio = m_PreAudio=MCIWndCreate(this->GetSafeHwnd(),AfxGetInstanceHandle(),WS_CHILD|WS_ VISIBLE|MCIWNDF_NOMENU,PathName);

CString str;

str.Format("正在播放:%s",FileName);

SetDlgItemText(IDC_STATUS_STATIC,str);

m_IsOpened=true;

}

else

{

MCIWndHome(m_Audio);

}

MCIWndPlay(m_Audio);

m_IsPaused=false;

}

void CMusicPlayerDlg::OnPreviousTrack()

// TODO: Add your control notification handler code here int nIndex;CString str;

nIndex=m_PlayList.GetCaretIndex();

if(nIndex==0)

{

m_PreTrack.EnableWindow(false);

AfxMessageBox("已经是第一项,请重新选择歌曲!");

m_PreTrack.EnableWindow(true);

}

else

{

nIndex-=1;

m_PlayList.SetCurSel(nIndex);

OnPlay();

}

}

void CMusicPlayerDlg::OnPause()

{

// TODO: Add your control notification handler code here //1

if(m_IsPaused)

{

//MCIWndResume(m_Audio);

str.Format("正在播放:%s",FileName);

SetDlgItemText(IDC_STATUS_STATIC,str);

//m_IsPaused = false;

}

else

{

MCIWndPause(m_Audio);

m_IsPaused = true;

str.Format("已暂停播放:%s",FileName);

SetDlgItemText(IDC_STATUS_STATIC,str);

}

//1

}

void CMusicPlayerDlg::OnStop()

{

// TODO: Add your control notification handler code here

MCIWndStop(m_Audio);

MCIWndDestroy(m_Audio);

}

void CMusicPlayerDlg::OnOpenFiles()

{

CFileDialog FileOpenDlg(TRUE,NULL,NULL, OFN_HIDEREADONLY,"Mp3 File(*.mp3)|*.mp3|",NULL);

//CFileDialog( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR MyMethod() = NULL, DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );

if(IDOK==FileOpenDlg.DoModal()){

PathName.Format("%s",FileOpenDlg.GetPathName());

FileName.Format("%s",FileOpenDlg.GetFileName());

OnPlayList();

}

PathName.Format("%s",FileOpenDlg.GetPathName());

FileName.Format("%s",FileOpenDlg.GetFileName());

m_PlayButton.EnableWindow(true);

m_PauseButton.EnableWindow(true);

m_StopButton.EnableWindow(true);

m_PreTrack.EnableWindow(true);

m_NextTrack.EnableWindow(true);

m_Delete.EnableWindow(true);

m_Circle.EnableWindow(true);

}

void CMusicPlayerDlg::OnPlayList( )

{

// TODO: Add your control notification handler code here

if(m_PlayList.FindStringExact(-1,FileName)==LB_ERR)

{

m_PlayList.AddString(FileName);

}

m_PlayList.SetCurSel(m_PlayList.FindStringExact(-1,FileName));

}

void CMusicPlayerDlg::OnDblclkList1()

{

// TODO: Add your control notification handler code here

int a=m_PlayList.GetCurSel();

m_PlayList.GetText(a,PathName);

OnPlay();

}

void CMusicPlayerDlg::OnNextTrack()

{

// TODO: Add your control notification handler code here

int nIndex;

CString str;

int length;

nIndex=m_PlayList.GetCurSel();

nIndex+=1;

length=m_PlayList.GetCount();//获取当前列表项数

if(nIndex==length) //判断是否为最后一首

{m_PlayList.SetCurSel(0);

OnPlay();}

else

m_PlayList.SetCurSel(nIndex);

OnPlay();

}

BEGIN_EVENTSINK_MAP(CMusicPlayerDlg, CDialog)

//{{AFX_EVENTSINK_MAP(CMusicPlayerDlg)

// ON_EVENT(CMusicPlayerDlg, IDC_MMCONTROL1, 38 /* Done */, OnMmcontrol1, VTS_PI2)

//}}AFX_EVENTSINK_MAP

END_EVENTSINK_MAP()

void CMusicPlayerDlg::OnCircle()

{

// TODO: Add your control notification handler code here }

void CMusicPlayerDlg::OnDelete()

{

// TODO: Add your control notification handler code here int nIndex;CString str;

nIndex=m_PlayList.GetCaretIndex();//得到当前选择项的索引m_PlayList.DeleteString(nIndex);

OnNextTrack();

}

安卓音乐播放器开发,含源代码

基于an droid平台的音乐播放器开发 实验报告 学生姓名:_______ 温从林 _________________ 学号: ___________________________________ 班级:计自1201 _____________ 第一章引言 1.1项目背景 当今社会的生活节奏越来越快,人们对手机的要求也越来越高,由于手机市场发展迅速,使得手机操作系统也出现了不同各类,现在的市场上主要有三个手机操作系统,Win dowsmobile,symbia n,以及谷歌的An droid操作系统,其中占有开放源代码优势的An droid系统有最大的发展前景。那么能否在手机上拥有自己编写的个性音乐播放器呢?能的,谷歌An droid系统就能做到。本文的音乐播放器就是基于谷歌An droid手机平台的播放器。 An droid :是谷歌于2007年公布的开放式源代码手机系统,它的开放性就优于其它封闭式的手机系统,因此,任何人都可能根据自己的喜好将手机系统中的所有功能重新编写。这使得越来越多的人关注这个操作系统。本次作品音乐播放器就是基于An droid平台的。 1.2编写目的 现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,本项目的目的是开发一个可以播放主流音乐文件格式的播放器,本设计实现的主要功能是播放Mp3 Wav多种格式的音乐文件,并且能够控制播放,暂停,停止,播放列等基本播放控制功能,界面简明,操作简单。

本项目是一款基于An droid手机平台的音乐播放器,使An droid手机拥有个性的 多媒体播放器,使手机显得更生动灵活化,与人们更为接近,让手机主人随时随地处于音乐视频的旋律之中。使人们的生活更加多样化。也使设计者更加熟练An droid的技术和其它在市场上的特点。 1.3开发环境 Eclipse、An droid SDK 320 第二章系统需求分析 2.1功能需求(用例图分析) 根据项目的目标,我们可获得项目系统的基本需求,以下从不同角度来描述系统的需求,并且使用用例图来描述,系统的功能需求,我们分成四部分来概括,即播放器的基本控制需要,播放列表管理需求,播放器友好性需求和播放器扩展卡需求。以下分别描述: 2.1.1播放器的用例图 假设安装了音乐播放器的用户是系统的主要设计对象,其拥有以下操作, 启动软件、播放音乐、暂停播放、停止播放、退出软件,其用例图如下 图2.1 播放器基本用例图 2.1.2用例分析

音乐播放器的详细设计

音乐播放器详细设计 1.引言 随着社会的快速发展,现今社会生活紧张,而欣赏音乐是其中最好的舒缓压力的方式之一,音乐成了我们生活工作中的一个重要的部分。而3G时代的到来,手机移动应用越来越普遍。此文档就是为了能更好地设计出一个基于android系统的音乐播放器而编写的。 1.1 编写目的 为软件的开发者能更好的理解和明确软件开发的详细过程,安排项目与进度、组织软件开发与测试,撰写本文档。本文档供项目组成员,软件开发人员参考。1.2项目背景 本项目由李雪梅、杨挺等人提出,由本组成员联合开发,实现播放现今流行的音乐MP3等文本格式。 该软件是基于Android系统的音乐播放软件,并能够与其他音乐播放软件兼容。 1.3 参考资料 [1] 重庆大学出版社《软件工程》“软件计划与可行性分析” [2] 靳岩、姚尚明人民邮电出版社《Android开发入门与实践》 [3] 可行性分析 [4] 《音乐播放器需求分析书》 [5] 《音乐播放器总体设计说明书》 1.4项目开发计划 实施计划:

阶段名称负责人 需求分析杨挺、李雪梅 总体设计李雪梅、杨挺 详细设计李雪梅、杨挺 软件测试李雪梅、杨挺 在技术方面,编程知识比较缺乏,对有些与项目相关的软件 不熟悉,需进行人员的技术培训(自学为主),技术难点是数据库的构架和软件功能的设计。 2. 总体设计 2.1 项目目的 本项目的目的是开发一个可以播放主流的音乐文本格式的播放器。设计的主要实现功能是播放MP3等格式的音乐文件,并且能控制播放,暂停,停止,音量控制,选择上一曲,选择下一曲,更改皮肤,歌曲列表文件的管理操作,在线播放,读取 存储卡播放等多种播放控制,界面简明,操作简单。 软件系统检测到错误行为时,报告错误,并提示处理操作。 2.2 软件运行环境 硬件:Android操作系统手机 系统软件:Android 2.2 -- 4.0版本 支撑软件:Eclipse 7.5 、ADT 1.5 2.3 需求概述

音乐播放器程序源代码及注释

音乐播放器程序源代码及注释: #include #define uchar unsigned char #define uint unsigned int sbit duan=P2^6; sbit key1=P3^2;//按key1可切换花样 sbit key2=P3^3;//按key2可切换歌曲 sbit fm=P2^4;//蜂鸣器连续的IO口 sbit P30=P3^0;//矩阵键盘的一列 uchar code huayang1[]={0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe, 0xfd,0xfb,0xf7,0xef,0xdf,0xbf};//花样1 uchar code huayang2[]={0x7f,0xfe,0xbf,0xfd,0xdf,0xfb,0xef,0xf7, 0xef,0xfb,0xdf,0xfd,0xbf,0xfe};//花样2 uchar code huayang3[]={0x7f,0x3f,0x1f,0x0f,0x07,0x03,0x01,0x0, 0x80,0xc0,0xe0,0xf0,0xf8,0xfc,0xfe,0xff}; char code huayang4[]={ 0x55,0xaa,0xcc,0x33,0x99,0x66,0x0f,0xf0}; uchar count1;//花样标志 uchar count2;//歌曲标志 uchar timeh,timel,i; //编程规则:字节高位是简谱,低位是持续时间, //代表多少个十六分音符 //1-7代表中央C调,8-E代表高八度,0代表停顿

单片机课程设计报告简易音乐播放器

第一章前言 伴随着科技的发展和时代的进步,人们对生活质量的要求也越来越高,由以前简单的追求温饱和物质财富转向更高层面的精神追求!而这一切催生了智能仪器的发展,音乐则是人们娱乐生活的重要组成部分,目前市场上出现了许许多多的音乐播放器,而人们对播放器的功能需求也越来越广泛,本文将设计一个基于单片机的音乐播放器,通过对其全面的介绍与分析,让大家了解音乐播放器的原理! 第二章: 简易音乐播放器的功能和原理说明 音乐播放器,可以通过单片机板子上的数字按键对音乐播放的曲目进行控制,并且通过LED灯将播放的音乐加以区分,在播放音乐的同时点亮LED灯,让人知道现在正在播放的音乐曲目,从而实现简单的音乐播放功能! 表1 需求分析 功能说明:这次设计是依据单片机技术原理,通过硬件电路设计以及软件的编译而设计的一个简单的音乐播放器,可以通过按键选择播放四首歌曲(歌曲自选,只要将想要播放的歌曲的乐谱写入程序中即可)同时点亮相应的LED灯,并用它来指示当前播放的歌曲序列,只能实现简单的音乐播放功能。 原理说明:这个音乐播放器主要有晶振电路,复位电路,LED电路,按键电路以及扬声器组成。它利用单片机产生乐曲音符,再把乐曲音符翻译成计算机音乐语言,接着用单片机进行信息处理,再通过蜂鸣器或喇叭放出音乐。音乐的产生主要是通过单片机的I/O口输出高低不同的脉冲信号来控制扬声器发音。通常利用单片机的内部定时器0,工作在方式1下,再改变计数初值TH0和TL0来产生不同频率。当控制歌曲按键按下时,按照预先存放在单片机中的程序,就

会自动判断键值,然后启动计数器,按照程序产生一定频率的脉冲,接着通过uln2003芯片驱动扬声器,播放出乐曲。该硬件电路中用P3.0,P3.1,P3.2,P3.3控制四个按键,“0”,“1”,“2”,“3”分别控制四首音乐。P1.0,P1.1,P1.2,P1.3控制四个LED灯,它们分别对应四个按键,用来显示正在播放的歌曲,并用P2.3 来控制扬声器,电路为12MHz晶振频率工作,起振电路中C1 和C2为22pf。 第三章:系统硬件电路设计 1:硬件体系结构设计 该简易音乐播放器主要有单片机核心芯片89C52,LED发光二极管,扬声器,晶振电路,按键电路,复位电路组成,通过芯片引脚输出定时器产生的各种固定频率的方波信号,然后在经由扬声器产生各种频率的声音。另外,该方案使用的是单片机板子的内部振荡电路,89C52芯片的X1,X2引脚外接石英晶体。它的系统组成如图所示。 (1)晶振电路部分晶振的作用是给电路提供工作信号脉冲的,其实就是单片机的工作速度。本次设计选用12M晶振,则单片机的工作速度就是每秒12M。与此同时,也要注意单片机的工作频率范围。 (2)复位电路部分当系统出现问题时可以重置系统,解决一些问题 (3)LED显示部分显示系统在各种不同条件下的状态 (4)89C52芯片整个设计的核心,接收和处理信号及程序 (5)按键电路部分作为系统的输入

基于java的音乐播放器的设计源代码+实验报告

主类M U S I C P L A Y E R类:import .*; public class MusicPlayer implements ActionListener, Serializable,ControllerListener { private static final long serialVersionUID = 1L; private JFrame frame = null; private JPanel controlPanel = null; private JButton btnPlay = null; private JButton btnPre = null; private JButton btnNext = null; private JScrollPane listPane = null; private JList list = null; private DefaultListModel listModel = null; private JMenuBar menubar = null; private JMenu menuFile = null, menuAbout = null, menuMode = null; private JMenuItem itemOpen, itemOpens, itemExit, itemAbout; private JRadioButtonMenuItem itemSingle, itemSequence ,itemRandom; private ListItem currentItem = null; private static Player player = null; private boolean isPause = false; private int mode; private int currentIndex; private ImageIcon iconPlay = new ImageIcon("d:\\"); private ImageIcon iconPre = new ImageIcon("d:\\"); private ImageIcon iconNext = new ImageIcon("d:\\"); private ImageIcon iconPause = new ImageIcon("d:\\"); public static void main(String[] args) { new MusicPlayer(); } public MusicPlayer() { init(); } public void init() { frame = new JFrame(); ("音乐播放器"); (400, 300); (false); (null); ; menubar = new JMenuBar(); menuFile = new JMenu("文件");

嵌入式MP3播放器的设计

嵌入式MP3播放器的设计 1 系统概述 本文采用STM32系列微控制器,结合解码芯片VS1003、SD卡、LCD等外围设备设计并实现了MP3播放器。其主要功能有:播放VS1003支持的所有音频文件,如MP3、WMA、WAV文件,且音质非常好;通过触摸屏实现按键功能,控制播放上一首/下一首、音量增减等;通过LCD显示歌曲名字和播放状态;本系统还实现了读卡器功能,PC机可通过USB接口直接对开发板上的SD卡进行读写操作,以方便拷贝音频文件。 MP3播放过程是STM32通过SPI1接口将数据从SD卡中取出,然后通过SPI2接口送至解码芯VS1003解码播放。这里解码模块单独使用一个SPI接口,以减小干扰和噪声、提高音质。 2 系统硬件设计方案 本系统在硬件上分为6个模块: 微控制器STM32F103、解码模块VS1003、存储模块SD卡、触摸屏、USB接口和显示屏LCD。系统硬件框架如图5所示。 VS1003 STM32 图5 系统硬件框架图 2.1 存储模块设计 SD卡在现在的日常生活与工作中使用非常广泛,时下已经成为最为通用的数据存储卡。在诸如MP3、数码相机等设备上也都采用SD卡作为其存储设备。SD卡之所以得到如此广泛的使用,是因为它价格低廉、存储容量大、使用方便、通用性与安全性强等优点。SD卡支持两种总线方式: SD方式与SPI方式。其中SD 方式采用6线制,而SPI方式采用4线制,采用单片机对SD卡进行读写时一般都采用SPI模式。可用不同的初始化方式使SD卡工作于SD方式或SPI方式。 在本设计中,音频数据MP3文件是以SD卡为载体。所以在电路设计中必须含有读取SD卡模块。该系统使用STM32内部接口SPI1与SD卡进行通信,下面介绍其引脚连接情况。 PE3:低电平有效,连接到SD卡的片选引脚CD/DAT3。SPI在和SD卡进行通

Java音乐播放器源代码即结果显示

简单的音乐播放器一、程序代码: import java.io.File; import java.awt.BorderLayout; import java.awt.Button; import java.awt.Color; import java.awt.FileDialog; import java.awt.Frame; import java.awt.GridLayout; import https://www.360docs.net/doc/c65460945.html,bel; import java.awt.List; import java.awt.Menu; import java.awt.MenuBar; import java.awt.MenuItem; import java.awt.MenuShortcut; import java.awt.Panel; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import javax.sound.sampled.AudioFormat; import javax.sound.sampled.AudioInputStream; import javax.sound.sampled.AudioSystem; import javax.sound.sampled.DataLine; import javax.sound.sampled.SourceDataLine; public class Example extends Frame { private static final long serialVersionUID = 1L; boolean isStop = true;// 控制播放线程 boolean hasStop = true;// 播放线程状态

音乐播放器实验报告

一、实验项目名称 基于单片机的音乐播放器 二、实验目的 Ⅰ设计方案 设计一个基于AT89C51系列单片机的音乐盒,利用按键控制切换演奏出不同的音乐。蜂鸣器发出某个音调,与之对应的LED灯亮起。使用两个按键,一个用来切换歌曲,另一个切换LED的变化花样。Ⅱ研究内容 ①电路有两种模式:演奏音乐模式和花样灯模式 A 演奏音乐模式:演奏完整的一首歌曲,LED随着音乐变化; B 花样灯模式:LED变化出各种花样,蜂鸣器随着发出“滴滴”声; ②按下按键1进入演奏音乐模式,再按切换歌曲,共两首歌曲; 按下按键2进入花样灯模式,再按切换LED花样,共三种花样。Ⅲ总体方案图 a组成框图: 音乐盒的系统结构以AT89C51单片机位控制核心,加上2个按键、时钟复位电路、蜂鸣器、LED模块组成。单片机负责接收按键的输入,根据输入控制音乐播放曲目和音乐花样灯的显示样式以及蜂鸣器发音。系统组成框图如下所示:

b功能结构图: Key1负责切换播放歌曲,共两首。分别是祝你生日快乐和寂寞沙洲冷;Key2负责切换LED显示花样,共3种:顺序显示,由两边向中间移动然后向两边移动,循环显示。 三、实验器材 Windows7 操作系统Proteus仿真软件 keil4软件AT89C51单片机 共阴极数码管开关电容晶振 电阻发光二极管蜂鸣器 四、实验要求 (1)以单片机为主控处理器,用蜂鸣器播放歌曲;

(2)系统要求有选择上一首、下一曲功能; (3)两个按键,可在播放和显示花样中进行切换; (4)用一个键控制花样类型的显示功能; (5)用LED灯闪烁“伴奏”。 五、实训基本原理(附原理图、源程序清单) 1 硬件设计 ①LED显示电路设计与原理 LED显示电路是由8个LED发光二极管组成,连接方式是共阳极,LED接到单片机的P1口,若是低电平,可使LED亮。发光二极管的亮灭是由内部程序控制的,8个LED发光二极管分别对应不同的音阶,所以LED会随着音阶的变化按规律亮灭。 ②硬件电路图及其功能介绍 1)电路中用P3.2、P3.3 控制键; 2)P1.0~P1.7控制LED; 3)P2.3控制蜂鸣器; 4)电路为12MHZ晶振频率工作,起振电路中C1、C2均为30PF。

电子音乐发生器报告-单片机设计实验报告

单片机设计实验报告 题目:电子音乐发生器 班级: 班内序号: 实验组号: 学生姓名: 指导教师:

电子音乐发生器

实验摘要 此次本组制作的基于pic单片机的电子音乐发生器是具有液晶显示屏提示的音乐简单演奏、播放等功能的演示作品。在目前很多简单音乐播放器件(如贺卡、礼品中的简单音乐单元)中,这样的简单电路和rom编程原理都是可以通用的,而且电路搭接、布局简单,十分适合电路原理学习、汇编语言编程零基础训练以及简单礼品核心部分制作参考。 整个系统中,微控制器采用了Microchip公司的PIC16F877,软件设计中涉及PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。本实验用单片机PORTB\D接收来自键盘输入的指令信息,由此确定lcd液晶屏幕显示以及喇叭播放内容,再通过PORTC\D\E输出声音或字幕信息。 A b s t r a c t In this experiment,our group made this pic microcontroller based electronic music generator is a simple LCD prompts music playing, playback and other functions to the presentation. In the current lot of simple music playback devices (such as greeting cards, gift of simple musical elements), such a simple circuit and rom programming principles can all be generic, and the circuit lap, the layout is simple, very suitable circuit schematic learn assembly language zero-based training program and a simple gift core part of the production reference. Throughout the system, the microcontroller uses Microchip's PIC16F877, software design involves PORTB \ PORTC \ PORTD \ PORTE used as a normal digital I / O pin functions. The experiment with the microcontroller PORTB \ D receives commands from the keyboard input information, thereby determining the LCD screen display and speakers to play the content, and then through PORTC \ D \ E output sound or subtitle information. 关键字 单片机——microcontroller 芯片——CMOS chip lcd液晶显示屏——LCD screen 输入输出端口——I / O pin 一.实验论证与比较 电子音乐发生器采用以Microchip公司的PIC16F877芯片为核心的简单控制系统,外部

音乐播放器的设计与实现

德州学院信息管理学院 课程设计报告实习名称课程设计2 设计题目Android音乐播放器的设计与实现实习时间 专业班级12级计算机科学与技术 指导老师刘想 教学单位(盖章) 小组成员分工情况: 学号姓名分工 3018 周生明音乐播放的设计与实现1052曹法瑞 1040 张正奎 1055 李元华 2049 王山 二〇一五年六月三十日

目录 摘要 ................................................................................................................ 错误!未定义书签。 1 引言 ............................................................................................................ 错误!未定义书签。 2 可行性分析................................................................................................. 错误!未定义书签。 2.1 技术可行性...................................................................................... 错误!未定义书签。 2.2 经济可行性...................................................................................... 错误!未定义书签。 2.3 管理可行性...................................................................................... 错误!未定义书签。 2.4 可行性分析结论.............................................................................. 错误!未定义书签。 3 系统需求分析............................................................................................. 错误!未定义书签。 3.1 功能分析.......................................................................................... 错误!未定义书签。 3.2 数据流程分析.................................................................................. 错误!未定义书签。 4 系统功能设计............................................................................................. 错误!未定义书签。 4.1 播放器功能结构.............................................................................. 错误!未定义书签。 4.1.1 播放器主界面功能模块....................................................... 错误!未定义书签。 4.1.2 播放器菜单功能模块........................................................... 错误!未定义书签。 4.2 播放器功能流程.............................................................................. 错误!未定义书签。 5 系统实现..................................................................................................... 错误!未定义书签。 5.1 播放器主界面功能列表.................................................................. 错误!未定义书签。 5.2 播放器基本功能的实现.................................................................. 错误!未定义书签。 5.3 播放列表的实现.............................................................................. 错误!未定义书签。 6 软件测试与验证......................................................................................... 错误!未定义书签。 6.1 软件测试的目的.............................................................................. 错误!未定义书签。 6.2 软件测试的方法.............................................................................. 错误!未定义书签。 6.3 软件测试环境.................................................................................. 错误!未定义书签。 6.3.1 android模拟器 ...................................................................... 错误!未定义书签。 6.3.2 真机测试............................................................................... 错误!未定义书签。 6.4 软件测试流程与结果评估.............................................................. 错误!未定义书签。 6.4.1 测试流程............................................................................... 错误!未定义书签。 6.4.2 结果评估............................................................................... 错误!未定义书签。

音乐播放器代码大全

音乐播放器代码大全 autostart="true"中true或1表示自动播放,false或0表示手动播放 loop="true" 中的true或1表示重复播放,false或0表示只播放一次width= height= 中的数字分别表示播放器的宽度和高度=0表示隐藏播放器 EnableContextMenu="0" 禁右键 ShowStatusBar="1" (带显示文件播放信息) 1隐藏播放器(不循环) 代码: 2.隐藏播放器(循环播放) 代码: 3.黑色皮肤播放器 代码: 4.淡蓝色播放器 代码:

5.迷幻播放器 代码:

6.带菜单的播放器 代码: 7.深黄色带菜单播放器 代码: 8.灰色播放器 代码:

基于51单片机的音乐播放器设计

题目:音乐播放器 课程设计(论文)任务书

摘要 随着电子技术的发展和计算机越来越普遍的使用,单片机作为这两项技术的有机结合也得到了广泛的应用,在某些领域具有不可替代的作用。音乐播放功能随处都会用到,如,在开发儿童智力的玩具中,等等。目前,基于单片机实现音乐播放,其体积小、价格低、编程灵活等特点在这一领域独领风骚。 单片机的英文名称为single chip microcomputer,最早出现在20世纪70年代,国际上现在已逐渐被微控制器(Microcontroller Unit 或MCU)一词所取代。它体积小,集成度高,运算速度快,运行可靠,功耗低,价格廉,因此在数据采集、智能化仪表、通讯设备等方面得到了广泛应用。而8051单片机在小到中型应用场合很常见,已成为单片机领域的实际标准。随着硬件的发展,8051单片机系列的软件工具也有了C 级编译器和实时多任务操作系统RTOS,为单片机编程使用C语言提供了便利的条件;并针对单片机常用的接口芯片编制通用的驱动函数,可针对常用的功能模块,算法等编制相应的函数;C语言模块化程序结构特点,可以使程序模块大家共享,不断丰富,这样就使得单片机的的程序设计更简单可靠,实时性强,效率高。作为测控技术与仪器的学生,掌握8051单片机硬件基础及其相关软件操作,将其应用于现代电子产品中是必要而且重要的,这次课程设计我们的题目是用单片机实验箱系统制作音乐播放器。

本次课程设计主要内容是通过单片机C51语言进行编程,以产生乐曲音符和节拍,把乐谱翻译成计算机语言(音符转换诚成相对应的方波频率即定时器装载初值,节拍转换成相对应的延长时间),并将其预先存储到单片机里,然后根据按键调用再由单片机进行信息处理,在经过信号放大,由喇叭放出乐曲声,实现音乐播放的功能。其主要表现在可以播放十首歌曲,可以用十个数字键控制播放的歌曲,并且能在LCD液晶屏显示器上显示相应播放歌曲的曲名和滚动歌词。再加上一个开关键来控制歌曲的播放停止。 本设计的目的是培养理论联系实际的学习方法以及独立解决工程实际问题的能力。能够熟识单片机C51语言的编程特性,及其应用。能够用C51语言进行编程,能成功的编出较为简单的程序。 关键词:单片机,音乐,蜂鸣器,同步显示 目录 课程设计(论文)任务书.................................................................................................. I 摘要...................................................................................................... 错误!未定义书签。 第一章绪论 .................................................................................................................. 1 1.1课程设计目的............................................................................................................................ 1 1.2课程设计任务............................................................................................................................ 1 1.3课程设计要求............................................................................................................................ 1 1.4课程设计的意义........................................................................................................................ 1 第二章设计原理及总体方案选择................................................................................... 2 2.1设计原理 ................................................................................................................................... 2

电子音乐发生器报告单片机设计实验报告

单片机设计实验报告 2013年小学期单片机设计实验报告 题目:电子音乐发生器 班级: 班内序号: 实验组号: 学生姓名: 指导教师:

单片机设计实验报告期中检查 教师评语 指导教师签字: 年月日

单片机设计实验报告 电子音乐发生器 ――2011211****班实验摘要 此次本组制作的基于pic单片机的电子音乐发生器是具有液晶显示屏提示的音乐简单演奏、播放等功能的演示作品。在目前很多简单音乐播放器件(如贺卡、礼品中的简单音乐单元)中,这样的简单电路和rom编程原理都是可以通用的,而且电路搭接、布局简单,十分适合电路原理学习、汇编语言编程零基础训练以及简单礼品核心部分制作参考。 整个系统中,微控制器采用了Microchip公司的PIC16F877,软件设计中涉及PORTB\PORTC\PORTD\PORTE用作普通数字I/O脚功能。本实验用单片机PORTB\D接收来自键盘输入的指令信息,由此确定lcd液晶屏幕显示以及喇叭播放内容,再通过PORTC\D\E输出声音或字幕信息。 A b s t r a c t In this experiment,our group made this pic microcontroller based electronic music generator is a simple LCD prompts music playing, playback and other functions to the presentation. In the current lot of simple music playback devices (such as greeting cards, gift of simple musical elements), such a simple circuit and rom programming principles can all be generic, and the circuit lap, the layout is simple, very suitable circuit schematic learn assembly language zero-based training program and a simple gift core part of the production reference. Throughout the system, the microcontroller uses Microchip's PIC16F877, software design involves PORTB \ PORTC \ PORTD \ PORTE used as a normal digital I / O pin functions. The experiment with the microcontroller PORTB \ D receives commands from the keyboard input information, thereby determining the LCD screen display and speakers to play the content, and then through PORTC \ D \ E output sound or subtitle information. 关键字 单片机——microcontroller 芯片——CMOS chip lcd液晶显示屏——LCD screen 输入输出端口——I / O pin

C#编写的音乐播放器实训报告书

、 1、实习题目 (2) 2、实习目的 (3) 3、实习所需条件 (3) 3.1硬件需求 (3) 3.2 软件需求 (3) 4、实习内容 (4) 5、实习步骤 (4) 5.1实验说明 (4) 5.2面向对象的分析 (4) 5.3面向对象的设计 (5) 5.3.1 界面设计 (5) 5.3.1.1实验说明 (5) 5.3.1.2实验步骤 (5) 5.4系统实现 (11) 5.4.1模式1:Windows界面 (11) 1、双击窗体,打开界面设计部分,然后双击要编辑事件的控件。 双击Form1,双击Button1,响应它的click事件,将会自动转到后台 代码,在鼠标停留处编写其事件代码。 (11) 2、在光标处编辑事件代码,总体设计界面图示。 (11) 3、双击button2 (11) 4、音量调节功能 (14) 5、改变播放模式后的列表顺序调整代码 (14) 6、音乐播放器任务栏logo显示功能代码如下 (17) 7、最小最大化显示歌曲代码如下 (16) 8、播放模式功能实现代码如下 (17) 9、皮肤设置功能代码如下,图示 (18) 10、透明度设置代码如下 (20) 11、添加/删除功能的实现代码: (20) 12、查找功能的实现代码 (24) 13、最大最小化窗口显示界面的实现代码 (24) 14、连接数据库实现登录注册功能的实现代码 (25) 15、雅心音乐播放器运行效果图 (20) 6、实习参考资料 (28) 6、实习心得 (28)

1、实习题目 实习题目:基于.NET音乐播放器设计与实现 雅心音乐播放器是一款本地歌曲音乐聚合播放器。音乐播放器采用面向对象的编程思想,以C#语言作为开发语言,Visual Studio 2010作为开发工具,SQL server 作为后台数据库。音乐播放器客户端软件合理的功能布局将用户的学习成本降至最低,开发出的客户端软件具有操作简洁、界面友好、功能齐全的特点,为音乐爱好者带来舒适的用户体验。 2、实习目的 综合运用《面向对象程序设计》等课程基础理论知识,完成基于.NET音乐播放器设计与实现。使学生 熟悉Windows应用程序开发的基本流程; 熟练掌握面向对象的分析和设计技术; 熟练掌握面向对象语言的基本语法和高级特性; 用配置文件定义音乐播放器的窗口布局,代码不需要关心如何摆放窗口、移动窗口; 用配置文件定义窗口中控件的位置,代码不需要关心如何摆放控件、移动控件; 用配置文件定义窗口、控件的皮肤绘制

相关文档
最新文档