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

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

?? soundin.cpp

?? 本系統可以在局域網內實現C/S形式的語音聊天。原理簡單易懂
?? CPP
字號:
// SoundIn.cpp: implementation of the CSoundIn class.
//
//////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Phone.h"
#include "SoundIn.h"

#pragma comment(lib, "winmm")

#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif

UINT WaveInThreadProc(void * pParam);

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

CSoundIn::CSoundIn()
{
	m_WaveInSampleRate = 11025;
	m_TerminateThread=FALSE;
	m_nBlock=1024;
	m_nBlockNum=2;
	m_nBits=8;
	m_nCurrent=0;
	m_WaveHeader=NULL;
	m_pInputBuffer=NULL;
}

CSoundIn::~CSoundIn()
{
	if(m_WaveHeader!=NULL)
		free(m_WaveHeader);
	if(m_pInputBuffer!=NULL)
		free(m_pInputBuffer);
}

MMRESULT CSoundIn::OpenMic()
{
	m_WaveHeader=(WAVEHDR*)malloc(m_nBlockNum*sizeof(WAVEHDR));
	int n=(int)m_nBits/8;
	m_pInputBuffer=(char*)malloc(n*m_nBlockNum*m_nBlock);

	m_cpSend->SetWaveFormat(1,m_WaveInSampleRate,m_nBits);
	m_cpSend->SetSrcSamples(m_nBlock,(unsigned char*)m_pInputBuffer);
	m_cpSend->Initialize();
	m_cpSend->PrepareSpace(TRUE);

	MMRESULT result;

    result=waveInGetNumDevs(); 
	if (result == 0)
	{
        AfxMessageBox("No Sound Device");
		return result;
	}
    // test for Mic available   
    result=waveInGetDevCaps (0, &m_WaveInDevCaps, sizeof(WAVEINCAPS));
    if ( result!= MMSYSERR_NOERROR)
    {
       AfxMessageBox(_T("Cannot determine sound card capabilities !"));
    }
	// The Sound Devive is OK now we can create an Event  and start the Thread
	m_WaveInEvent = CreateEvent(NULL,FALSE,FALSE,"WaveInThreadEvent");
	m_TerminateThread = FALSE;
	m_WaveInThread= AfxBeginThread(WaveInThreadProc,this,THREAD_PRIORITY_NORMAL,0,CREATE_SUSPENDED,NULL);   
	m_WaveInThread->m_bAutoDelete = TRUE;
	m_WaveInThread->ResumeThread();
	// init format 
	WaveInitFormat(1/* mono*/,m_WaveInSampleRate /* khz */,m_nBits /* bits */); 
	// Open Input 
	result = waveInOpen( &m_WaveIn,0, &m_WaveFormat,(DWORD)m_WaveInEvent ,NULL ,CALLBACK_EVENT); 
	if ( result!= MMSYSERR_NOERROR)
	{
        AfxMessageBox(_T("Cannot Open Sound Input Device!"));
	    return result;
	}

	for(int i=0;i<m_nBlockNum;i++){
		(*(m_WaveHeader+i)).lpData = (LPSTR)(m_pInputBuffer+i*m_nBlock*n);
		(*(m_WaveHeader+i)).dwBufferLength=m_nBlock*n;
		(*(m_WaveHeader+i)).dwFlags = 0;
		result = waveInPrepareHeader( m_WaveIn, m_WaveHeader+i, sizeof(WAVEHDR) ); 
		if ( (result!= MMSYSERR_NOERROR)||((*(m_WaveHeader+i)).dwFlags != WHDR_PREPARED))
		{
			// AfxMessageBox(_T("Cannot Prepare Header !"));
			return result;
		}
	    result = waveInAddBuffer( m_WaveIn,m_WaveHeader+i, sizeof(WAVEHDR));
		if  (result!= MMSYSERR_NOERROR) 
		{
			AfxMessageBox(_T("Cannot Add Buffer !"));
			return result;
		}
	}
    // all is correct now we can start the process
    result = waveInStart( m_WaveIn );
    if  (result!= MMSYSERR_NOERROR) 
    {
        AfxMessageBox(_T("Cannot Start Wave In !"));
	    return result;
    }
    return result;
}

void CSoundIn::WaveInitFormat(WORD    nCh, // number of channels (mono, stereo)
							  DWORD   nSampleRate, // sample rate
							  WORD    BitsPerSample)
{
	m_WaveFormat.wFormatTag = WAVE_FORMAT_PCM;
	m_WaveFormat.nChannels = nCh;
	m_WaveFormat.nSamplesPerSec = nSampleRate;
	m_WaveFormat.nAvgBytesPerSec = nSampleRate * nCh * BitsPerSample/8;
	m_WaveFormat.nBlockAlign = m_WaveFormat.nChannels * BitsPerSample/8;
	m_WaveFormat.wBitsPerSample = BitsPerSample;
	m_WaveFormat.cbSize = 0;
}

