我程序中需要播放一个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;
}

解决方案 »

  1.   

    [email protected]
    发给你一个,类太长了,贴不上来。可以实现.wav文件的播放停止 声音调节等功能。可以播放短wav已经流wav。
      

  2.   

    我的email:[email protected],谢谢
      

  3.   

    程序给你发了忘了跟你说了,哪个类是DSOUND写的,得安装directx sdk。
      

  4.   

    我用了可以用但是存在一个问题.我弄了两个函数如下:调用播放函数可以循环播放,然后调用停止函数也可以停止,但是停止后再调用播放函数就没有声音了,这是为什么,怎么修改.
    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);
    }
      

  5.   

    static int flag=0;
    把前边的static去掉就可以了,我当时还要进行其他操作,为了防止开始播放两次就用了static。你现在只是实现播放功能就不需要static了!