VC编写音频播放器
C语言下的MP3播放器
![C语言下的MP3播放器](https://img.taocdn.com/s3/m/dc940d13cc7931b765ce15ea.png)
论文题目基于VC的MP3播放器设计与实现姓名学院学院专业计算机科学与技术指导教师讲师备注年月日基于VC的MP3播放器设计与实现作者姓名:指导教师:讲师单位名称:计算机科学与技术系专业名称:计算机科学与技术学校年月Design and Implementation of Mp3 PlayerBased on VCbySupervisor: Lecturer毕业设计(论文)任务书基于VC的MP3播放器设计与实现摘要本MP3播放器应用程序是一个基于Visual C++ 6.0 开发的一个多媒体软件,是建立在MCI(媒体控制接口)控制之上的软件。
该软件开发研究的目的主要是为了给人们娱乐和消遣用的;该软件实现的方法是通过调用MCI控制接口的相关函数,获取系统的控制信息,利用系统信息对MP3播放器的每一个动作进行控制。
现在为止,该软件到可以实现的功能是:该软件可以添加和播放多种音频文件格式,可以添加单个音频文件,也可以同时添加多个音频文件;对音频文件的操作有:播放音频文件、暂停、停止,可以选择播放下一首歌或前一首歌;可以对已经添加进入播放列表的音频文件进行删除或者添加新的音频文件;可以调节系统的音量的大小;该软件还可以显示当前播放的进度;可以隐藏或展开播放列表;本软件可以进行系统托管,隐藏主界面后,在任务栏创建托管图标;单击托管图标后可以重新弹出控制界面,并取消托管图标。
在系统托管或自动播放的情况下,该软件在播放完一首歌后可以自动跳转到下一首歌,并播放此音频文件。
关键词:媒体控制接口,多媒体,系统托管,控件,音频文件Design and Implementation of Mp3 PlayerBased on VCAbstractThe MP3 Player application programme is software that developed based on Visual C++ 6.0, and also is software that built on the control of MCI. The purpose of developing this software is for the entertainment and recreation of people. The way this software realized is transfer the correlation functions of MCI, and obtain the information of system control, using this information to control each movement of the MP3 Player.So far, the functions that software can realize are: The software can open and play different formats of audio-files,You can add the audio-file one by one or add many audio-files once; play the audio-files; pause; stop; play the following audio-file, and play the preceding audio-file. You can also delete the audio-files that the play list already have or add the new audio-file that the play-list does not exist. You can accommodate the volume of the system. The can show the progress that the current audio-file played. And can hide or outspread the play list. The software can trustee by the system, and will create a icon on the taskbar. When click the icon the interface will show again. While the current audio-file is playing over, it will jump to the next audio-file and play automatically.Key words: MCI,Media,System-Trustee,Controls,Audio-files目录毕业设计(论文)任务书 (I)摘要 (II)ABSTRACT......................................................................................... I II 第1章绪论 .. (1)1.1课题来源 (1)1.2课题描述 (1)1.3课题设计的思想 (1)1.4国内外的发展概况 (2)1.4.1 Winamp (2)1.4.2千千静听 (2)第2章用户需求分析 .................................... 错误!未定义书签。
vc音频播放器(含源文件)
![vc音频播放器(含源文件)](https://img.taocdn.com/s3/m/bc0c13e27c1cfad6195fa7fc.png)
课程设计说明书题目:音频播放器成绩:时间:年月日至年月日课程设计任务书题目音频播放器主要内容:音频播放器,是目前用户选择播放任意格式的音频文件的软件,如酷狗、QQ音乐等。
一般的音频播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。
在此次设计的音频播放其中,可以实现对音频文件的打开、播放、暂停、停止、上一曲/下一曲、歌词显示等操作。
对于播放器的界面,可以最小化,并显示到托盘。
处于最小化的状态下,依然可以对正在播放的文件进行上述操作。
在此播放器中,最具特点的是在各个操作按钮以及整个界面上添加了位图和能将窗口最小化。
播放器窗口的建立,也有区别与传统的有菜单显示的窗口。
最小化到托盘后,仍可以进行操作,也可以选择退出。
对于实现播放、停止、上一曲/下一曲、添加文件,都是利用CMidi这个类来存放实现这些功能的函数。
需要的时候调用就可以。
为了是界面更美观,让人看起来更舒服,加入了位图背景。
目前还没有实现用户根据自己的喜好来更改背景图案。
主要参考资料:[1]姬涛、周启生,《计算机程序设计基础(上册)》[Z],北京:中国传媒大学出版社,2010[2]谭浩强,《C程序设计教程》[Z],北京:清华大学出版社,2007[3]任哲,《MFC Windows应用程序设计(第二版)》[Z],北京:清华大学出版社,2007完成期限:指导教师签名:课程负责人签名:年月日摘要音频播放器,是目前用户选择播放任意格式的音频文件的软件,如酷狗、QQ音乐等。
一般的音频播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。
在此次设计的音频播放其中,可以实现对音频文件的打开、播放、暂停、停止、上一曲/下一曲、歌词显示等操作。
对于播放器的界面,可以最小化,并显示到托盘。
处于最小化的状态下,依然可以对正在播放的文件进行上述操作。
在此播放器中,最具特点的是在各个操作按钮以及整个界面上添加了位图和能将窗口最小化。
播放器窗口的建立,也有区别与传统的有菜单显示的窗口。
感-关于在VC环境下编写音乐播放器
![感-关于在VC环境下编写音乐播放器](https://img.taocdn.com/s3/m/28b13ff9fab069dc502201e7.png)
花了将近一周的时间,我的音乐播放器终于编的差不多了。
尽管仍旧存在着许多不足,但毕竟夹杂着自己太多的汗水和精力。
整整一周没日夜的查资料、和学友交流,让我明白了那些IT人士虽然表面辉煌,然而在他们的背后,是艰辛的付出和坚持,是对巅峰技术的追求和超越!或许,这就是那么多憧憬进入IT世界的人望而却步的主因吧,因为他们只看到了这个行业高得惊人的薪水,却无奈静不下心锻炼自身的技术!废话不多说,关于在VC下编写音乐播放器,我只想结合自己编写的精力和相关资料畅谈下自己的心得体会!1.WIN32 DiallogBased Application.VC支持WINDOWS底下应用编程,究其对话框工程应用,给广大的编程者提供了极大的便利。
这省去了编程者自己作图的繁琐过程,并且其中涉及的GDI技术之复杂,就不多说了。
2.windows API函数。
这个相信很多人都有听说过,但只有应用过那些函数的人才会体会到这些API功能的强大。
对于写播放器来说,就不得不说mciSendString()了,尽管windows API函数库中用于播放器编写的函数不乏少数,但当你能够用一个函数达到播、停(暂停)、继续以及将它应用在TimeProc()中所得到的便利是,你真的会由衷的感谢它!上面说的都是在VC下编写播放器的核心基础,当然还有许多基础得平凡到看到就不爽的在此掠去!下面说说我在编写音乐播放器过程中遇到的问题:1. 添加多个文件。
这个当时确实被卡了很久,当时觉得多个文件和一个的应该是差不多的,硬是将多个文件全部装到全局文件名szFile中,结果打开后可想而知。
后来查了很多资料,才发现用指针搜索的方式就变得相当方便了。
2.循环模式与时间的处理。
在写这个时,自己一开始就错了,总是把这两者分开着写,或者说一开始就没想到这两者是有联系的,并且在突然醒悟过来后,自己都觉得有多好笑,因为它们的联系太紧密了。
我后来是这样处理的:通过时间函数得到一首歌的总时间,通过回调函数得到一个歌的当前时间,当这两者相等时,也即一首歌结束,这个时候,才去判断循环模式!(这里补充一点:对于TimerProc()中的iSecond就算按照正常切正确的方式去写也同样会有错误,我就是在这个地方被卡了很久,明明程序没有错,却就是实现不了相应的功能,后来查SetTimer()是才发现,这个函数本身的精确度就不都,差不多有55s的误差,所以正常编写时,要实现放歌时间与总时间相等简直不可能,所以将iSecond+1即可。
VC++编写音频播放器
![VC++编写音频播放器](https://img.taocdn.com/s3/m/b1561c1ac281e53a5802ff0a.png)
Softeem Consultancy Service
程序界面
Softeem Consultancy Service
创建初始界面程序
实现界面美化
1,首先新建一个工程,取个好听的名字,这里命名为Multimedia,然 后选择Dialog based,点击OK完成。
2,设置对话框显示风格。在对话框点右键属性,设置边框为细小,把标题 栏复选框去掉,其他默认。如图:
Softeem Consultancy Service
其他常用命令: mciSendString(L"set cd time format tmsf", NULL,0,NULL); // 设置时 间格式为 // 轨(<100):分(<100):秒(<60):帧(<75),一秒=75块,一块=98帧 mciSendString(L"set cd door open", NULL, 0, NULL); // 打开光驱 mciSendString(L"set cd door closed", NULL, 0, NULL); // 关闭光驱 mciSendString(L"pause cd", NULL, 0, NULL); // 暂停播放 mciSendString(L"resume cd", NULL, 0, NULL); // 恢复播放 mciSendString(L"stop cd", NULL, 0, NULL); // 停止播放 mciSendString(L"close cd", NULL, 0, NULL); // 关闭CD设备 mciSendString(L"status cd length", buf, 256, NULL); // 获得整个CD 的音轨总长度 mciSendString(L"status cd length track 5", buf, 256, NULL); // 获得 第5个音轨的长度 mciSendString(L"status cd current track", buf, 256, NULL); // 获得 当前音轨号
在VC6.0下自制多媒体播放器
![在VC6.0下自制多媒体播放器](https://img.taocdn.com/s3/m/41567c116c175f0e7cd137d9.png)
在VC6.0下自制多媒体播放器作者:上海王凯明下载源代码在VC6.0下自制多媒体播放器作者:上海王凯明VC6.0可谓是微软的王牌产品,它以强大的功能而赢得了广大程序员的爱好。
而用VC的AppW izard、ClassW izard和其中的各种控件可以方便地建立应用程序。
本文就介绍用VC6.0自带的一个Activ eX控件----Activ eMov ieControl Object,来建立自己的多媒体播放器。
此多媒体具有一般的播放功能,能播放*.mp3,*.wma,*.mdi,*.wav,*.av i,*.dat等文件,还有Repeat功能。
具体步骤:1.打开VC6.0,在Projects下选择MFC AppW izard(ex e),并取名Med iaP lay er,然后建立基于对话框(Dialog Bas ed)的运用程序。
2.打开Resource View,选择其中的对话框,打开其中的主对话框,去掉对话框上的“确定”按钮,保留“取消”,将Caption改为“Ex it”。
然后再在上面加上九个按钮,ID和Caption分别为IDC_OPEN,Open;IDC_PLAY,Play;IDC_PAUSE,Pause;IDC_STOP,Stop;IDC_CLOSE,Close;IDC_LOWER,<<=;IDC_UPPER,=>>;IDC_FULLSCREEN,Full;IDC_REPEAT,Repeat;再加入两个静态文本控件,分别为IDC_STAT IC,Volume;IDC_STAT IC2,Status:Normal。
3.再打开Projects->Add to Project->Components and Controls->Reg istered Activ eX Controls对话框,选择其中的Activ eMov ieControl Object, Ins ert,OK之后,你会发现你的控件面板上多了一项Activ eMov ieControl Object,将它选中,直接放在你的对话框上就行了。
控制台C语言编写音乐播放器主要功能
![控制台C语言编写音乐播放器主要功能](https://img.taocdn.com/s3/m/743f580a58fb770bf78a55a5.png)
#include "FM_Main.h"#include"CTL.H"#include<stdio.h>#include<windows.h>#include<mmsystem.h>#include"GUI.h"#include"ERR_CheckEnter.h"#pragma comment(lib,"winmm.lib")#include "FM_CheckFile.c"#include"FM_Choose.c"#include"FM_List.c"#include "FM_Path.c"int Order=1; //初始时为第一首歌,随音乐切换而切换--nextsong() int NewOrder=0;int Amount = 0; //歌曲总量int begin; //自定义列表中开始序号int circulatemode=1; //循环模式int pp=0;int begintemp=0; //存储自定义列表边界int ww=-1; // 显示自定义列表当前播放信息int upordown=1; //判断切歌方向int firstup=0;int originvolume=500; //默认音量为500char v[40]="setaudio aa volume to 500"; //初始化音量void Init(){Order=1;NewOrder=0;Amount = 0;circulatemode=1;pp=0;begintemp=0;ww=-1;upordown=1;firstup=0;originvolume=500;}void ShowFileList(){if(begintemp==0)begintemp=begin;Amount = FM_CheckFile();begin = Amount;if(NewOrder==0){Show_GUI_EIGHT();FM_CheckFilePrint(0,Amount);}else{Show_GUI_EIGHT();FM_CheckFilePrint(Amount,begintemp);}};void ShowFileDetails(){int i=0;if(upordown==1){if(NewOrder!=0){Order=Amount+1+ww;ww++;}}if(upordown==2){if(firstup==0){if(NewOrder!=0){Order=Amount+1+ww;ww--;}firstup--;}else{if(NewOrder!=0){Order=Amount+1+ww;ww--;}}}firstup+=4;i=Order-1;printf(" 正在播放的音乐\n");printf("-------------------------------------------------------\n");printf(" 歌曲号歌曲名歌手名\n");printf("-------------------------------------------------------\n");printf(" %3d ",info[i].ID);printf(" %-20s ",info[i].song);printf(" %-10s\n",info[i].singer);printf("-------------------------------------------------------\n");}void Play(){if(NewOrder!=0)Order=Amount+1;char vol[10]="500";char v[40];char ch[200];sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);sprintf(v," setaudio aa volume to %s",vol);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa repeat",NULL,0,NULL);// getchar();}void Stop(){mciSendString ("pause aa",NULL,0,NULL);printf("歌曲播放已暂停,输入3继续播放,输入12退出\n\n");// getchar();}void Resume(){mciSendString ("resume aa",NULL,0,NULL);// getchar();}void FastForward(){int n=1;int m=0;int d=0;int minute;int second;char dd[60][20];char temp[20];do{printf("输入1快进:");scanf("%d",&n);mciSendString ("status aa position", dd[m], 20, 0); char ch[20];sprintf(ch,"%s",dd[m]);d=atoi(dd[m]);d+=5000;minute=(int)(((int)(d/1000))/60);second=(d/1000)-minute*60;itoa(d,dd[m],10);sprintf(temp,"seek aa to %s",dd[m]);mciSendString (temp,NULL,0,NULL);Play();m++;clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前时间:%d:%02d \n",minute,second);}while(n==1);}void FastBack(){int n=1;int m=0;int d=0;int minute;int second;char dd[60][20];char temp[20];do{printf("输入1快退");scanf("%d",&n);mciSendString ("status aa position", dd[m], 20, 0); char ch[20];sprintf(ch,"%s",dd[m]);d=atoi(dd[m]);d-=5000;minute=(int)(((int)(d/1000))/60);second=(d/1000)-minute*60;itoa(d,dd[m],10);sprintf(temp,"seek aa to %s",dd[m]);mciSendString (temp,NULL,0,NULL);Play();m++;clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前时间:%d:%02d \n",minute,second);}while(n==1);}void StopStop(){char temp[20];char ch[10];itoa(0,ch,10);sprintf(temp,"seek aa to %s",ch);mciSendString (temp,NULL,0,NULL);mciSendString ("pause aa",NULL,0,NULL);printf("点击1重新播放\n\n");}void VolumePlus(){int n=1;// int originvolume=500;char volume[10];char temp[40];while(n==1){printf("输入1增加音量,输入2退出音量增加模式 ");scanf("%d",&n);originvolume+=250;itoa(originvolume,volume,10);sprintf(temp," setaudio aa volume to %s",volume);mciSendString (temp,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);getchar();clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前音量:%d\n",originvolume);}originvolume-=250;}void VolumeReduce(){int n=1;// int originvolume=500;char volume[10];char temp[40];while(n==1){printf("输入1降低音量,输入2退出音量降低模式 ");scanf("%d",&n);originvolume-=250;itoa(originvolume,volume,10);sprintf(temp,"setaudio aa volume to %s",volume);mciSendString (temp,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("当前音量:%d\n",originvolume);}originvolume+=250;}void PreSong(){if(NewOrder==0){if(circulatemode==1){if(Order<1){Order=1;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<1){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}}else{Order=Amount+pp;if(circulatemode==1){if(Order<Amount){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<Amount){Order=begin;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}pp--;}upordown=2;}void NextSong(){if(NewOrder==0){if(circulatemode==1){if(Order>Amount){Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order>Amount)//////////////////////////////////////////////{Order=1;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order-1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}}else{Order=Amount+pp;if(circulatemode==1){if(Order<Amount)/////////////////////有问题{Order=Amount;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}if(circulatemode==2){if(Order<Amount)//有问题{Order=begin;char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[Order+1].add);mciSendString(ch,NULL,0,NULL);mciSendString(v,NULL,0,NULL);mciSendString("play aa ",NULL,0,NULL);// getchar();}}pp++;}upordown=1;}void SelectCirculMode(){int i=0;Show_GUI_SEVEN();scanf("%d",&i);if(i==1)circulatemode=1;if(i==2)circulatemode=2;}void SaveExit(){/*char dd[20];char log[50]={"testlog!!!"};mciSendString ("status aa position", dd, 20, 0);int d;d=atoi(dd);FILE *fp = NULL;fp = fopen("D:\\SaveLog.txt","a");fwrite(log,1,50,fp);*/}void PlayOperation(){int d;re: clrscr();ShowFileList();ShowFileDetails();Show_GUI_FOUR();printf("请选择要进行的操作:");epo:scanf("%d",&d);fflush(stdin);if(ERR_CheckEntero(d)){switch(d){case 1:Play();goto re;case 2:Stop();goto re;case 3:Resume();goto re;case 6:FastForward();goto re;case 8:FastBack();goto re;case 4:StopStop();goto re;case 9:VolumePlus();goto re;case 10:VolumeReduce();goto re;case 5:Order--;PreSong();goto re;case 7:Order++;NextSong();goto re;case 12:ChooseSong();goto re;case 11:SelectCirculMode();goto re;case 13:mciSendString("close aa", NULL, 0, NULL);return;case 14:SaveExit();// getchar();}}else{goto epo;}};void NewOperation(){ee: int i=0;printf("请选择要进行的操作:");scanf("%d",&i);fflush(stdin);switch(i){case 1:FM_CheckFilePrint(0,Amount);begin = FM_Choose(Amount,begin);break;case 2:begin = FM_Path(begin);break;case 3:break;default:printf("输入有误\n");goto ee;}};void ShowNewList(){FM_List(begin,Amount);NewOrder=Amount+1;PlayOperation();}void ChooseSong(){int id = 0;printf("请输入歌曲号:");scanf("%d",&id);if(id<1||id>Amount){printf("选择歌曲不存在!\n");}else{char ch[200];mciSendString("close aa", NULL, 0, NULL);sprintf(ch,"open \"%s\" alias aa",info[id-1].add);mciSendString(ch,NULL,0,NULL);mciSendString("play aa repeat",NULL,0,NULL);}}。
利用MCI在VC++环境下设计一个播放器
![利用MCI在VC++环境下设计一个播放器](https://img.taocdn.com/s3/m/470e5983ec3a87c24028c40f.png)
利用MCI在VC++环境下设计一个播放器一、实验目的通过动手制作基于Vc++的音乐播放器,了解播放器的原理。
并通过自己动手,在windows 播放器组件的基础上,用自己的算法,去实现自己的界面和自己的播放模式。
二、实验仪器或设备Pc机一台、 windows xp以上操作系统开发环境:Vc++6.0三、总体设计(设计原理、设计方案及流程等)1、设计原理:Microsoft Visual C++是Microsoft公司推出的开发Win32环境程序,面向对象的可视化集成编程系统。
它不但具有程序框架自动生成、灵活方便的类管理、代码编写和界面设计集成交互操作、可开发多种程序等优点,而且通过简单的设置就可使其生成的程序框架支持数据库接口、OLE2,WinSock网络、3D控制界面。
它以拥有“语法高亮”,IntelliSense(自动编译功能)以及高级除错功能而著称。
比如,它允许用户进行远程调试,单步执行等。
还有允许用户在调试期间重新编译被修改的代码,而不必重新启动正在调试的程序。
其编译及建置系统以预编译头文件、最小重建功能及累加连结著称。
这些特征明显缩短程式编辑、编译及连结的时间花费,在大型软件计划上尤其显著。
visual C++ 6.0集成了MFC6.0,于1998发行。
发行至今一直被广泛地用于大大小小的项目开发。
但是,这个版本在WindowsXP下运行会出现问题,尤其是在调试模式的情况下(例如:静态变量的值并不会显示)。
这个调试问题可以通过打一个叫“Visual C++ 6.0Processor Pack”的补丁来解决。
奇怪的是,这个网页强调用户也必须运行Windows 98、Windows NT4.0、或Windows 2000。
2、设计方案:通过Vc++6.0的可视化程序设计界面,运用基本对话框和按钮以及时间条进行界面设计,而后对各个按钮空间,以及时间条空间进行时间编码,依据自己的算法,实现自己的播放器。
VC课程设计--多媒体播放器
![VC课程设计--多媒体播放器](https://img.taocdn.com/s3/m/3f5ee139360cba1aa911da19.png)
课程设计课程名称可视化编程(VC)学院计算机科学与技术学院专业软件工程班级1202姓名指导教师2013——2014学年第2学期目录1.设计题目及要求 (3)2.基本功能描述 (4)3.软件设计模块 (6)3.1文件的打开模块 (6)3.2文件的播放模块 (9)3.3文件的停止模块 (9)3.4全屏模块 (9)3.5快进、快退模块 (9)3.6换皮肤模块 (10)3.7音量调节模块 (12)3.8窗口隐藏模块 (12)3.9文件暂停模块 (12)4.运行结果 (13)5.设计过程中遇到的问题和感想 (15)6.参考文献 (16)一、设计题目及要求1.1设计题目基于MFC的多媒体播放器系统1.2题目要求1.制作一个具有自己设计风格的媒体播放器。
2.要求能随机选取要播放的文件,实现前进,回退,暂停,循环播放,音量大小调节等基本功能。
3.要求能播放多种格式(至少四种或四种以上)的音频视频格式文件。
4.可以实现其它附加功能(不在要求范围之内)5.界面良好,功能完善二、基本功能描述本次课程设计制作的多媒体播放器是利用Windows系统自带的Windows Media Player控件,可以分别通过按钮和菜单实现*.mp3、*.mid、*.avi、*wav等媒体文件的打开、播放、暂停、全屏、音量调节、快进、快退、关闭、循环播放等功能。
还通过更换位图的方式,实现了换皮肤功能。
1.打开文件:通过选择文件类型打开不同类型的文件,如果打开的格式不对,消息框会提醒打开正确的格式的文件。
再打开文件前,其他按键不能进行操作。
2.播放文件:开始播放文件。
3.停止播放:停止播放文件。
4.全屏:将播放器变为全屏。
5.快退、快进:实现快退、快进功能。
6.换皮肤:选择沙漠、可爱棒冰、灯塔、郁金香可以为播放器换不同的背景。
7.音量调节:可以实现调大,调小音量的功能。
三、软件设计模块3.1文件的打开模式在WavePlayDlg.h中设定一个int型的全局m_MediaType,通过选择不同的按钮来给m_MediaType赋不同的值,不同的值代表不同的文件格式。
基于VC的多媒体播放器的设计与开发
![基于VC的多媒体播放器的设计与开发](https://img.taocdn.com/s3/m/f3d3c1566d175f0e7cd184254b35eefdc8d315f4.png)
基于VC的多媒体播放器的设计与开发在设计和开发基于VC的多媒体播放器时,有几个关键的方面需要考虑。
首先,我们需要确定播放器的功能和特性。
其次,我们需要设计用户界面,并开发与之相应的功能。
最后,我们需要确保播放器的性能和稳定性。
在功能和特性的确定方面,我们可以考虑以下几点:1. 支持多种多媒体文件格式:播放器应该能够支持常见的音频和视频文件格式,如MP3,MP4,AVI等。
2. 播放控制功能:播放器应该具备诸如播放,暂停,停止,快进,快退,循环播放,随机播放等基本的播放控制功能。
3. 音量调节功能:播放器应该提供音量增减的功能,使用户可以根据需要调整音量大小。
4. 播放列表功能:播放器应该允许用户创建和管理自己的播放列表,方便用户播放和组织自己的音频和视频文件。
在用户界面的设计方面,我们可以考虑以下几点:1. 主界面设计:主界面应该简洁明了,让用户能够直观地找到所需的功能按钮和控件。
2. 播放控制按钮:应该将常用的播放控制按钮(如播放,暂停,停止)放置在主界面上,方便用户随时进行操作。
3. 播放进度条:应该显示当前正在播放的媒体文件的播放进度,以便用户了解播放进度。
4. 音量控制按钮:应该提供对音量的调节按钮,让用户能够根据需要增加或减少音量大小。
在功能的开发方面,我们可以使用VC等开发工具来实现:1. 文件解码播放:使用合适的解码器来解码音频和视频文件,并通过音频驱动和显示驱动将其播放出来。
2. 播放控制:根据用户的操作,通过调用相关的API来实现播放,暂停,停止,快进,快退等操作。
3. 播放列表管理:通过读取用户的文件夹和文件,将其组织成播放列表,并实现相应的增加,删除和切换操作。
最后,在性能和稳定性方面,我们可以采取以下措施:1. 优化播放器的代码结构和算法,使其能够高效地解码和播放多媒体文件。
2. 对于文件解码过程中可能发生的异常和错误情况,进行适当的异常处理和错误提示,以确保播放器的稳定性和可靠性。
基于VC的多媒体播放器的设计与开发
![基于VC的多媒体播放器的设计与开发](https://img.taocdn.com/s3/m/2808856c59fb770bf78a6529647d27284b7337df.png)
基于VC的多媒体播放器的设计与开发一、引言随着科技的不断进步和互联网的发展,计算机多媒体技术已经被广泛应用于日常生活中。
而多媒体播放器作为计算机多媒体技术的重要应用之一,早已成为人们生活娱乐的重要组成部分。
本文将介绍一种基于VC的多媒体播放器的设计与开发,主要包括系统的功能需求、体系结构设计、核心功能的实现等内容。
二、系统功能需求1. 基本的播放功能:支持常见的音视频文件格式,能够对音乐和视频进行播放、暂停、停止等操作。
2. 画面显示:提供清晰流畅的视频播放效果,支持全屏、窗口模式下的画面显示,能够根据用户需求进行画面大小的调整。
3. 音频输出:支持多种音频输出方式,如扬声器、耳机等,并能够根据用户需求进行音量的调整。
4. 播放控制:提供播放进度条、音量调节、快进快退等播放控制功能,方便用户对音视频进行控制和调节。
5. 播放列表管理:支持用户创建、导入和管理播放列表,方便用户组织和管理自己的音视频文件。
6. 其他功能:支持收藏、分类、搜索等附加功能,方便用户快速找到自己想要播放的音视频文件。
三、体系结构设计基于VC的多媒体播放器的体系结构设计如下:1. 前端界面设计:使用VC进行界面设计,根据用户需求设计简洁、直观的操作界面,使用户可以方便地进行各种操作。
2. 多媒体引擎:使用VC的多媒体编程接口进行音视频播放控制,实现音视频的解码、播放和控制功能。
3. 播放列表管理:设计数据库或文件系统来管理播放列表,实现播放文件的增删改查功能。
4. 用户交互功能:通过与用户的交互实现播放控制、搜索、收藏等功能,提升用户体验。
5. 后台管理功能:实现系统配置、播放规则设置等功能,方便管理员对系统进行管理和维护。
四、核心功能实现1. 多媒体文件格式支持:通过调用VC的多媒体编程接口,实现对常见音视频文件格式的解码和播放功能。
2. 视频播放效果优化:利用VC的图像处理功能实现视频的渲染,提供清晰、流畅的画面显示效果。
用VC++实现多媒体播放器
![用VC++实现多媒体播放器](https://img.taocdn.com/s3/m/1a4168db9f3143323968011ca300a6c30c22f10f.png)
用VC++实现多媒体播放器摘要目前常见的多媒体软件应该讲各有特群,然而几乎每一具都存在着别如人意的地点。
我的课题是“基于VC++开辟工具的媒体播放器软件设计”,首先是初步介绍一些当前的媒体及媒体播放器,然后是详细介绍一具由本人设计的多媒体播放器———mediaplayer。
该播放器是基于MFC集成开辟环境,利用系统的MCI(media controller interface)命令接口来编程,具有体积小,支持的播放格式多、系统资源占用少、支持播放列表编辑、支持各种视频格式等功能优势。
关键词媒体播放器;MCI;播放列表;音频;视频AbstractThe common multimedia software should have their characteristics, but almost each one there is no satisfactory manner. My topic is "based on VC + + development tools for media player software design", the first is an introduction to some of the current media and media player, then the detailed design of a multimedia player himself - mediaplayer. The player is based on MFC integrated development enviroXXXent, using the system MCI (media controller interface) command interface to programming, is small,support multi-format playback, occupy less system resources to support the play list editing, support various video formats such as functional advantages.Keywordsmedia player; MCI; play list; audio; video名目一、引言1课题研究的目的和技术进展的现状1.1研究本课题的目的1.2技术应用的基本现状2论文完成的要紧工作3本课题中的重点二、媒体格式简介.1啥是WMF SDK2 WMF SDK体系结构2.1 生成器结构2.2 读取器结构3 WMF SDK编程开辟环境配置三、软件开辟与设计.1操作办法2具体步骤四、系统测试1测试目的2测试环境3测试办法3.1白盒法3.2黑盒法4测试结果五、结束语XXX基于VC++开辟工具的媒体播放器软件设计一、引言多媒体技术的概念和应用浮现于20世纪80年代初期,通过十余年的进展,随着计算机科学网络的普及和多媒体技术的进展,已成为计算机领域进展的热点技术,针对目前各种媒体格式,怎么简单方便的播放各类媒体已成为人们普遍关注的咨询题,而媒体播放器的开辟也变得十分重要。
基于VC开发工具的媒体播放器软件设计与开发
![基于VC开发工具的媒体播放器软件设计与开发](https://img.taocdn.com/s3/m/33b0e2324b7302768e9951e79b89680203d86bd7.png)
内容摘要
3、创建OpenGL窗口创建一个OpenGL窗口是进行三维图形开发设计的前提。 可以使用GLUT(OpenGL Utility Toolkit)库来创建窗口,设置窗口的大小、 背景色等属性。
内容摘要
4、加载模型和纹理数据在进行三维图形开发设计中,需要加载模型和纹理数 据。可以使用Assimp库来加载各种格式的3D模型数据,而纹理数据则可以通过加 载图片文件的方式进行加载。
二、系统设计
1、数据源管理模块:针对不同的数据源,我们需要使用不同的数据库连接方 式。比如,对于MySQL数据库可以使用标准的JDBC连接方式;对于Oracle数据库 可以使用ODBC连接方式。同时,还需要提供数据导入功能,支持CSV、Excel等格 式的数据导入。
二、系统设计
2、数据预处理模块:该模块主要实现对原始数据的清洗、筛选、转换等功能。 可以使用C++、Python等语言编写算法,对数据进行处理。同时,为了提高数据 处理效率,还需要实现对数据的批量处理和多线程处理功能。
五、软件测试
3、性能测试:测试软件的性能表现,包括播放速度、内存占用、CPU占用等 指标。
五、软件测试
4、兼容性测试:测试软件在不同操作系统、不同硬件环境下的兼容性表现。
六、软件部署
六、软件部署
在软件部署阶段,需要为软件制定合适的发布渠道和售后服务策略。具体包 括以下几个方面:
六、软件部署
内容摘要
一、OpenGL概述 OpenGL是一种跨平台的图形应用程序编程接口(API),它 由近300个不同的函数组成,提供了丰富的图形渲染指令,可以帮助程序员在应 用程序中实现高质量的三维图形渲染。OpenGL的应用领域非常广泛,包括游戏、 影视、科学可视化、虚拟现实等等。
基于Visual C++声音文件操作(自己编写MP3播放器)
![基于Visual C++声音文件操作(自己编写MP3播放器)](https://img.taocdn.com/s3/m/bfb0a609844769eae009ed6c.png)
基于Visual C++6.0的声音文件操作——写自己的播放器三、声音文件的声音数据的读取操作操作声音文件,也就是将WAVE文件打开,获取其中的声音数据,根据所需要的声音数据处理算法,进行相应的数学运算,然后将结果重新存储与WAVE格式的文件中去。
可以使用CFILE类来实现读取操作,也可以使用另外一种方法,拿就是使用Windows提供的多媒体处理函数(这些函数都以mmino打头)。
这里就介绍如何使用这些相关的函数来获取声音文件的数据,至于如何进行处理,那要根据你的目的来选择不同的算法了。
WAVE文件的操作流程如下:1.调用mminoOpen函数来打开WAVE文件,获取HMMIO类型的文件句柄;2.根据WAVE文件的结构,调用mmioRead、mmioWrite和mmioSeek 函数实现文件的读、写和定位操作;3.调用mmioClose函数来关闭WAVE文件。
下面的函数代码就是根据WAVE文件的格式,实现了读取双声道立体声数据,但是在使用下面的代码过程中,注意需要在程序中链接Winmm.lib库,并且包含头文件"Mmsystem.h"。
//获取声音文件数据的函数,pString参数指向要打开的声音文件;{if (pString==NULL)return NULL;HMMIO file1;//定义HMMIO文件句柄;file1=mmioOpen((LPSTR)pString,NULL,MMIO_READWRITE);//以读写模式打开所给的WAVE文件;if(file1==NULL){MessageBox("WAVE文件打开失败!");Return NULL;}char style[4];//定义一个四字节的数据,用来存放文件的类型;mmioSeek(file1,8,SEEK_SET);//定位到WAVE文件的类型位置mmioRead(file1,style,4);if(style[0]!='W'||style[1]!='A'||style[2]!='V'||style[3]!='E')//判断该文件是否为"WAVE"文件格式{MessageBox("该文件不是WAVE格式的文件!");Return NULL;}PCMWAVEFORMAT format; //定义PCMWAVEFORMAT结构对象,用来判断WAVE文件格式;mmioSeek(file1,20,SEEK_SET);//对打开的文件进行定位,此时指向WAVE文件的PCMWAVEFORMAT结构的数据;mmioRead(file1,(char*)&format,sizeof(PCMWAVEFORMAT));//获取该结构的数据;if(format.wf.nChannels!=2)//判断是否是立体声声音;{MessageBox("该声音文件不是双通道立体声文件");return NULL;}mmioSeek(file1,24+sizeof(PCMWAVEFORMAT),SEEK_SET);//获取WAVE文件的声音数据的大小;long size;mmioRead(file1,(char*)&size,4);BYTE *pData;pData=(BYTE*)new char[size];//根据数据的大小申请缓冲区;mmioSeek(file1,28+sizeof(PCMWAVEFORMAT),SEEK_SET);//对文件重新定位;mmioRead(file1,(char*)pData,size);//读取声音数据;mmioClose(file1, MMIO_FHOPEN);//关闭WAVE文件;return pData;}四、使用MCI方法操作声音文件WAVE声音文件一个最基本的操作就是将文件中的声音数据播放出来,用Windows提供的API函数BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound)可以实现小型WAV文件的播放,其中参数lpszSound 为所要播放的声音文件,fuSound为播放声音文件时所用的标志位。
利用Vc6 WMPlayer控件简单制作播放器(MFC)
![利用Vc6 WMPlayer控件简单制作播放器(MFC)](https://img.taocdn.com/s3/m/935ffb2a3169a4517723a307.png)
利用Vc6 Windows media Player控件简单制作播放器(MFC)——本教程由预子制作1:首先打开Vc6新建工程选择MFC AppWizard(exe)2:选择基本对话框:点完成出现—>4:把“取消|TODO”都delet掉;这里我把“确定”按钮拖到了右下角,这个随便5:右击“确定”选属性把标题填上,ID我改为了ID_Open;6:对话框空白处右键选择插入ActiveX控件,选择Windows Media Player路径是c:\...\...\wmp.dll那个,ocx那个我没试,7:右击wmp控件选建立类向导;在Member V ariables下选wmp控件的ID,这里没改就是默认的IDC_OCX1,选右边那个Add V ariable…8:这里会提醒你wmp控件还未插入到该工程,点确定9:确定后直接出现一些供选择的文件,因为初学都包含进来OK10:填写类变量名,这步需要记住该变量名11:OK后出现—>12:双击对话框右下角的按钮填写函数名13:OK后自动跳转到该函数体内;填写代码char szFileFilter[]="Mp3 File(*.mp3)|*.mp3|""Wma File(*.wma)|*.wma|""Video File(*.dat)|*.dat|""Wave File(*.wav)|*.wav|""A VI File(*.avi)|*.avi|""Movie File(*.mov)|*.mov|""Media File(*.mmm)|*.mmm|""Mid File(*.mid;*,rmi)|*.mid;*.rmi|""MPEG File(*.mpeg)|*.mpeg|""All File(*.*)|*.*||";//文件类型过滤CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);if(dlg.DoModal()==IDOK){CString PathName=dlg.GetPathName();PathName.MakeUpper();m_Player.SetUrl(PathName);}m_Player类就是wmp控件的类变量名,上面已经提醒过要记住你起的这个名字14:填完后就可以编译了,如果只编译填代码的这个CPP,系统会提示你出错;要选择全部重建,重建后就可以按!执行了,界面如下15:点Open就可以选择文件播放了Wav声音文件播放Wmv文件播放界面。
C语言实现Mini-Cooledit音频播放器
![C语言实现Mini-Cooledit音频播放器](https://img.taocdn.com/s3/m/6698555dc5da50e2534d7f14.png)
GetDlgItem(IDC_play)->SetWindowText("播放");
mciSendCommand(m_DeviceID, MCI_STOP, NULL, NULL);
mciSendCommand(m_DeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
//获得文件播放的当前位置
MCI_STATUS_PARMS mcistatusparms;
mcistatusparms.dwItem = MCI_STATUS_POSITION;
mcistatusparms.dwReturn = 0;
mciSendCommand(m_DeviceID, MCI_STATUS, MCI_STATUS_ITEM, (DWORD)(LPMCI_STATUS_PARMS)&mcistatusparms);
m_playslider.SetRange(0,mciStatusParam.dwReturn);
m_playslider.SetPos(0);
m_volumeslider.SetRange(0,100);
m_volumeslider.SetPos(100);
}
wav文件的播放与停止
void CMiniDlg::Onplay()
mciSendCommand(m_DeviceID, MCI_STATUS,MCI_WAIT | MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciStatusParam);
str.Format("%d",mciStatusParam.dwReturn);
用VC做一个无需控件支持的MP3播放器
![用VC做一个无需控件支持的MP3播放器](https://img.taocdn.com/s3/m/1ee5401fa300a6c30c229f95.png)
用VC做一个无需控件支持的MP3播放器发布时间:2004.02.27 11:56 来源:赛迪网作者:lilipuss笔者最近阅读了一篇名为《MP3钝器速成》的文章,文中介绍了借助一个名为TmediaPlayer控件用delphi构建MP3播放器的方法。
文章提到TmediaPlayer是调用操作系统内置的MP3解码引擎来实现播放MP3的,那么我们为什么不直接调用这个引擎呢?不用控件岂不是更好?笔者经过一番实践,找到了一种可以实现的方法。
本文将以一个用VC编写的实例来介绍这种不需控件的方法。
1.制作原理首先,让我们先来了解一下MCI(Media Control Interface)媒体控制接口。
MCI是MircroSoft 提供的一组多媒体设备和文件的标准接口,它的好处是可以方便地控制绝大多数多媒体设备包括音频、视频、影碟、录像等多媒体设备,而不需要知道它们的内部工作状况。
它所支持的媒体格式包括avi、wav、mpeg、cda等等。
由于Windows内置了MP3播放引擎MCI也支持MP3,但由于某种不为我们所知的原因,Microsoft并没有公开MCI的这个访问功能。
我们所要做的就是利用这一非公开的访问接口直接调用系统内置引擎实现MP3的播放。
在windows的系统配置文件system.ini(C:\windows\)中有一个[MCI]配置项,该项下列出了通过MCI接口所接受的MCI设备类型与所调用引擎的对应关系,如:mci]cdaudio=mcicda.drvsequencer=mciseq.drvwaveaudio=mciwave.drvavivideo=mciavi.drv我们只需添加条目:mp3audio=mciqtz.drv其中mciqtz.drv即MP3播放引擎驱动。
我们在通过MCI接口编程时只要显式地指明所使用的设备类型为mp3audio,即可实现播放MP3的目的。
余下的工作就只是通过调用MCI接口函数实现播放器的功能了。
vc++音乐播放器课程设计报告
![vc++音乐播放器课程设计报告](https://img.taocdn.com/s3/m/52d32de7172ded630b1cb624.png)
音乐播放器19120104 王萌萌音乐播放器是一种用于播放各种音乐文件的播放软件。
他可以播放各种格式的音频文件,如MP3、Wma、Video、Wave、A VI等。
本音乐播放器设计的技术点如下:1、利用GDI技术绘制音乐信息。
2、通过不规则按钮美化界面。
3、通过Active Movie Control Object 空间播放音乐。
第一部分界面实现简介要实现音乐播放器,在软件界面上要实现多种功能,包括打开(Open)、播放(Play)、暂停(Pause)、停止(Stop)、关闭(Close)、退出(Exit)、音量控制(V olume)、循环(Repeat)等。
功能总述如下图所示:功能总述播放操作最小化到托盘区状态提示播放音乐暂停播放停止播放音量控制打开音乐循环播放时间信息状态信息播放进度文件名称音乐信息界面实现如下图所示:1、1打开音乐文件在播放器上单击Open按钮,弹出“打开”对话框。
根据将要打开的音频文件类型选择过滤器,找到相应文件的路径后便可以将制定音频文件打开,如下图所示:将选中的音频文件打开后,该文件的名称及当前状态将会显示在界面上,如下图所示:1、2播放音乐的功能当打开后,播放器处于停止播放的状态,音频文件的一些信息也没有完全显示出来。
当用户单击Play按钮后,播放器将播放刚刚打开的音频文件,并修改当前的状态,将音频文件的详细信息显示到界面上,进度条及播放时间根据播放进度同时进行状态更新。
如图所示:1、3暂停播放的功能当播放器处于暂停状态时,单击界面上的Pause按钮可使播放器进入暂停状态。
处于暂停状态的播放器记录着当前音频文件的播放进度,一旦用户再次单击Play按钮,播放器可以继续暂停前的播放状态,如图所示:1、4停止播放的功能无论是播放状态还是暂停状态,当用户单击Stop按钮时,播放器将进入停止播放状态,播放进度及时间回到初始状态,只有当用户再次单击Play按钮时,才可以重新播放音频文件,停止播放时,播放器的状态如图所示:1、5循环播放的功能当播放器处于非循环状态时,用户单击Stop按钮或者播放到最后,播放器都将进入停止播放状态,如图所示:而当用户单击Repeat按钮时,进入循环状态,单击Stop按钮或者播放到最后,播放器都将进入重新播放状态,如图所示:1、6调节音量大小在播放器的右侧,有一个滑块可以控制播放器声音的大小。
VC++MP3播放器课程设计实验报告
![VC++MP3播放器课程设计实验报告](https://img.taocdn.com/s3/m/935c3f2fed630b1c59eeb5bc.png)
西安科技大学《VC++程序设计》课程设计报告题目 MP3播放器院、系(部)计算机学院软件工程系专业及班级软件工程0902 姓名王浩日期09080102241 题目要求要求用所学知识编写mp3播放器来实现mp3播放基本功能2 功能需求Mp3播放器基本的添加歌曲,播放,暂停,暂停恢复,停止,下一首,前一首,播放列表,最小化到托盘等3 总体设计3.1 系统模块3.2 系统业务处理流程4 详细设计1.新建对话框MFC应用程序2.添加基类class MCIMP3在头文件中添加#include<mmsystem.h>#pragma comment(lib,"winmm.lib")类成员public:MCIMP3();virtual ~MCIMP3();DWORD MCIOpen(const CString &strPath);DWORD MCIClose();DWORD MCIPlay();DWORD MCIPause();DWORD MCIResume();DWORD MCIStop();DWORD MCISetMute(BOOL bMute);DWORD MCIGetLength(DWORD *dwReturn);DWORD MCIGetPos(DWORD *dwPos);DWORD MCISeekTo(DWORD dwTo);DWORD MCISeekToStart();DWORD MCISeekToEnd();BOOL MCIIsPlaying();BOOL MCIIsOpened();DWORD m_dwLength;protected:MCIDEVICEID m_wID;在类实现文件MCIMP3.cpp中添加如下代码//构造函数MCIMP3::MCIMP3(){m_wID=NULL;m_dwLength=0;}//析构函数MCIMP3::~MCIMP3(){MCIClose();}//打开MCI设备参数为文件地址DWORD MCIMP3::MCIOpen(const CString &strPath) {MCI_OPEN_PARMS mciOP;DWORD dwReturn;ASSERT(m_wID==NULL);mciOP.lpstrDeviceType=NULL;mciOP.lpstrElementName=strPath;dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT|MCI_O PEN_SHAREABLE,(DWORD)(LPVOID)&mciOP);if (dwReturn==0){m_wID=mciOP.wDeviceID;if(this->MCIGetLength(&m_dwLength)!=0)m_dwLength=0;}elsem_wID=NULL;return dwReturn;}//关闭MCI设备DWORD MCIMP3::MCIClose(){MCI_GENERIC_PARMS mciGP;DWORD dwReturn;dwReturn=mciSendCommand(m_wID,MCI_CLOSE,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);m_wID=NULL;return dwReturn;}//播放DWORD MCIMP3::MCIPlay(){MCI_PLAY_PARMS mciPP;return mciSendCommand(m_wID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&mciPP);}//暂停DWORD MCIMP3::MCIPause(){MCI_GENERIC_PARMS mciGP;return mciSendCommand(m_wID,MCI_PAUSE,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);}//继续(从暂停恢复)DWORD MCIMP3::MCIResume()MCI_GENERIC_PARMS mciGP;return mciSendCommand(m_wID,MCI_RESUME,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);}//停止播放DWORD MCIMP3::MCIStop(){MCI_GENERIC_PARMS mciGP;return mciSendCommand(m_wID,MCI_STOP,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);}//到dwTo处DWORD MCIMP3::MCISeekTo(DWORD dwTo){DWORD dwreturn;if (dwTo>0&& dwTo<m_dwLength){MCI_SEEK_PARMS mciSP;mciSP.dwTo=dwTo*1000;dwreturn=mciSendCommand(m_wID,MCI_SEEK,MCI_WAIT|MCI_NOTIFY|MCI_TO, (DWORD)(LPVOID)&mciSP);}else if (dwTo>=m_dwLength)dwreturn=MCISeekToEnd();elsedwreturn=MCISeekToStart();return dwreturn;}//到开始处DWORD MCIMP3::MCISeekToStart(){MCI_SEEK_PARMS mciSP;return mciSendCommand(m_wID,MCI_SEEK,MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_START,(DWORD)(LPVOID)&mciSP); }//到结束处DWORD MCIMP3::MCISeekToEnd(){MCI_SEEK_PARMS mciSP;returnmciSendCommand(m_wID,MCI_SEEK,MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_END, (DWORD)(LPVOID)&mciSP);}//得到播放文件长度DWORD MCIMP3::MCIGetLength(DWORD *dwLength){MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_LENGTH;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP);if(dwReturn==0)*dwLength=mciSP.dwReturn/1000;return dwReturn;}//得到当前播放文件播放到的地方DWORD MCIMP3::MCIGetPos(DWORD *dwPos){MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_POSITION;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP);if(dwReturn==0)*dwPos=mciSP.dwReturn/1000;return dwReturn;}//静音DWORD MCIMP3::MCISetMute(BOOL bMute){MCI_SET_PARMS mciSP;mciSP.dwAudio=MCI_SET_AUDIO_ALL;DWORD dwFlags;if(bMute)dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF;elsedwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_ON;return mciSendCommand(m_wID,MCI_SET,dwFlags,(DWORD)(LPVOID)&mciSP);}//判断是否播放BOOL MCIMP3::MCIIsPlaying(){MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_MODE;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP);if(dwReturn==0){if(mciSP.dwReturn==MCI_MODE_PLAY)return true;}return false;}//判断是否打开BOOL MCIMP3::MCIIsOpened(){MCI_STATUS_PARMS mciSP;mciSP.dwItem=MCI_STATUS_MODE;DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP);if(dwReturn==0){if(mciSP.dwReturn==MCI_MODE_OPEN||mciSP.dwReturn==MCI_MODE_PLAY||mciSP.dwReturn==MCI_MODE_PAUSE||mciSP.dwReturn==MCI_MODE_STOP||mciSP.dwReturn==MCI_MODE_SEEK)return true;}return false;}3.按如图方式添加控件对话框属性改为无边框,列表框属性也为无边框编辑框改为只读无边框控件名控件类型ID 变量类型变量关联正在播放静态文本示例编辑框编辑框ID_NAME CString path示例编辑框编辑框ID_TIME CString m_time列表框IDC_LIST CListBox m_list滑块IDC_SLIDER1 CSliderCrtl m_ctrlSlider4.int flag;int j;int pause;void view();CString str1;CString str;int file1;int play;int time;int nPos;int temp;int i;CString m_Path;MCIMP3 m_mp3player;5.引入背景位图并改ID为IDB_BEIJING和IDB_BEIJINGM在OnPaint函数中else后屏蔽CDialog::OnPaint();在后面添加如下代码if(flag==1){CPaintDC dc(this);CDC memdc;memdc.CreateCompatibleDC(&dc);CBitmap bkg;bkg.LoadBitmap(IDB_BEIJING);BITMAP bkginfo;bkg.GetBitmap(&bkginfo);memdc.SelectObject(&bkg);RECT rect;GetWindowRect(&rect);dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bk ginfo.bmHeight,SRCCOPY);}if(flag==0){CPaintDC dc(this);CDC memdc;memdc.CreateCompatibleDC(&dc) ;CBitmap bkg;bkg.LoadBitmap(IDB_BEIJINGM);BITMAP bkginfo;bkg.GetBitmap(&bkginfo);memdc.SelectObject(&bkg);RECT rect;GetWindowRect(&rect);dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top,&memdc,0,0,bkginfo.bmWidth,bk ginfo.bmHeight,SRCCOPY);}6.系统托盘实现在CPlayerDlg类中添加函数toTray(bool show)void CPlayerDlg::toTray(bool show){// TODO: Add your control notification handler code hereNOTIFYICONDATA pnid;pnid.cbSize=(DWORD)sizeof(NOT IFYICONDATA);pnid.hIcon=AfxGetApp()->LoadI con(IDR_MAINFRAME);strcpy(pnid.szTip,"MP3播放");pnid.hWnd=m_hWnd;pnid.uCallbackMessage=UM_SHOW WINDOW;pnid.uFlags=NIF_ICON|NIF_MESS AGE|NIF_TIP;pnid.uID=ID_TASKBARICON;pnid.uID=(UINT)m_hIcon;if(show){Shell_NotifyIcon(NIM_ADD,&pni d);ShowWindow(SW_HIDE);}else{Shell_NotifyIcon(NIM_DELETE,& pnid);ShowWindow(SW_SHOW);}}在构造函数中添加ON_MESSAGE(UM_SHOWWINDOW,OnNotif yIcon)到BEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)和END_MESSAGE_MAP()之间添加函数voidCPlayerDlg::OnNotifyIcon(WPARAM wParam, LPARAM lParam){switch(lParam){case WM_LBUTTONDBLCLK:toTray(false);break;}}最后对按钮- 添加消息响应函数void CPlayerDlg::OnMin(){// TODO: Add your control notification handler code here toTray(true);}7.实现点击对话框拖动打开classwizard添加WM_LBUTTONDOWNvoidCPlayerDlg::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your messagehandler code here and/or calldefaultPostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x,point.y));CDialog::OnLButtonDown(nFlags, point);}8.初始化变量在构造函数中添加m_time = _T("");path = _T("");i=0;temp=0;nPos=0;play=0;file1=0;pause=0;j=0;flag=0;9.对?按钮添加消息响应函数void CPlayerDlg::OnAbout(){CAboutDlg dlg;dlg.DoModal();}10.对退出按钮添加消息响应函数void CPlayerDlg::OnExit(){exit(0);}11.对添加按钮添加消息响应函数void CPlayerDlg::OnOpen() {CFileDialogfile(TRUE,NULL,NULL,OFN_HIDEREAD ONLY,"MP3 Files (*.mp3)|*.mp3|AVI Files(*.avi)|*.avi|WAVFiles(*.wav)|*.wav|WMAFiles(*.wma)|*.wma");file.DoModal();m_Path=file.GetPathName();intnIndex=m_list.InsertString(-1,m_ Path);m_list.SetCurSel(j);j++;file1=1;}12.对播放按钮添加消息响应函数void CPlayerDlg::OnPlay(){if(play==0&&file1==1){m_ctrlSlider.SetRange(0,100);SetTimer(1,1000,NULL);m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();play=1;path=m_Path;UpdateData(FALSE);}}13.对暂停按钮添加消息响应函数void CPlayerDlg::OnPause(){if(play==1){KillTimer(1);m_mp3player.MCIPause();pause=1;}}14.对继续按钮添加消息响应函数void CPlayerDlg::OnResume() {if(play==1&&pause==1){SetTimer(1,1000,NULL);m_mp3player.MCIResume();}}15.对停止按钮添加消息响应函数void CPlayerDlg::OnStop(){if(play==1){m_mp3player.MCIStop();KillTimer(1);m_ctrlSlider.SetPos(0);// m_mp3player.MCISeekTo(0);m_mp3player.MCIClose();play=0;file1=0;i=0;view();UpdateData(FALSE);}}16.对上一首按钮添加消息响应函数void CPlayerDlg::OnPre(){int n=m_list.GetCurSel();if( play==1 && file1==1 && n-1>=0){CString p;KillTimer(1);m_list.GetText(n-1,p);m_Path=p;i=0;m_list.SetCurSel(n-1);OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);}if(play==1 && file1==1 &&n-1<0){KillTimer(1);m_list.SetCurSel(j-1);CString p;m_list.GetText(j-1,p);m_Path=p;i=0;OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);}}16.对下一首添加消息响应函数void CPlayerDlg::OnNext(){int n=m_list.GetCurSel();if( play==1 && file1==1 && n+1<j){CString p;KillTimer(1);m_list.GetText(n+1,p);m_Path=p;i=0;m_list.SetCurSel(n+1);OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);}if(play==1 && file1==1 && n+1>=j) {n=0;KillTimer(1);m_list.SetCurSel(n);CString p;m_list.GetText(n,p);m_Path=p;i=0;OnStop();file1 = 1;play = 1;m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);}}17.添加定时器响应滑块的移动在classwizard中添加WM_TIMER消息编辑函数void CPlayerDlg::OnTimer(UINT nIDEvent){if(i<m_mp3player.m_dwLength){i++;temp=i*100/m_mp3player.m_dwLengt h;m_ctrlSlider.SetPos(temp);view();Invalidate(FALSE);}CDialog::OnTimer(nIDEvent);}其中view函数需另行添加在类CPlayerDlg中添加view函数void CPlayerDlg::view(){str.Format("%d",i);zhuanhuan(str);str1.Format("%ld",m_mp3player .m_dwLength);zhuanhuan(str1);m_time=str+'/'+str1;UpdateData(FALSE);}18.给DEL按钮添加消息响应函数void CPlayerDlg::OnDellist() {intnIndex=m_list.GetCurSel();if(nIndex!=LB_ERR){delete(CString*)m_list.GetItemDataPtr (nIndex);m_list.DeleteString(nIndex);UpdateData(FALSE);}}19用classwizard添加WM_HSCROLL水平滚动消息的处理函数void CPlayerDlg::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar){if(pScrollBar->GetDlgCtrlID() ==IDC_SLIDER1&&play==1){KillTimer(1);nPos=m_ctrlSlider.GetPos();time=nPos*m_mp3player.m_dwLength /100;i=nPos*m_mp3player.m_dwLength/10 0;m_mp3player.MCISeekTo(time);m_mp3player.MCIPlay();SetTimer(1,1000,NULL);}}19.对话框资源选中列表框打开classwizard添加LBN_DBLCLK响应函数代码如下void CPlayerDlg::OnDblclkList() {intnIndex=m_list.GetCurSel();if(nIndex!=LB_ERR||play==1||f ile1==1){CString p;m_list.GetText(nIndex,p);m_Path=p;i=0;OnStop();m_mp3player.MCIOpen(m_Path);m_mp3player.MCIPlay();path=m_Path;SetTimer(1,1000,NULL);play=1;file1=1;}}20.在初始化时定义对话框的大小以及位置在OnInitDialog函数中添加MoveWindow(200,200,444,146);为List按钮添加消息响应函数void CPlayerDlg::OnListbutt() {if(flag==0){for(int i=146;i<=233;i++){Sleep(2);MoveWindow(200,200,444,i);Invalidate(FALSE);}flag=1;}else{for(int i=233;i>=146;i--){Sleep(2);MoveWindow(200,200,444,i);Invalidate(FALSE);}flag=0;}}5 测试与实现主界面打开列表添加列表添加列表项并播放上一首List最小化到托盘停止Del6 总结该程序基本完成了一个播放器需要的基本功能,能显示进度条能通过进度条的拖动到歌曲相应位置,但是不足之处也是很多,首先一些空间在刷过背景图后成了白色的块块影响美观,没有完成连续播放,随机播放,单曲循环等等,没有实现音量的变化,在时间的位置没有把秒转化为分钟:秒的样子,由于时间的原因从原先不会mci到现在懂得了点皮毛并作出了个播放器,我觉得我收获还是挺大的,通过这个程序以及这一周来的时间做的课程设计,我对对话框的编程又有了更深入的认识,明显比上次做计算器要来的熟练的多,希望以后通过程序的制作能提高我的编程能力。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
程序效果
音乐播放器可以播放Windows下常用的音频和视 频文件,如MP3、MIDI、WAV、WMA等。程序 的界面如图所示。用户可通过文件对话框添加想 要播放的文件和删除音乐文件,并可实现暂停、 关闭或重播的功能,并显示播放的时间和正在播 放文件的全路径和文件名,同时,在媒体文件播 放的过程中,用户可随时调节音,还可以设置播 放模式,如单曲循环,顺序播放等,同时,可以 同步歌词。
Softeem Consultancy Service
3,界面布局。在对话框中添加相应的控件,完成相应功能,最终效果如图:
Softeem Consultancy Service
4.进行对话框、控件的相应美化。 (1)给对话框添加背景 (2)给按钮添加位图 (3)使静态文本透明
实现播放音乐
Windows MCI与多媒体软件开发 Windows MCI(Media Control Interface)是控制多媒体设备的高层命令接口, 提供了与设备无关的控制多媒体设备的方法。MCI可控制的多媒体设备包括标准 的多媒体设备,如CD音频(CD Audio)、数字视频、动画、Wave格式数字声 音和MIDI音序器,以及影碟机等可选设备。MCI包含在Windows系统的 MMSYSTEM.DLL动态链接库中,用以协调多媒体事件和MCI设备驱动程序之间 的通信。一些MCI设备驱动程序,影碟机设备驱动程序,可以直接控制目标设备 ;另外一些MCI 设备驱动程序,如Wave和MIDI 设备驱动程序,通过 MMSYSTEM中的函数间接控制目标设备;还有一些MCI设备驱动程序则提供了 与其他Windows动态链接库的高层接口。MCI提供两种不同但相互联系的接口方 式。第一种方式利用消息和数据结构来给多媒体设备发送命令并接收设备传来的 信息,这种方法用函数mciSendCommand来给设备发送命令。其原型为:
Softeem Consultancy Service
为了使用MCI编程,必须包含多媒体头文件: #include <mmsystem.h> 并在项目属性中添加对多媒体库winmm.lib链接。
Softeem Consultancy Service
wchar_t buf[256]; MCIERROR err = mciSendString(L"open cdaudio alias cd", NULL, 0, NULL); // 打开CD if (err) { if (mciGetErrorString(err, buf, 256)) MessageBox(buf, L"Error"); // 获得并显示错误串 return; } mciSendString(L"status cd number of tracks", buf, 256, NULL); // 获得音轨总数 m_nTracks = wcstol(buf, NULL, 10); // 这里使用了宽字符版的 字符串到整数的 // 转换函数:long wcstol( const wchar_t *nptr, wchar_t **endptr, int base ); wsprintf(buf, L"play cd from %d to %d", m_nFrom, m_nTo); mciSendString(buf, NULL, 0, NULL); // 从音轨m_nFrom头播 放到音轨m_nTo–1尾
Softeem Consultancy Service
MCIERROR mciSendCommand ( MCIDEVICEID IDDevice, UINT uMsg, DWORD fdwCommand, DWORD dwParam ); 参数IDDevice表示用来接收命令的设备的标识符,注意在打开设备时不用该参数 uMsg是要发送的命令;fdwCommand是命令消息的标志,而参数dwParam则是一 个指向包含命令消息的参数的结构。如该参数返回非0 值,则表示设备驱动出错, 这时可用mciGetErrorString函数来取得错误信息,其原型为: BOOL mciGetErrorString ( DWORD fdwError, LPTSTR lpszErrorText, UINT cchErrorText ); 参 数 fdwError 是由mciSendCommand 或mciSendString 返回的错误代码; 参数 lpszErrorText是一个指针,它指向用来存储错误描述信息的缓冲区;参数 cchErrorText表示缓冲区的长度,以字符为单位。
Softeem Consultancy Service
MCI接口的第二种方式是使用ASCII字符串来发送驱动设备的命令,这种 方式采用函 数mciSendString把命令字符发送给设备。其原型为: MCIERROR mciSendString ( LPCTSTR lpszCommand, LPTSTR lpszReturnString, UINT cchReturn, 第5 章媒体播放器——多媒体程序设计113 HANDLE hwndCallback ); 参数lpszCommand是要发送的MCI命令字符串;参数lpszReturnString是 一个指向接收返回信息的缓冲区的指针;cchReturn表示缓冲区的长度, 以字符为单位;hwndCallback是回调窗口的句柄,一般为NULL。 这 种 字 符 串 命 令 很 直 观 方 便 , 近 似 自 然 语 言 , 如 “ play cdaudio ” , “stop waveaudio”等。返回的信息字符串由 lpszReturnString带回,如该函数返回非0值,同样可用 mciGetErrorString获取错误信息。
Softeem Consultancy Service
程序界面
Softeem Consultancy Service
创建初始界面程序
实现界面美化
1,首先新建一个工程,取个好听的名字,这里命名为Multimedia,然 后选择Dialog based,点击OK完成。
2,设置对话框显示风格。在对话框点右键属性,设置边框为细小,把标题 栏复选框去掉,其他默认。如图: