C语言中mciSendString用法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C语言中mciSendString用法相关的知识,希望对你有一定的参考价值。
用mciSendString来播放音乐。
已经能打开MP3并播放。但是不知道要怎么暂停,终止播放。
mciSendString("pause movie",buf,sizeof(buf),NULL);没有用(或者说我不知道要怎么用)
要怎么弄?
该函数有四个参数:
第一个参数:要发送的命令字符串。字符串结构是:[命令][设备别名][命令参数];
第二个参数:返回信息的缓冲区,为一指定了大小的字符串变量;
第三个参数:缓冲区的大小,就是字符变量的长度;
第四个参数:回调方式,一般设为零;
返回值:函数执行成功返回零,否则返回错误代码。
参考用法如下:
Dim mName as string
mName = "f:\\mpeg\\mpeg1.avi"
mciSendString "open mName type MPEGVideo Alias movie parent %u Style %u notify",0&, 0, 0
如何在C语言游戏代码中加入音乐?
很多小伙伴在用C语言写游戏时,不知道怎么加音乐,今天一步到位分享给大家!
使用 mciSendString 播放音乐
mciSendString 支持 mp3、wma、wav、mid 等多种媒体格式,使用非常简单。这里做一个简单的范例,用 mciSendString 函数播放 MP3 格式的音乐,代码如下:
// 编译该范例前,请把 music.mp3 放在项目文件夹中
// 发布时,请把 music.mp3 和编译的 exe 放在一起
// 编译环境:VC6~VC2019 + EasyX_20210115
//
#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);
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 命令关闭。
另外还有一个 PlaySound 函数也可以用来播放声音,不过可惜不支持 mp3 / wma,这里就不多做介绍了。
丨一些有用的多媒体命令:
从头播放 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 的循环播放:
// 该范例演示使用 mciSendCommand 函数循环播放 mp3
// 编译环境:VC2008~VC2019 + EasyX_20210115
//
#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); // 关闭音乐
outtextxy(0, 0, L"按任意键退出程序");
_getch();
closegraph();
return 0;
解决某些 MP3 无法播放的问题
有些 mp3 无法用 mciSendString 播放,是因为用了比较大的封面,我测试过一个 mp3 的封面尺寸是 1824x1824,直接无法播放。将封面尺寸修改为 500x500,顺利播放。当然,更简单的办法是直接移除封面。
使用 PlaySound 函数播放音乐
PlaySound 可以用来播放 wav 和系统声音,使用很简单,一些常用的用法如下:
// 注意:
// 1. 需要使用预编译指令 #pragma comment(lib, "winmm.lib") 链入库文件
// 2. 第一个参数是字符串,注意使用程序中约定的字符集,例如 Unicode 字符集需要在字符串前面加 L
//
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); // 停止后台播放
更强大的音乐播放库
更强大的音乐播放可以用 bass 或 fmod 库,这里不做过多介绍。
——————————————
不管你是转行也好,初学也罢,进阶也可,如果你想学编程~
【值得关注】我的 编程学习交流俱乐部【点击进入】
以上是关于C语言中mciSendString用法的主要内容,如果未能解决你的问题,请参考以下文章