亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? wavein.cpp

?? 基于ARM9(Wince)的網絡音視頻通信
?? CPP
字號:
#include "stdafx.h"
#include "WaveIn.h"
#include "math.h"
#pragma comment(lib,"Winmm")

DWORD CWaveIn::s_dwInstance = 0;

DWORD WINAPI CWaveIn::AudioInThreadProc(LPVOID lpParameter)
{
	//TRACE(_T("AudioInThreadProc start.\n"));
	CWaveIn *pWaveIn;
	pWaveIn = (CWaveIn *)lpParameter;

	MSG msg;
	while(GetMessage(&msg,0,0,0))
	{
		switch(msg.message )
		{
		case MM_WIM_OPEN:
			//TRACE(_T("MM_WIM_OPEN \n"));
			break;
		case MM_WIM_CLOSE:
			//TRACE(_T("MM_WIM_CLOSE \n"));
			break;
		case MM_WIM_DATA:
			WAVEHDR* pWH=(WAVEHDR*)msg.lParam;
			waveInUnprepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
			
			if(pWH->dwBytesRecorded!=SIZE_AUDIO_FRAME)
				break;			

			memcpy(pWaveIn->buffer,pWH->lpData,pWH->dwBytesRecorded);
			pWaveIn->GetData (pWaveIn->buffer ,pWH->dwBytesRecorded );
			
			//已經有音頻數據,回調
			if(pWaveIn->m_lpDataArriveProc!=NULL)
			{
				pWaveIn->m_lpDataArriveProc(pWaveIn->buffer,pWH->dwBytesRecorded,pWaveIn->m_dwUserData);
				Sleep(10);
			}

			waveInPrepareHeader((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));
			waveInAddBuffer((HWAVEIN)msg.wParam,pWH,sizeof(WAVEHDR));

			break;
		}
	}
	//TRACE("AudioInThreadProc exit.\n");
	return msg.wParam;
}

CWaveIn::CWaveIn() :
	m_wChannel(1),
	m_dwSample (WISA_POOR),
	m_wBit(16)
{
	m_hIn=0;
	m_bThreadStart = FALSE;
	m_bDevOpen = FALSE;
	m_bAllocBuffer = FALSE;
	m_bRecord = FALSE;

	m_pHdr = NULL;
	m_dwAudioInId = 0;
	s_dwInstance ++;
}

CWaveIn::~CWaveIn()
{
	StopRec();
}

BOOL CWaveIn::CloseDev()
{
	if (!m_bDevOpen)
	{
		//TRACE("CWaveIn::CloseDev: Device hasn't opened.\n");
		return FALSE;
	}

	if(!m_hIn)
	{
		//TRACE("CWaveIn::CloseDev: Device hasn't opened.\n");
		return FALSE;
	}

	m_mmr=waveInClose(m_hIn);
	if(m_mmr)
	{
		//TRACE("CWaveIn::CloseDev: waveInClose error %s.\n",GetLastErrorString());
		m_hIn=0;
		m_bDevOpen = FALSE;
		return FALSE;
	}
	m_hIn=0;
	m_bDevOpen = FALSE;
	return TRUE;
}
BOOL CWaveIn::OpenDev()
{
	if (m_bDevOpen)
	{
		//TRACE("CWaveIn::OpenDev: Device has open.\n");
		return FALSE;
	}
	WAVEFORMATEX wfx;
	wfx.wFormatTag = WAVE_FORMAT_PCM;
	wfx.nChannels = m_wChannel;
	wfx.nSamplesPerSec = m_dwSample;
	wfx.nAvgBytesPerSec = m_wChannel * m_dwSample * m_wBit / 8;
	wfx.nBlockAlign = m_wBit * m_wChannel / 8;
	wfx.wBitsPerSample = m_wBit;
	wfx.cbSize = 0;

	m_mmr=waveInOpen(0,WAVE_MAPPER,&wfx,0,0,WAVE_FORMAT_QUERY);
	if(m_mmr)
	{
		//TRACE("CWaveIn::OpenDev: waveInOpen error.\n");
		return FALSE;
	}

	m_mmr=waveInOpen(&m_hIn,WAVE_MAPPER,&wfx,m_dwAudioInId,s_dwInstance,CALLBACK_THREAD);
	if(m_mmr)
	{
		//TRACE("CWaveIn::OpenDev: waveInOpen error.\n");
		return FALSE;
	}
	m_bDevOpen = TRUE;
	return TRUE;
}

BOOL CWaveIn::StartThread()
{
	if (m_bThreadStart)
	{
		//TRACE("CWaveIn::StartThread: Wave in thread has run.\n");
		return FALSE;
	}

	m_hAudioIn=CreateThread(0,0,AudioInThreadProc,this,0,&m_dwAudioInId);
	if(!m_hAudioIn)
	{
		//TRACE("CWaveIn::StartThread: Strat wave in thread fail.\n");
		return FALSE;
	}
	m_bThreadStart = TRUE;
	return TRUE;
}

