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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? soundin.cpp

?? 利用UDP實現(xiàn)語音全雙工通信&利用winsock2實現(xiàn)IP多播的實例
?? 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;
}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
视频一区中文字幕国产| 国产伦精品一区二区三区免费| 欧美一级日韩一级| 从欧美一区二区三区| 性久久久久久久久| 中文字幕不卡的av| 日韩欧美专区在线| 欧美网站一区二区| 99久久久精品免费观看国产蜜| 秋霞影院一区二区| 一区二区三区久久| 国产精品毛片高清在线完整版 | 国产成人亚洲精品青草天美| 亚洲国产精品一区二区久久恐怖片| 26uuu精品一区二区| 欧美色精品天天在线观看视频| 国产传媒欧美日韩成人| 青青草91视频| 亚洲国产精品久久人人爱| 国产精品久久久久久久久图文区| 日韩视频在线永久播放| 欧美日韩三级在线| 在线观看日韩国产| 成人国产精品免费观看动漫| 韩国精品久久久| 免费av网站大全久久| 午夜精品久久久久久久蜜桃app| 亚洲少妇30p| 亚洲欧洲日产国码二区| 国产人久久人人人人爽| 精品99999| 精品久久久久久久久久久久包黑料 | 欧美电影影音先锋| 欧美三级韩国三级日本一级| 91丨porny丨户外露出| 国产成人精品一区二| 国产精品一线二线三线精华| 蜜臀av一区二区在线免费观看| 日韩激情视频在线观看| 日韩中文欧美在线| 日韩影院精彩在线| 奇米色777欧美一区二区| 日韩成人一区二区三区在线观看| 午夜激情一区二区| 男男成人高潮片免费网站| 日韩国产欧美在线视频| 日韩专区一卡二卡| 蜜臀久久99精品久久久画质超高清 | 欧美白人最猛性xxxxx69交| 日韩三级中文字幕| 精品国产一区二区国模嫣然| 欧美成人a在线| 精品国产区一区| 国产偷国产偷亚洲高清人白洁| 日韩美女视频在线| 国产欧美一区二区精品仙草咪| 国产偷v国产偷v亚洲高清| 国产精品麻豆久久久| 亚洲免费在线视频| 亚洲va中文字幕| 捆绑变态av一区二区三区 | 欧美日韩一区 二区 三区 久久精品| 色成人在线视频| 欧美三级日韩三级国产三级| 日韩欧美一区在线| 国产色婷婷亚洲99精品小说| 日韩理论片中文av| 午夜国产精品影院在线观看| 激情文学综合插| 成人国产精品免费观看视频| 欧美性欧美巨大黑白大战| 91精品国产一区二区三区蜜臀| 26uuuu精品一区二区| 亚洲欧美在线高清| 午夜精品福利视频网站| 国产精品正在播放| 欧美亚洲动漫精品| 精品福利在线导航| 亚洲日本成人在线观看| 天堂va蜜桃一区二区三区漫画版| 精品一区二区在线视频| av一区二区三区在线| 欧美日韩精品一区二区三区| 欧美大尺度电影在线| 一区二区视频在线看| 久久国产精品区| 色婷婷综合视频在线观看| 日韩午夜在线观看| 亚洲精品国产成人久久av盗摄| 捆绑调教美女网站视频一区| 99久久精品情趣| 精品国精品自拍自在线| 一区二区在线观看av| 国产精品亚洲人在线观看| 97久久精品人人做人人爽50路| 日韩欧美一二三四区| 亚洲欧美成人一区二区三区| 国产一区二区三区综合| 欧美三级乱人伦电影| 国产精品久久毛片av大全日韩| 免费在线观看精品| 色哟哟一区二区| 国产欧美日韩不卡免费| 日日噜噜夜夜狠狠视频欧美人| 97se亚洲国产综合在线| 久久综合色综合88| 日韩vs国产vs欧美| 欧美在线一区二区| **性色生活片久久毛片| 国产一区二区三区| 日韩欧美一卡二卡| 婷婷丁香久久五月婷婷| 97超碰欧美中文字幕| 久久久精品综合| 蜜桃视频在线观看一区二区| 欧美体内she精视频| 亚洲欧美日韩精品久久久久| 国产成人在线网站| 2021久久国产精品不只是精品| 天天综合天天综合色| 欧美色爱综合网| 亚洲欧美视频在线观看| av亚洲精华国产精华精华| 精品国产乱码久久久久久牛牛 | 国产suv精品一区二区6| 精品国产乱码久久久久久夜甘婷婷| 午夜精品一区二区三区电影天堂 | 亚洲欧美自拍偷拍色图| 成人性生交大合| 欧美激情一区二区三区蜜桃视频| 久久国产生活片100| 欧美一级高清片| 久久精品国产精品亚洲精品 | 一区二区三区四区国产精品| aaa亚洲精品一二三区| 国产精品欧美一区二区三区| 国产98色在线|日韩| 欧美国产精品中文字幕| 成人综合婷婷国产精品久久| 国产欧美一区二区在线观看| 国产精品99久久久久久久女警| 久久五月婷婷丁香社区| 国产精品资源站在线| 久久久亚洲高清| 成人av第一页| 亚洲精品日产精品乱码不卡| 欧美性生交片4| 日韩在线一二三区| 精品国产第一区二区三区观看体验| 麻豆国产精品一区二区三区 | 精品国产91洋老外米糕| 国模冰冰炮一区二区| 国产网站一区二区三区| 成人精品gif动图一区| 成人欧美一区二区三区在线播放| 91尤物视频在线观看| 亚洲一区二区av电影| 日韩三级视频中文字幕| 国产一区二区三区最好精华液| 中文av字幕一区| 日本精品裸体写真集在线观看| 亚洲电影第三页| 欧美一区二区三区系列电影| 奇米精品一区二区三区四区| 久久精品免费在线观看| 99精品一区二区| 日韩国产精品久久久| 久久综合丝袜日本网| 91视频91自| 欧美bbbbb| 国产精品久久久久久久岛一牛影视| 91免费观看在线| 免费一区二区视频| 亚洲国产精品黑人久久久| 91福利国产成人精品照片| 麻豆国产欧美日韩综合精品二区 | 亚洲午夜精品网| 欧美巨大另类极品videosbest| 国内精品在线播放| 亚洲视频一二三| 精品奇米国产一区二区三区| voyeur盗摄精品| 蜜臀精品久久久久久蜜臀| 综合色天天鬼久久鬼色| 欧美刺激脚交jootjob| 99精品国产91久久久久久| 日本成人在线看| 亚洲三级电影全部在线观看高清| 在线成人午夜影院| heyzo一本久久综合| 另类专区欧美蜜桃臀第一页| 亚洲欧洲99久久| 精品成a人在线观看| 欧美午夜不卡在线观看免费| 国产成人精品亚洲日本在线桃色| 亚洲国产欧美日韩另类综合| 久久久精品人体av艺术| 欧美日韩精品专区| 99久久夜色精品国产网站| 久久97超碰国产精品超碰|