在一个小游戏里要放一些动作的声音
格式是wav
本来用sndPlaySound异步方式来播放
但有时一个动作需要两个声音文件来配合
sndPlaySound却傻了眼,
sndPlaySound(strFile1,SND_ASYNC);
sndPlaySound(strFile2,SND_ASYNC);
这样连续的两次调用只发最后一次的声音
strFile1文件的声音没发出来!
后来就用MCI
基本代码如下://用MCI播放
void CGameClientDlg::PlayMidSound(CString strFileName)
{ StopMidSound(); MCI_OPEN_PARMS OpenParms;
MCI_PLAY_PARMS PlayParms; OpenParms.lpstrDeviceType = (LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
OpenParms.lpstrElementName = strFileName.GetBuffer(0);
    OpenParms.wDeviceID = 0;

mciSendCommand(NULL,MCI_OPEN,MCI_WAIT|MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID|MCI_OPEN_ELEMENT,(DWORD)(LPVOID)&OpenParms);

    m_wDeviceID = OpenParms.wDeviceID;

PlayParms.dwFrom = 0;
PlayParms.dwCallback = MAKELONG(m_hWnd, 0);
mciSendCommand(m_wDeviceID,MCI_PLAY,MCI_NOTIFY,(DWORD)(LPVOID)&PlayParms);}void CGameClientDlg::StopMidSound()
{
MCI_STATUS_PARMS StautsParms;
StautsParms.dwItem = MCI_STATUS_MODE;
mciSendCommand(m_wDeviceID,MCI_STATUS,MCI_WAIT|MCI_STATUS_ITEM,(DWORD)(LPVOID)&StautsParms);

if(StautsParms.dwReturn!=MCI_MODE_PLAY)
{
return;
}
mciSendCommand(m_wDeviceID,MCI_STOP,NULL,NULL);
mciSendCommand(m_wDeviceID,MCI_CLOSE,NULL,NULL);

}LRESULT CGameClientDlg::OnMciNotify(WPARAM wparam,LPARAM lParam)
{     

switch (wparam) 

case MCI_NOTIFY_SUCCESSFUL:
{
if(!m_strSoundFile2.IsEmpty())
{
PlayMidSound(m_strSoundFile2);
m_strSoundFile2.Empty();
}
}
break;  
default:
break; 
}
 
return TRUE;
} 用PlayMidSound函数来放,大部分都能发出声音,但有时候还是没声音,
不知道什么回事,是否是代码写的有问题?