void CSoundIn::AddBuffer()
{
	MMRESULT result;
	int n=(int)m_nBits/8;

	result = waveInUnprepareHeader(m_WaveIn, m_WaveHeader+m_nCurrent, sizeof(WAVEHDR)); 
	if(result!= MMSYSERR_NOERROR) 
    {
           return;
	}
	//Here to call the data process procedue!
	if(m_bTest)
		m_sndOut->WriteData(m_pInputBuffer+m_nCurrent*m_nBlock*n,m_nBlock*n);
	else{
		m_cpSend->SetSrcSamples(m_nBlock,(unsigned char*)m_pInputBuffer+m_nCurrent*m_nBlock*n);
		m_cpSend->ConvertSend(m_sSend,m_addrTo);
		//int iError=sendto(m_sSend,m_pInputBuffer+m_nCurrent*m_nBlock*n,m_nBlock*n,0,(LPSOCKADDR)&m_addrTo,sizeof(m_addrTo));
		//if(iError==SOCKET_ERROR)
		//	TRACE("Error In the sending!");
	}
 	(*(m_WaveHeader+m_nCurrent)).lpData = (LPSTR)(m_pInputBuffer+m_nCurrent*m_nBlock*n);
    (*(m_WaveHeader+m_nCurrent)).dwBufferLength =m_nBlock*n;
	(*(m_WaveHeader+m_nCurrent)).dwFlags = 0;
    result = waveInPrepareHeader( m_WaveIn, m_WaveHeader+m_nCurrent, sizeof(WAVEHDR) ); 
	if ( (result!= MMSYSERR_NOERROR)||((*(m_WaveHeader+m_nCurrent)).dwFlags != WHDR_PREPARED) )
        AfxMessageBox(_T("Cannot Prepare Header !"));
    result = waveInAddBuffer( m_WaveIn, m_WaveHeader+m_nCurrent, sizeof(WAVEHDR) );
    if (result!= MMSYSERR_NOERROR) 
        AfxMessageBox(_T("Cannot Add Buffer !"));

    result = waveInStart( m_WaveIn );
    if  (result!= MMSYSERR_NOERROR) 
        AfxMessageBox(_T("Cannot Start Wave In !"));
	m_nCurrent++;
	m_nCurrent%=m_nBlockNum;
}

void CSoundIn::CloseMic()
{
	m_TerminateThread = TRUE;
    if (m_WaveInEvent )
		SetEvent(m_WaveInEvent);
    Sleep(50);  // wait for the thread to terminate

	if (m_WaveIn) 
	{
		waveInReset(m_WaveIn);
		waveInStop(m_WaveIn);
		waveInClose(m_WaveIn);
	}
}


void CSoundIn::StopMic()
{
	waveInStop(m_WaveIn);
	waveInReset(m_WaveIn);
}

/////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    Glogal Thread procedure for the CSoundIn class
//    It cannot be included inside the Class
//   
// The LPARAM is the Class pointer (this) it can be the base class CSoundIn ptr or a derived new class
// The value of this parametre can change according the Topmost class of the process 
/////////////////////////////////////////////////////////////////////////////////////////////////////////////
#define PT_S ((CSoundIn*)pParam) 

