源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib。或添加代码#pragma comment(lib, 'winmm.lib')
MCI_OPEN_PARMS op; void CMCIDlg::OnPlay() { // TODO: Add your control notification handler code here DWORD cdlen;//音频文件长度 op.dwCallback=NULL; op.lpstrAlias=NULL; op.lpstrDeviceType=_T('MPEGAudio'); //设备类型,大多数文件可以这样设置 op.lpstrElementName=_T('D:\\2.mp3'); //文件路径 op.wDeviceID=NULL; //打开设备成功以后保存这个设备号备用 UINT rs; //接受函数返回结果 //发送命令打开设备,成功返回0,否则返回错误号,第三个参数这里必须MCI_OPEN_ELEMENT rs=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT,(DWORD)&op); mciSendCommand(NULL,MCI_SET,MCI_SET_DOOR_OPEN,NULL); cdlen=getinfo(op.wDeviceID,MCI_STATUS_LENGTH);//获取音频文件长度 if(rs==0) //设备打开成功就播放文件 { MCI_PLAY_PARMS pp; pp.dwCallback=NULL; pp.dwFrom=0; //开始播放的位置 mciSendCommand(op.wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)&pp); //播放文件,如果第三个参数设为MCI_WAIT则程序窗口会被阻塞,为了避免这种情况可以设为MCI_NOTIFY } Sleep(cdlen);//根据文件长度等待,与MCI_WAIT效果一样,cdlen参数可以控制播放时间 OnStop(); //关闭音频文件 } DWORD CMCIDlg::getinfo(UINT wDeviceID,DWORD item) { MCI_STATUS_PARMS mcistatusparms; mcistatusparms.dwCallback=(DWORD)GetSafeHwnd(); mcistatusparms.dwItem=item; mcistatusparms.dwReturn=0; mciSendCommand(wDeviceID,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms); return mcistatusparms.dwReturn; } void CMCIDlg::OnStop() { // TODO: Add your control notification handler code here //在WM_CLOSE消息处理过程中发送MCI_CLOSE命令关闭设备 MCI_GENERIC_PARMS gp; gp.dwCallback=NULL; mciSendCommand(op.wDeviceID,MCI_CLOSE,MCI_WAIT,(DWORD)&gp); }
为了每次能够重复播放,在播放前添加程序:mciSendCommand (m_wDeviceID, MCI_CLOSE, NULL, NULL);
注意要添加关闭播放,不然会出错