BOOL CWaveIn::StopThread()
{
	if (!m_bThreadStart)
	{
		//TRACE("CWaveIn::StopThread: Wave in thread hasn't run.\n");
		return FALSE;
	}

	if(m_hAudioIn)
	{
		int t=50;
		DWORD ExitCode;
		BOOL bEnd=FALSE;
		PostThreadMessage(m_dwAudioInId,WM_QUIT,0,0);
		while(t)
		{
			GetExitCodeThread(m_hAudioIn,&ExitCode);
			if(ExitCode!= STILL_ACTIVE)
			{
				bEnd=TRUE;
				break;
			}
			else
				Sleep(10);
			t--;
		}
		if(!bEnd)
		{
			TerminateThread(m_hAudioIn,0);
			//TRACE("CWaveIn::StopThread: TerminateThread wave in thread.\n");
		}
		m_hAudioIn=0;
	}
	m_bThreadStart = FALSE;
	return TRUE;
}

BOOL CWaveIn::StartRec(LPDataArriveProc proc,DWORD userdata)
{
	m_lpDataArriveProc=proc;
	m_dwUserData=userdata;

	BOOL bRet=FALSE;
	if (!StartThread())           
	{
		goto Exit;
	};
	if (!OpenDev())
	{
		goto Exit1;
	};
	if (!PerPareBuffer())
	{
		goto Exit2;
	}
	if (!OpenRecord())
	{
		goto Exit3;
	}
	bRet = TRUE;
	goto Exit;
Exit3:
	FreeBuffer();
Exit2:
	CloseDev ();
Exit1:
	StopThread ();
Exit:
	return bRet;
}

BOOL CWaveIn::StopRec()
{
	CloseRecord ();	
	Sleep(1500);
	//notice delete
	FreeBuffer();
	if (CloseDev())
	{
		StopThread ();
	}

	return TRUE;
}

BOOL CWaveIn::PerPareBuffer()
{
	if (m_bAllocBuffer)
	{
		//TRACE("CWaveIn::PerPareBuffer: Buffer has been alloc.\n");
		return FALSE;
	}

	m_mmr=waveInReset(m_hIn);
	if(m_mmr)
	{
		//TRACE("CWaveIn::PerPareBuffer: waveInReset error.\n");
		return FALSE;
	}

	UINT i;
	m_pHdr=new WAVEHDR[NUM_BUF];
		
	for(i=0;i<NUM_BUF;i++)
	{
		ZeroMemory(&m_pHdr[i],sizeof(WAVEHDR));
		m_pHdr[i].lpData=new char[SIZE_AUDIO_FRAME];
		m_pHdr[i].dwBufferLength= SIZE_AUDIO_FRAME;
		m_mmr=waveInPrepareHeader(m_hIn,&m_pHdr[i],sizeof(WAVEHDR));
		if(m_mmr)
		{
			//TRACE("CWaveIn::PerPareBuffer: waveInPrepareHeader error.\n");
			return FALSE;
		}
		
		m_mmr=waveInAddBuffer(m_hIn,&m_pHdr[i],sizeof(WAVEHDR));
		if(m_mmr)
		{
			//TRACE("CWaveIn::PerPareBuffer: waveInAddBuffer error.\n");
			return FALSE;
		}
	}

	m_bAllocBuffer = TRUE;
	return TRUE;
}

BOOL CWaveIn::FreeBuffer()
{
	if (!m_bAllocBuffer)
	{
		//TRACE("CWaveIn::FreeBuffer: Buffer hasn't been alloc.\n");
		return FALSE;
	}
	
	UINT i;
	if(!m_pHdr)
	{
		//TRACE("CWaveIn::FreeBuffer: m_pHdr is NULL.\n");
		return FALSE;
	}

	for(i=0;i<NUM_BUF;i++)
	{
		m_mmr = waveInUnprepareHeader(m_hIn,&m_pHdr[i],sizeof(WAVEHDR));
		if(m_mmr)
		{
			Sleep(100);
			//TRACE("CWaveIn::FreeBuffer: waveInUnprepareHeader error.\n");
			continue;
		}
		//TRACE("CWaveIn::FreeBuffer: %d.\n",i);
		
		if(m_pHdr[i].lpData)
			delete []m_pHdr[i].lpData;
	
	}
	delete []m_pHdr;
	m_pHdr = NULL;

	m_bAllocBuffer = FALSE;
	return TRUE;
}

