多语言展示
当前在线:460今日阅读:23今日分享:25

MFC播放语音,无设备唯一一个名称问题。亲测

MFC建立一个对话框,添加一个按钮,播放对应的MP3音乐文件,可以重复播放。不会出现设备唯一一个名称之类的问题。
方法/步骤
1

源文件中需要包含头文件 Mmsystem.h,在Project->Settings->Link->Object/libray module中加入库 Winmm.lib。或添加代码#pragma   comment(lib, 'winmm.lib')

2

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);    }

3

为了每次能够重复播放,在播放前添加程序:mciSendCommand (m_wDeviceID, MCI_CLOSE, NULL, NULL);

注意事项

注意要添加关闭播放,不然会出错

推荐信息