怎样在C语言软件开发代码中加入音乐?

发布时间 2023-07-03 20:09:00作者: 我真的不会C语言

在使用C语言编写游戏时,许多朋友遇到了添加音乐的问题,不知道该如何处理。今天我将一次性向大家分享解决方法!

使用mciSendString函数播放音乐

mciSendString函数支持多种媒体格式,如mp3、wma、wav、mid等。使用起来非常简单。下面是一个简单的示例,使用mciSendString函数播放MP3格式的音乐,代码如下:

#include <graphics.h>
#include <conio.h>
// 引用 Windows Multimedia API
#pragma comment(lib, "Winmm.lib")
 
int main()
{
	initgraph(640, 480);
 
	// 打开音乐
	mciSendString(_T("open music.mp3 alias mymusic"), NULL, 0, NULL);
 
	outtextxy(0, 0, _T("按任意键开始播放"));
	_getch();
 
	// 播放音乐
	mciSendString(_T("play mymusic"), NULL, 0, NULL);//学习交流群:558970390
 
	outtextxy(0, 0, _T("按任意键停止播放"));
	_getch();
 
	// 停止播放并关闭音乐
	mciSendString(_T("stop mymusic"), NULL, 0, NULL);
	mciSendString(_T("close mymusic"), NULL, 0, NULL);
 
	outtextxy(0, 0, _T("按任意键退出程序"));
	_getch();
	closegraph();
	return 0;

简单解释一下:

必须使用Winmm.lib库文件。在这个示例中,通过#pragma comment命令引用,也可以在项目属性中设置。这里不详细介绍。

mciSendString函数功能强大,甚至可以播放视频,但在这里不做详细介绍,请参阅MSDN获取详细信息。大多数情况下,只需要使用第一个参数,将其他三个参数设置为NULL、0和NULL即可。

第一个参数是多媒体命令字符串,不区分大小写。在程序中,首先使用open命令打开background.mp3,并通过alias指定别名为“mymusic”,这样在后续代码中可以方便地通过“mymusic”访问该音乐。当然,不一定需要指定别名,也可以每次通过文件名进行访问。open后面的mp3文件可以使用绝对路径或相对路径。然后可以使用“play mymusic”开始播放,使用“stop mymusic”停止播放,使用“close mymusic”关闭文件。

如果需要同时播放多个音乐,请为不同的音乐指定不同的别名,然后分别操作即可。当不再需要播放的音乐时,请记得使用close命令关闭。

一些有用的多媒体命令:

从头播放 xxx:

"play xxx from 0"

循环播放 .mp3 文件(.wma 文件同样可以):

"open xxx.mp3"
"play xxx.mp3 repeat"

循环播放 .wav 文件(.mid 文件同样可以):

"open xxx.wav type MPEGVideo"
"play xxx.wav repeat"

关闭当前程序打开的所有多媒体文件:

"close all"

如果文件名中有空格,需要用双引号引起来文件名(注意转义):

mciSendString("open \"D:\\My Music\\好朋友.mp3\" alias mymusic", NULL, 0, NULL);

操作中可能会遇到很多的的问题,可以到访我的主页群交流解决

 

使用 mciSendCommand 命令进行音乐播放的方式如下:

mciSendCommand 与 mciSendString 的功能相似,只是控制方式稍有差异。因此,不需要过多介绍 mciSendCommand,我们只看一个使用示例吧。以下范例实现了 mp3 音乐的循环播放:

#include <graphics.h>
#include <Digitalv.h>
#include <conio.h>
#pragma comment(lib, "winmm.lib")
 
int main()
{
	initgraph(640, 480);
 
	// 打开音乐文件
	MCI_OPEN_PARMS mciOpenParms;
	mciOpenParms.lpstrDeviceType = L"sequencer";
	mciOpenParms.lpstrElementName = L"R:\\Downloads\\test.mp3";
	mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_ELEMENT | MCI_WAIT, DWORD_PTR(&mciOpenParms));	// 打开指定媒体文件
	UINT wDeviceID = mciOpenParms.wDeviceID;	// 返回的 Device ID 需要保存下来,以便实现后续控制
 
	outtextxy(0, 0, L"按任意键开始播放");
	_getch();
 
	// 播放音乐
	MCI_PLAY_PARMS mciPlayParms;
	mciSendCommand(wDeviceID, MCI_PLAY, MCI_DGV_PLAY_REPEAT, DWORD_PTR(&mciPlayParms));
 
	outtextxy(0, 0, L"按任意键停止播放");
	_getch();
 
	// 停止播放并关闭音乐
	mciSendCommand(wDeviceID, MCI_STOP, 0, NULL);	// 停止播放
	mciSendCommand(wDeviceID, MCI_CLOSE, 0, NULL);	// 关闭音乐 //学习交流群:558970390
 
	outtextxy(0, 0, L"按任意键退出程序");
	_getch();
	closegraph();
	return 0;

解决一些无法播放的MP3文件的问题

部分MP3文件在使用mciSendString函数播放时出现问题,这是因为它们包含了较大的封面图像。我测试了一个封面尺寸为1824x1824的MP3文件,结果无法播放。但是,当我将封面尺寸修改为500x500时,成功地进行了播放。当然,更简单的解决方法是直接移除封面图像。

 

使用PlaySound函数播放音乐

PlaySound函数可以用来播放WAV文件和系统声音,使用起来非常简单。以下是一些常用的用法示例:

PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_SYNC);				// 播放 Bells.wav,并等待直到播放结束
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_ASYNC);			        // 后台播放 Bells.wav,函数立即返回
PlaySound("SystemExclamation", NULL, SND_ASYNC);				// 后台播放系统定义的 SystemExclamation 声音
PlaySound("C:\\SOUNDS\\BELLS.WAV", NULL, SND_LOOP | SND_ASYNC);  	        // 后台循环播放 Bells.wav
PlaySound(NULL, NULL, 0);						        // 停止后台播放

不管你是转行也好,初学也罢,进阶也可,如果你想学编程~

【值得关注】我的 编程学习交流俱乐部【点击进入】