BOOL CWaveOut::Play(char* buf,UINT uSize) { if (!m_bDevOpen) { TRACE("CWaveOut::Play: Device hasn't been open.\n"); return FALSE; } if (GetBufferNum () > PLAY_DELAY) { // TRACE("CWaveOut::Play: Delay too big pass over.\n"); return TRUE; } char* p; LPWAVEHDR pwh=new WAVEHDR; if(!pwh) { TRACE("CWaveOut::Play: alloc WAVEHDR memoyr error.\n"); return FALSE; } p=new char[uSize]; if(!p) { TRACE("CWaveOut::Play: alloc data memoyr error.\n"); return FALSE; } CopyMemory(p,buf,uSize); ZeroMemory(pwh,sizeof(WAVEHDR)); pwh->dwBufferLength=uSize; pwh->lpData=p; pwh->dwBytesRecorded = 0 ; pwh->dwUser = 0 ; pwh->dwFlags = WHDR_BEGINLOOP | WHDR_ENDLOOP ; pwh->dwLoops = 1 ; pwh->lpNext = NULL ; pwh->reserved = 0 ; m_mmr=waveOutPrepareHeader(m_hOut,pwh,sizeof(WAVEHDR)); if (m_mmr) { TRACE("CWaveOut::CloseDev: waveOutPrepareHeader error.\n"); return FALSE; } m_mmr=waveOutWrite(m_hOut,pwh,sizeof(WAVEHDR)); if (m_mmr) { TRACE("CWaveOut::CloseDev: waveOutWrite error.\n"); return FALSE; } m_iBufferNum ++; return TRUE; }
BOOL CViWavePlay::PlayAudio(char* buf,unsigned int nSize) { if( !m_bDevOpen ) { return FALSE; } if( GetBufferNum() >= 5 )//超过缓冲最大包,不继续播放 { return FALSE; } MMRESULT mRet; char* lpData = NULL; WAVEHDR* pWaveHead = new WAVEHDR; ZeroMemory(pWaveHead,sizeof(WAVEHDR)); lpData = new char[nSize]; pWaveHead->dwBufferLength = nSize; memcpy(lpData,buf,nSize); pWaveHead->lpData = lpData; mRet = waveOutPrepareHeader(m_hWave,pWaveHead,sizeof(WAVEHDR)); if( mRet != MMSYSERR_NOERROR ) { return FALSE; } mRet = waveOutWrite(m_hWave,pWaveHead,sizeof(WAVEHDR)); if( mRet != MMSYSERR_NOERROR ) { return FALSE; } AddBuffer(); return TRUE; }