我程序中需要播放一个wav文件,我找到一个函数playwave(CString sound)能完成播放功能,但是存在一个问题就是我希望循环播放,并且能有一个函数能停止该循环播放,请问如何实现.有其他函数或方法能实现也可以.上面函数如下:总之就是要求两个函数一个是循环播放某个wav文件,一个函数是停止该循环播放.
void CABCView::PlayWave(CString sound)//sound为wav文件名,例如abc.wav
{
int m_wDeviceID= 0;
int m_startnum= 0;
bool m_InPlay= false;
mciSendCommand (m_wDeviceID, MCI_CLOSE, NULL, NULL);
CString Filename = sound;//"110.wav"; MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType =(LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
OpenParms.lpstrElementName = (LPCSTR) Filename;
OpenParms.wDeviceID = m_wDeviceID;
MCIERROR ret = mciSendCommand (NULL, MCI_OPEN,MCI_WAIT | MCI_OPEN_TYPE |MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &OpenParms);
m_wDeviceID = OpenParms.wDeviceID; MCI_PLAY_PARMS PlayParms;
PlayParms.dwFrom = m_startnum;
ret = mciSendCommand (m_wDeviceID, MCI_PLAY,MCI_FROM, (DWORD)(LPVOID)&PlayParms);
m_InPlay = true;
}
void CABCView::PlayWave(CString sound)//sound为wav文件名,例如abc.wav
{
int m_wDeviceID= 0;
int m_startnum= 0;
bool m_InPlay= false;
mciSendCommand (m_wDeviceID, MCI_CLOSE, NULL, NULL);
CString Filename = sound;//"110.wav"; MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType =(LPCSTR)MCI_DEVTYPE_WAVEFORM_AUDIO;
OpenParms.lpstrElementName = (LPCSTR) Filename;
OpenParms.wDeviceID = m_wDeviceID;
MCIERROR ret = mciSendCommand (NULL, MCI_OPEN,MCI_WAIT | MCI_OPEN_TYPE |MCI_OPEN_TYPE_ID | MCI_OPEN_ELEMENT,(DWORD)(LPVOID) &OpenParms);
m_wDeviceID = OpenParms.wDeviceID; MCI_PLAY_PARMS PlayParms;
PlayParms.dwFrom = m_startnum;
ret = mciSendCommand (m_wDeviceID, MCI_PLAY,MCI_FROM, (DWORD)(LPVOID)&PlayParms);
m_InPlay = true;
}
发给你一个,类太长了,贴不上来。可以实现.wav文件的播放停止 声音调节等功能。可以播放短wav已经流wav。
playwave(CString sound/*文件名*/);//播放声音
{
static int flag=0;
if(!flag)
{
DSound.Set_bSetPrimaryFormat(TRUE);
DSound.Set_dwNumStreams(1);
DSound.Set_dwMaxBytesStream(1024000);
if(DSound.InitDSound(this->m_hWnd))
{
DSound.CreateStreamBuffer(0,sound);
if(DSound.Get_bSetPrimaryFormat())
DSound.SetPrimaryBufferFormat(2,44100,16);
}
SetTimer(1,100,NULL);
flag=1;
}
}
stopwave()//停止播放
{
KillTimer(1);
DSound.StopStream(0);
}
把前边的static去掉就可以了,我当时还要进行其他操作,为了防止开始播放两次就用了static。你现在只是实现播放功能就不需要static了!