- UID
- 1
- 精华
- 积分
- 76361
- 威望
- 点
- 宅币
- 个
- 贡献
- 次
- 宅之契约
- 份
- 最后登录
- 1970-1-1
- 在线时间
- 小时
|
mciSendCommand可用于播放各种多媒体文件,比如WAV、CD音乐、MP3、AVI、MID等。这个函数在百度和MSDN上已经有很充足的介绍了,键人在此不再赘述。
大致参数格式如下:
MMRESULT 返回结果=mciSendCommand(设备ID,命令,参数1,参数2);
返回结果详见MSDN。而设备ID可以通过使用命令MCI_OPEN获取。
直接贴源码。大家看看它是怎么用的就行。- //=============================================================================
- //作者:0xAA55
- //论坛:http://www.0xaa55.com/
- //版权所有(C) 2013-2014 技术宅的结界
- //请保留原作者信息,否则视为侵权。
- //-----------------------------------------------------------------------------
- #include<stdio.h>
- #include<conio.h>
- #include<Windows.h>
- void Usage(char*argv0)
- {
- if(!argv0)
- argv0="MidiPlay";
- fprintf(stderr,
- "Usage\n"
- "%s midifile.mid",argv0);
- }
- int main(int argc,char**argv)
- {
- MCIERROR result;
- MCI_OPEN_PARMS mciOpenParms={0};
- MCI_PLAY_PARMS mciPlayParms={0};
- MCI_STATUS_PARMS mciStatusParms={0};
- MCI_SEQ_SET_PARMS mciSeqSetParms={0};
- if(argc<2)
- {
- Usage(argv[0]);
- return 1;
- }
- //打开MCI设备
- mciOpenParms.dwCallback=0;
- mciOpenParms.wDeviceID=0;
- mciOpenParms.lpstrDeviceType=(LPCSTR)MCI_DEVTYPE_SEQUENCER;//设置文件格式为MIDI序列。改这里,可以使其用于播放其他格式的多媒体文件。
- mciOpenParms.lpstrElementName=argv[1];//文件名
- mciOpenParms.lpstrAlias=NULL;//别名
- result=mciSendCommand(0,MCI_OPEN,MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT,(DWORD_PTR)(&mciOpenParms));//取得设备ID。
- if(result)
- goto BadReturn;
- //取得状态
- mciStatusParms.dwItem=MCI_SEQ_STATUS_PORT;
- result=mciSendCommand(mciOpenParms.wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD_PTR)(&mciStatusParms));
- if(result)
- goto BadReturn;
- //判断MIDI映射
- if(LOWORD(mciStatusParms.dwReturn)!=MIDI_MAPPER)
- {
- fputs("The MIDI mapper is not available. Continue?[Y/N]\n",stdout);
- for(;;)//这样按错键也没关系
- {
- char ch=_getch();
- if(ch=='Y'||ch=='y')
- break;
- else if(ch=='N'||ch=='n')
- {
- mciSendCommand(mciOpenParms.wDeviceID,MCI_CLOSE,0,0);
- return 0;
- }
- }
- }
- //播放
- result=mciSendCommand(mciOpenParms.wDeviceID,MCI_PLAY,0,(DWORD_PTR)&mciPlayParms);
- if(result)
- goto BadReturn;
- fputs("Press any key to stop playing.\n",stdout);
- _getch();
- //停止并结束
- mciSendCommand(mciOpenParms.wDeviceID,MCI_CLOSE,0,0);
- return 0;
- BadReturn:
- fprintf(stderr,"MCIERROR=0x%08X\n",result);
- if(mciOpenParms.wDeviceID)
- mciSendCommand(mciOpenParms.wDeviceID,MCI_CLOSE,0,0);
- return 2;
- }
复制代码 BIN:
MidiPlay.exe
(40 KB, 下载次数: 0, 售价: 1 个宅币)
SRC:
MidiPlay.7z
(16.57 KB, 下载次数: 0, 售价: 2 个宅币)
这个实例只能用于播放文件,如果要用于播放内存中的MIDI文件,你需要额外的手段。
要编译源码你需要链接winmm.lib,这意味着编译出的程序依赖于winmm.dll运行。winmm是系统DLL,不过也不排除某些GHOST系统缺失这个DLL。 |
|