UINT WaveInThreadProc(void * pParam)
{
   UINT result;
   UINT FirstPass = TRUE;

	if ( FirstPass)
		result = WaitForSingleObject(((CSoundIn*)pParam)->m_WaveInEvent,INFINITE);
	FirstPass = FALSE;
    
	while (!((CSoundIn*)pParam)->m_TerminateThread)
	{
		result = WaitForSingleObject(PT_S->m_WaveInEvent,INFINITE);
		if ((result == WAIT_OBJECT_0)&&(!PT_S->m_TerminateThread ))
		{
			PT_S->AddBuffer();      
		}
		else
			return 0;  
	}
    return 0;
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久奇米777| 日本大香伊一区二区三区| 欧美一级片免费看| 麻豆91精品视频| 欧美精品一区二区在线观看| 国产在线观看免费一区| 久久精品在线免费观看| 国产成人精品免费在线| 国产精品超碰97尤物18| 91久久奴性调教| 亚洲第一福利一区| 日韩视频123| 国产jizzjizz一区二区| 亚洲男人的天堂在线观看| 欧美人xxxx| 久久99热这里只有精品| 国产精品盗摄一区二区三区| 欧美欧美欧美欧美| 黄色日韩网站视频| 《视频一区视频二区| 欧美日韩国产中文| 国产精品18久久久久久久久| 一区二区三区国产豹纹内裤在线 | 国产亚洲精品aa午夜观看| 丰满少妇在线播放bd日韩电影| 国产午夜三级一区二区三| 色综合天天性综合| 美国精品在线观看| 国产精品二三区| 欧美一区二区国产| 成人白浆超碰人人人人| 日韩一区欧美二区| 久久久综合视频| 91福利资源站| 国产美女精品在线| 午夜久久久影院| 欧美经典一区二区三区| 欧美日韩电影一区| 国产69精品一区二区亚洲孕妇| 亚洲成人自拍偷拍| 欧美韩国一区二区| 欧美一级理论性理论a| 成人av在线影院| 麻豆一区二区三| 玉米视频成人免费看| 精品成a人在线观看| 在线观看一区不卡| 国产一区二区看久久| 一区二区三区在线播| 久久婷婷国产综合精品青草| 欧美色图天堂网| 波多野结衣的一区二区三区| 国产专区综合网| 亚洲mv大片欧洲mv大片精品| 国产精品电影院| 久久久久久麻豆| 日韩欧美亚洲国产另类 | 色88888久久久久久影院按摩| 久久69国产一区二区蜜臀| 亚洲国产精品久久人人爱蜜臀 | 蜜桃av噜噜一区| 亚洲综合免费观看高清在线观看| 久久久久久久久久久久久女国产乱 | 中文字幕一区二区三区在线观看| 日韩精品自拍偷拍| 欧美精品在线一区二区| 色天使久久综合网天天| 成人免费观看视频| 91一区二区在线| 国产一区二区毛片| 国产一区二区免费在线| 久久不见久久见中文字幕免费| 日韩国产欧美视频| 亚洲aaa精品| 视频一区欧美精品| 三级精品在线观看| 青青国产91久久久久久| 日韩主播视频在线| 日本aⅴ亚洲精品中文乱码| 一区二区成人在线观看| 亚洲一区二区三区四区中文字幕| 中文字幕一区在线观看| 日韩美女啊v在线免费观看| 国产精品午夜电影| 国产精品国产三级国产aⅴ中文| 国产亚洲欧美色| 国产精品久久久久久久久免费丝袜| 久久女同性恋中文字幕| 国产喂奶挤奶一区二区三区| 国产精品久久久99| 亚洲激情校园春色| 亚洲成人tv网| 久久精品国产免费看久久精品| 韩国中文字幕2020精品| 国产精品一区二区91| 成人app网站| 色妹子一区二区| 欧美日韩亚洲不卡| 日韩一区二区三区高清免费看看| 亚洲精品一区二区精华| 久久久九九九九| 亚洲男人的天堂一区二区| 亚洲成a人片在线不卡一二三区| 蜜臀a∨国产成人精品| 国产一区二区电影| 91视频xxxx| 制服丝袜亚洲精品中文字幕| xvideos.蜜桃一区二区| 国产精品成人一区二区艾草| 亚洲成人一区二区在线观看| 国产在线视频不卡二| www.日韩精品| 欧美精选一区二区| 国产欧美视频在线观看| 亚洲激情五月婷婷| 免费观看日韩av| 成人午夜视频网站| 欧美理论片在线| 国产日韩欧美一区二区三区乱码| 亚洲另类一区二区| 久久电影网电视剧免费观看| 色哟哟一区二区三区| 欧美大片一区二区三区| 1000部国产精品成人观看| 五月天一区二区三区| 国产成人精品免费一区二区| 欧美日韩成人一区二区| 国产精品情趣视频| 天堂成人国产精品一区| 成人精品国产一区二区4080| 6080日韩午夜伦伦午夜伦| 国产精品女主播在线观看| 日本aⅴ精品一区二区三区| 成人午夜电影小说| 欧美肥胖老妇做爰| 中文字幕一区在线观看视频| 91在线云播放| 久久久国产午夜精品 | 亚洲精品乱码久久久久久| 狠狠色狠狠色综合| 欧美群妇大交群中文字幕| 亚洲欧洲在线观看av| 久久99国内精品| 欧美日韩精品专区| 综合分类小说区另类春色亚洲小说欧美| 日韩中文字幕91| 色呦呦国产精品| 国产蜜臀97一区二区三区| 蜜桃精品视频在线| 在线电影国产精品| 综合久久一区二区三区| 成人在线视频一区| 久久九九影视网| 国产真实乱对白精彩久久| 日韩欧美成人午夜| 日韩电影在线看| 欧美久久一二区| 亚洲国产一区在线观看| 91丨porny丨首页| 国产精品电影一区二区三区| 懂色中文一区二区在线播放| 欧美精品一区二区三区蜜臀| 久久电影网站中文字幕| 日韩视频免费观看高清完整版在线观看 | 欧美色欧美亚洲另类二区| 亚洲精品亚洲人成人网在线播放| 99精品国产热久久91蜜凸| 中文字幕日韩av资源站| 99热这里都是精品| 亚洲欧美在线视频观看| 99久久综合国产精品| 国产精品久久久久久久久图文区| 国产馆精品极品| 日本一二三四高清不卡| 国产不卡视频一区| 国产精品久久久久影院亚瑟| 99在线精品一区二区三区| 国产精品久久久久久久久免费相片 | 欧美国产一区在线| 国产精品99久久久久久似苏梦涵| 国产三级一区二区| 成人午夜又粗又硬又大| 亚洲视频在线观看一区| 在线区一区二视频| 亚洲不卡在线观看| 日韩欧美亚洲另类制服综合在线| 狠狠色综合播放一区二区| 国产人伦精品一区二区| 99精品久久只有精品| 一区二区三国产精华液| 欧美三区在线视频| 久久 天天综合| 国产精品久久午夜| 欧美日韩国产小视频| 免费久久精品视频| 国产午夜久久久久| 91官网在线免费观看| 蜜桃视频第一区免费观看| 精品久久久久久最新网址| 成人h动漫精品一区二|