BOOL CWaveIn::OpenRecord()
{
	if (m_bRecord)
	{
		//TRACE("CWaveIn::OpenRecord: You may be has begun recored.\n");
		return FALSE;
	}

	if(!m_hIn)
	{
		//TRACE("CWaveIn::CloseDev: Device hasn't opened.\n");
		return FALSE;
	}

	m_mmr=waveInStart(m_hIn);
	if(m_mmr)
	{
		//TRACE("CWaveIn::OpenRecord: waveInStart error.\n");
		return FALSE;
	}

	m_bRecord = TRUE;
	return TRUE;
}

BOOL CWaveIn::CloseRecord()
{
	if (!m_bRecord)
	{
		//TRACE("CWaveIn::CloseRecord: You may be hasn't begun recored.\n");
		return FALSE;
	}

	if(!m_hIn)
	{
		//TRACE("CWaveIn::CloseRecord: Device hasn't opened.\n");
		return FALSE;
	}

/*	m_mmr=waveInStop(m_hIn);
	if(m_mmr)
	{
		//TRACE("CWaveIn::CloseRecord: waveInStop error.\n");
		return FALSE;
	}
 */	m_mmr=waveInReset(m_hIn);
	if(m_mmr)
	{
		//TRACE("CWaveIn::CloseRecord: waveInReset error.\n");
		return FALSE;
	}

	m_bRecord = FALSE;
	return TRUE;
}

void CWaveIn::GetData(char *pBuffer,int iLen)
{
	static int i = 0;
	static SYSTEMTIME time,time1;
	static long l = 0;
	if (i == 0)
	{
		::GetLocalTime (&time);
	}
	::GetLocalTime (&time1);

	int j = time1.wSecond - time.wSecond;
	if (abs(j) >= 1 )
	{
		memcpy(&time,&time1,sizeof(time));
		//TRACE("Len / second %d \n",l);
		l = 0;
	}
	l = l + iLen;
	i++;
}


MMRESULT CWaveIn::GetLastMMError()
{
	return m_mmr;
}

CString CWaveIn::GetLastErrorString()
{
	char buffer[256];
	memset(buffer,0,256);
//	waveInGetErrorText(m_mmr,(unsigned short*)buffer,256);
	CString result(buffer);
	return result;
}

void CWaveIn::SetChannel(WORD wChannel)
{
	m_wChannel = (m_wChannel == wChannel) ? 2:1;
}

void CWaveIn::SetSample(DWORD dwSample)
{
	m_dwSample = dwSample;
}

void CWaveIn::SetBit(WORD wBit)
{
	m_wBit = (wBit == 8) ? 8:16;
}

DWORD CWaveIn::GetInstance()
{
	return s_dwInstance;
}

WORD CWaveIn::GetBit()
{
	return m_wBit;
}

DWORD CWaveIn::GetSample()
{
	return m_dwSample;
}

