在使用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); // 停止后台播放
不管你是转行也好,初学也罢,进阶也可,如果你想学编程~
【值得关注】我的 编程学习交流俱乐部【点击进入】
标签:NULL,mymusic,软件开发,代码,音乐,C语言,mciSendString,mp3,播放 From: https://www.cnblogs.com/2467118965z/p/17523882.html