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;
}
Beispiel #2
0
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;
}