MFC学习实践之简易音乐播放器(一)主界面演示及基本原理说明

4643 人浏览 | 时间: 2017-03-07 09:15:32 | 作者: 971439437

这个音乐播放器在2014年下半年刚学习windows编程时慢慢摸索着写的,中间断断续续,大概2015年元旦左右结束,之后就再也没有更新优化了!一放就放了这么久,学习过程中写过许多小程序,但由于资料保存不当,U盘丢失,好多源代码都没了,因而想把之前学习过程中自己写的小程序代码发布出来,一方面可以互相交流学习,另一方面也可以时时保存!

该播放器采用较老的VC6..0编写!

1.首先进行界面展示说明及基本原理说明。(MFC的界面可能比较丑,我自己也没有去美化,将就着看吧)。

    主界面:

    

    音乐文件添加扫描菜单:

    

    迷你模式下界面菜单:

    

    软件配置界面:

    

从主界面上可以看出,目前只有基础的播放/暂停,停止,上一曲,下一曲,声音,进度,播放模式切换记忆一系列的定时操作。

2.音乐播放功能使用的核心API函数:

MCIERROR mciSendString(
LPCTSTR lpszCommand, //MCI命令字符串
LPTSTR lpszReturnString, //存放反馈信息的缓冲区
UINT cchReturn, //缓冲区的长度
HANDLE hwndCallback //回调窗口的句柄,一般为NULL
); //若成功则返回0,否则返回错误码。
该函数返回的错误码可以用mciGetErrorString函数进行分析,该函数的声明为:

BOOL mciGetErrorString(
DWORD fdwError, //函数mciSendString返回的错误码
LPTSTR lpszErrorText, //接收描述错误的字符串的缓冲区
UINT cchErrorText //缓冲区的长度
);
使用MCI API,源文件中需要包含头文件 Mmsystem.h :

#include "mmsystem.h"     
#pragma  comment(lib,"winmm.lib")

本音乐播放器中所使用的命令字符串参数说明:

命令+设备名(或路径名)+附加命令

open 打开设备或文件

    open附加命令 

        alias 为设备或文件取别名

play 播放 

    play附加命令 

        from p1 (to p2)   从p1毫秒处开始播放(至p2处)

        wait 等待

        repeat 重复播放

pause 暂停

resume 恢复

stop 停止

close 关闭

seek …… to ……文件或设备定位  (PS:seek之后需要调用play)

setaudio volume …… to …… 设置声音大小

举个简单的例子:

假如在F盘根目录下有个音乐文件music.mp3,新建win32控制台程序。

        即使有音乐,也无法演示,就只能采用字符串输出提示的方式来阐述!

// music.cpp : 定义控制台应用程序的入口点。
//

#include "stdafx.h"
#include <iostream>
#include <Windows.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")

using namespace std;
int main()
{
 
 TCHAR path[MAX_PATH] = L"F:\\music.mp3";
 TCHAR cmdstr[MAX_PATH] = L"";
 wsprintf(cmdstr, _T("open %s alias music"),path);
 //open+音乐全路径+alias+别名 打开音乐文件
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 cout << "音乐文件打开成功!" << endl;
 }
 else
 {
 cout  << "音乐文件打开失败!" << endl;
 }
 getchar();
 wsprintf(cmdstr, _T("play music"));//pause +音乐全路径(或别名) 播放音乐
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 cout << "音乐播放成功!" << endl;
 }
 else
 {
 cout << "音乐播放失败!" << endl;
 }
 getchar();
 wsprintf(cmdstr, _T("pause music"));//pause +音乐全路径(或别名) 暂停音乐
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 cout << "音乐暂停成功!" << endl;
 }
 else
 {
 cout << "音乐暂停失败!" << endl;
 }
 getchar();
 wsprintf(cmdstr, _T("resume music"));//resume+音乐全路径(或别名) 继续播放音乐
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 cout << "继续播放音乐!" << endl;
 }
 else
 {
 cout << "音乐播放失败!" << endl;
 }
 getchar();
 TCHAR sLen[MAX_PATH] = L"";
 int iLen = 0;
 wsprintf(cmdstr, _T("status music length"));
//status+音乐全路径(或别名)+length 获取音乐长度
 if (mciSendString(cmdstr, sLen,MAX_PATH, NULL) == 0)
 {
 iLen=_wtoi(sLen);
 cout << "音乐的总长度为:" <<iLen<< endl;
 }
 else
 {
 cout << "获取音乐长度失败!" << endl;
 }
 getchar();
 /*
 wsprintf(cmdstr, _T("stop music"));//stop+音乐全路径(或别名) 停止播放
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 cout << "音乐停止成功!" << endl;
 }
 else
 {
 cout << "音乐停止失败!" << endl;
 }
 getchar();
 */
 wsprintf(cmdstr, _T("play music from %d"), iLen / 2);
//play+音乐全路径(或别名)+form+位置 指定位置播放音乐
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 iLen = _wtoi(sLen);
 cout << "音乐播放跳转成功!" << endl;
 }
 else
 {
 cout << "音乐播放跳转失败!" << endl;
 }
 getchar();
 wsprintf(cmdstr, _T("setaudio music volume to 500"));
 //setaudio+音乐全路径(或别名) +volume+音量大小 设置声音大小 变化范围0-1000
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 iLen = _wtoi(sLen);
 cout << "音量设置成功!" << endl;
 }
 else
 {
 cout << "音量设置失败!" << endl;
 }
 getchar();
 wsprintf(cmdstr, _T("close music"));//close+音乐全路径(或别名) 关闭文件
 if (mciSendString(cmdstr, NULL, 0, NULL) == 0)
 {
 iLen = _wtoi(sLen);
 cout << "音乐文件关闭成功!" << endl;
 }
 else
 {
 cout << "音乐文件关闭失败!" << endl;
 }
 getchar();
    return 0;
}

运行结果:

至此,主界面演示及基本原理说明结束了!下一节,主界面控件设计及类向导成员变量及成员函数说明!

相关阅读