前言
播放windows的一个API函数有两个PlaySound和mciSendString
PlaySound可以用来播放音乐,但是不支持mp3和wma
因此今天我们用mciSendString函数来播放音乐
一、mciSendString函数
官方枯燥解释:
函数原型为:
MCIERROR mciSendString(
LPCSTR lpstrCommand,
LPSTR lpstrReturnString,
UINT uReturnLength,
HWND hwndCallback
);
使用mciSendString播放音乐
1,返回值:MCIERROR即DWORD类型,而DWORD类型就是unsigned int,执行成功返回0,出错返回非0值
2,lpstrCommand,指向以null结尾的命令字符串:”命令 设备[参数]”
3,lpstrReturnString,指向接收返回信息的缓冲区,为NULL时不返回信息
4,uReturnLength,上述缓冲区的大小
5,hwndCallback,在命令串中含notify时,它指定一个回调窗口的句柄,一般为NULL
说人话:
mciSendString(" ",0,0,0);
第一个参数用来发出指令
一共有四个: open 打开音乐文件 play 播放音乐 repeat 重复播放 close 关闭音乐文件
二、上代码
1.必要的头文件和预处理
我在很久之前刚开始想要播放音乐的时候也看了大部分的文章找了很多资料但是都说的不是特别详细
今天详细介绍一下必要的两个头文件和一个预处理
#include<windows.h>
API函数必然要用windows头文件
同时也用到system(“pause”);函数防止程序直接结束导致的不出声音
#include<mmsystem.h> —用来包含多媒体设备接口头文件
#pragma comment (lib,“winmm.lib”)—用来加载静态库
2.音乐文件
值得注意的是mciSendString支持MPEG,AVI,WAV,MP3等格式
但是建议大家下载的音乐不要在网易云上其解码方式不一样可能导致有的播放失败
下载音乐之后点击源文件所在目录
把所要播放的音乐文件拷过来要和cpp文件在同一目录下
3.修改字符集为多字符
具体三种方法
在另一篇文章中讲过https://blog.csdn.net/weixin_51484780/article/details/118851294
否则会出现报错
4.播放音乐
这里我的音乐文件名称是2.mp3
代码如下(示例):
#include<Windows.h>
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment (lib,"winmm.lib")//加载静态库
int main()
{
//alias 的作用是取别名
mciSendString("open 2.mp3 alias a ",0,0,0);//音乐在当前目录下也可以写"open ./2.mp3"./这里可以省略
mciSendString("play a", 0, 0, 0);
//mciSendString("repeat a", 0, 0, 0); repeat 重复播放
//mciSendString("close a", 0, 0, 0); close 关闭播放
system("pause");//这里没有暂停程序会直接停止听不到音乐
return 0;
}
还有一点要说明的是当你的音乐不和源文件在同一目录下的时候需要open 后边加上该音乐文件的相对路径
运行过程如下,声音大家自己去倾听吧:
此时无声胜有声