解决用mciSendString()函数不能播放音乐的问题

因为最近老师留了一个C语言的编程作业,其中有一项要求是可以考虑添加音乐播放功能,因为我也比较好奇用C语言在控制台就能播放一首歌曲?然后我查了一下资料,发现用C语言自带的函数就可以,话不多说,直接进入正文。

--------------分割线--------------------
6月23日
我当时查资料的时候忘了一个很重要的事情,就是大家在用这个函数的时候下载的音乐格式一定要是MP3的,但是网易云下载的音乐虽然是MP3格式的但是在这个函数是播放不了的,好像就是因为下载的音乐其实是flac格式,所以播放不了,所以大家要在qq音乐下载才可以播放。
--------------分割线--------------------
首先要有以下头文件和预处理指令

#include
#pragma comment(lib,"WINMM.LIB")

其中mmsystem.h的头文件是关于Windows多媒体播放的头文件,具体相关知识可以百度。

然后pragma预处理命令,它的作用是设定编译器的状态或者是指示编译器完成一些特定的动作,具体内容同百度。

接下来介绍一个重要的函数:
mciSendString()
它是用来播放多媒体文件的API指令,可以播放MPEG,AVI,WAV,MP3,等等。

因为我们本次问题是解决不能播放音乐问题嘛,所以此函数的具体参数不在此赘述,接下来说一般情况。

一般播放音乐用以下格式就行:

mciSendString("open Summer.mp3 alias song",NULL,0,NULL);
mciSendString("play song repeat",NULL,0,NULL);

只需要记住前一个参数就行,首先是open、play、close等命令分别对应打开、播放、关闭。所以我一般播放音乐的方法是先open,再play。

首先是打开

**mciSendString(“open Summer.mp3 alias song”,NULL,0,NULL)

open+文件的相对路径或者绝对路径(取决于你播放的音乐与你程序的相对位置)

alias我们可以把他理解为用alias后面的名字代替你的音乐名字,这样方便我们进行后续的操作,只需要输入你的替代名字即可(免去了如果歌曲名字长的情况下的麻烦)

后面的三个参数照我这样写就行,因为我们只是简易播放音乐,所以不必深究。

接下来是播放:

mciSendString(“play song repeat”,NULL,0,NULL);

play+音乐名字(或者是alias后面的替代名称)+[播放选择]
播放选择包括repeat、wait。
repeat表示重复播放歌曲。
wait表示当歌曲播放完毕函数才返回。

同上后面三个参数照写我们不必深究。

最后是关闭:

mciSendString(“close song”,NULL,0,NULL);

close+音乐名字(或者替代名字),后面三个参数同上。

到这里我们就可以在控制台播放音乐了,这里先说几个我遇到的问题:
1.如果你的编译器是VC,那么恭喜你,你的程序会顺利通过编译,但是如果你用是Dev的话,那么他就会报错,具体原因是你的lib文件没有链接到exe文件中,具体解决方案可以参考下面这篇文章:

https://blog.csdn.net/qq_45021180/article/details/97640994

2.当你解决了编译的问题以后,你会发现如果按照以下代码,仍然无法播放音乐

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

int main()
{
	mciSendString("open Summer.mp3 alias song",NULL,0,NULL);
	mciSendString("play song",NULL,0,NULL);
	return 0;

我们可以简单理解为因为歌曲还没来的及播放就已经返回,有以下两种解决方法:

1.在play song后面加上wait,也就是我们上文说的,等播放完歌曲再返回,即可解决问题

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

int main()
{
	mciSendString("open Summer.mp3 alias song",NULL,0,NULL);
	mciSendString("play song wait",NULL,0,NULL);
	return 0;
} 

2.我们可以在代码中加入system(“pause”)这个指令,先不让程序返回,直到你想让它返回再返回。

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

int main()
{
	mciSendString("open Summer.mp3 alias song",NULL,0,NULL);
	mciSendString("play song",NULL,0,NULL);
	system("pause");
	return 0;
} 

至此我们的问题已经解决了,如果还有什么不懂请私聊博主。

你可能感兴趣的:(Problem,Solving,c语言)