WORD CWaveIn::GetChannel()
{
	return m_wChannel;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
成人伦理片在线| 国产精品久久免费看| 中文字幕一区二区三区不卡在线| 亚洲高清免费视频| www.欧美精品一二区| 欧美va在线播放| 亚洲第四色夜色| 99精品视频中文字幕| 国产三级三级三级精品8ⅰ区| 亚洲国产日韩a在线播放| 国产成人鲁色资源国产91色综| 在线观看日产精品| 久久久久久一级片| 午夜精品久久久| 国产主播一区二区| eeuss鲁一区二区三区| 欧美日韩aaaaa| 国产精品第五页| 国产精品99久久久久久似苏梦涵 | 日本精品一级二级| 久久精品无码一区二区三区| 一卡二卡欧美日韩| 国产成人精品免费| 这里只有精品99re| 午夜精品久久久久久久久久| 91论坛在线播放| 中文幕一区二区三区久久蜜桃| 美女精品自拍一二三四| 色综合欧美在线视频区| 国产精品久久久久一区二区三区共 | 久久国产福利国产秒拍| 欧美日韩中文字幕一区二区| 国产精品美日韩| 国产一区二区精品久久99| 3atv在线一区二区三区| 亚洲亚洲人成综合网络| 色悠久久久久综合欧美99| 欧美成人一区二区三区| 久久精品国产成人一区二区三区| 欧美日韩一区三区| 亚洲成人黄色影院| 91浏览器打开| 午夜亚洲福利老司机| 欧美蜜桃一区二区三区| 亚洲va国产天堂va久久en| 97超碰欧美中文字幕| 中文字幕一区免费在线观看 | 午夜久久福利影院| 欧美中文字幕亚洲一区二区va在线| 最新不卡av在线| av在线不卡电影| 成人欧美一区二区三区1314| 成人免费视频视频在线观看免费| 国产欧美日韩精品在线| 高清不卡在线观看av| 欧美一区二区在线观看| 久久久久99精品国产片| 国内精品国产成人国产三级粉色 | 99久久精品费精品国产一区二区| 国产精品看片你懂得| 国产福利精品一区二区| 中文av字幕一区| 美女视频免费一区| 欧美综合久久久| 五月综合激情日本mⅴ| 8x福利精品第一导航| 国产在线精品免费| 中文字幕一区在线观看视频| 色综合色狠狠综合色| 日韩精品亚洲专区| 久久青草国产手机看片福利盒子| 黄色成人免费在线| 国产精品久久久久aaaa樱花 | 蜜桃精品视频在线| 久久嫩草精品久久久精品一| 成人美女视频在线看| 亚洲成av人片一区二区| 久久久综合激的五月天| 91免费在线播放| 蜜臀av一级做a爰片久久| 久久精品在线观看| 欧美日韩一级大片网址| 久久国产日韩欧美精品| 亚洲欧美在线高清| 7777精品伊人久久久大香线蕉经典版下载 | 色婷婷久久久久swag精品| 日韩高清欧美激情| 国产精品国产精品国产专区不蜜| 欧美日韩在线直播| 精品一区二区三区久久久| 一区二区在线免费观看| 精品国产免费一区二区三区四区 | 精品电影一区二区三区| 色综合天天综合网国产成人综合天 | 中文一区二区在线观看| 欧美一区二区视频免费观看| 92精品国产成人观看免费| 久久99精品久久久久| 欧美国产日韩a欧美在线观看| 91精彩视频在线观看| 精品伊人久久久久7777人| 中文字幕日韩一区二区| 日韩一区二区三区电影在线观看| 本田岬高潮一区二区三区| 日本不卡不码高清免费观看| 国产欧美精品一区二区三区四区| 欧美人伦禁忌dvd放荡欲情| 波多野结衣亚洲一区| 国模无码大尺度一区二区三区| 亚洲资源在线观看| 中文字幕一区二区三区不卡| 精品久久久久久久人人人人传媒| 欧美亚洲动漫精品| 91女厕偷拍女厕偷拍高清| 国产成人免费视频网站高清观看视频 | 欧美亚洲自拍偷拍| 91香蕉国产在线观看软件| 国产成人在线视频网址| 麻豆成人91精品二区三区| 日韩高清不卡一区| 日韩电影在线一区二区三区| 亚洲资源中文字幕| 一区二区三区久久| 亚洲精品一二三四区| 亚洲色图都市小说| 日韩毛片视频在线看| 国产精品国产馆在线真实露脸| 国产精品―色哟哟| 久久嫩草精品久久久精品一| 精品欧美一区二区久久| 69久久夜色精品国产69蝌蚪网| 色老汉av一区二区三区| 欧美综合欧美视频| 国产毛片精品视频| 国产一区二区三区美女| 久久国产综合精品| 极品少妇一区二区三区精品视频| 久久se这里有精品| 久久成人免费网| 久久激情五月激情| 成人自拍视频在线| 成人免费av网站| 97精品国产露脸对白| 91成人免费网站| 99riav一区二区三区| 在线视频一区二区三区| 欧美日韩综合在线免费观看| 欧美高清性hdvideosex| 日韩一区二区在线看| 精品粉嫩超白一线天av| 中文字幕欧美激情一区| 中文字幕一区二区三| 亚洲国产精品嫩草影院| 日韩黄色小视频| 国产一区二区不卡在线| 成人手机在线视频| av一区二区三区四区| 欧美男男青年gay1069videost| 日韩精品最新网址| 国产精品污www在线观看| 一区精品在线播放| 18欧美亚洲精品| 五月婷婷激情综合| 国产精品一区二区你懂的| 97se亚洲国产综合自在线不卡| 欧美日韩精品系列| 久久精品视频在线免费观看| 亚洲精品水蜜桃| 美女高潮久久久| 99久久精品情趣| 欧美tickling网站挠脚心| 亚洲欧洲韩国日本视频| 美女一区二区在线观看| 91麻豆福利精品推荐| 91在线观看下载| 精品国产一区二区精华| 中文字幕日韩一区二区| 六月丁香婷婷久久| 国产成a人亚洲| 欧美日韩在线综合| 国产情人综合久久777777| 亚洲一区成人在线| 国内精品视频一区二区三区八戒| 在线观看视频91| 国产欧美一区二区精品性色超碰| 亚洲综合图片区| 国产激情视频一区二区三区欧美| 欧美日韩久久久一区| 亚洲色图另类专区| 国产馆精品极品| 欧美大片国产精品| 亚洲精品成人a在线观看| 国产成人一区在线| www一区二区| 日本v片在线高清不卡在线观看| 一本色道亚洲精品aⅴ| 亚洲日本在线观看| 欧美吻胸吃奶大尺度电影| 亚洲一区二区三区在线看| 欧美三级在线看|