先是初始化部分:
void CreateSock(void)
{
closesocket(sock);
sock=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
addr.sin_family=AF_INET;
addr.sin_port=htons(2288);
addr.sin_addr.S_un.S_addr = inet_addr("127.0.0.1");
int iResult = connect(sock,(SOCKADDR*)&addr,sizeof(addr));
GetWave();//开始录音
}
创建套接字,并开始启动录音
void GetWave(void)
{
pWaveHdr1=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
pWaveHdr2=reinterpret_cast<PWAVEHDR>(malloc(sizeof(WAVEHDR)));
pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));
pBuffer1=(PBYTE)malloc(INP_BUFFER_SIZE);
pBuffer2=(PBYTE)malloc(INP_BUFFER_SIZE);
if (!pBuffer1 || !pBuffer2)
{
if (pBuffer1) free(pBuffer1);
if (pBuffer2) free(pBuffer2);
return;
}
//open waveform audo for input
waveform.wFormatTag=WAVE_FORMAT_PCM;
waveform.nChannels=1;
waveform.nSamplesPerSec=11025;
waveform.nAvgBytesPerSec=11025;
waveform.nBlockAlign=1;
waveform.wBitsPerSample=8;
waveform.cbSize=0;
if (waveInOpen(&hWaveIn,WAVE_MAPPER,&waveform,(DWORD)WaveS,0,CALLBACK_FUNCTION))
{
free(pBuffer1);
free(pBuffer2);
//MessageBox(NULL,"Open erro!",NULL,MB_OK);
}//打开设备
pWaveHdr1->lpData=(LPTSTR)pBuffer1;
pWaveHdr1->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr1->dwBytesRecorded=0;
pWaveHdr1->dwUser=0;
pWaveHdr1->dwFlags=0;
pWaveHdr1->dwLoops=1;
pWaveHdr1->lpNext=NULL;
pWaveHdr1->reserved=0;
waveInPrepareHeader(hWaveIn,pWaveHdr1,sizeof(WAVEHDR));//准保内存块录音
pWaveHdr2->lpData=(LPTSTR)pBuffer2;
pWaveHdr2->dwBufferLength=INP_BUFFER_SIZE;
pWaveHdr2->dwBytesRecorded=0;
pWaveHdr2->dwUser=0;
pWaveHdr2->dwFlags=0;
pWaveHdr2->dwLoops=1;
pWaveHdr2->lpNext=NULL;
pWaveHdr2->reserved=0;
waveInPrepareHeader(hWaveIn,pWaveHdr2,sizeof(WAVEHDR));
//
pSaveBuffer = (PBYTE)realloc (pSaveBuffer, 1) ;
// Add the buffers
waveInAddBuffer (hWaveIn, pWaveHdr1, sizeof (WAVEHDR));
waveInAddBuffer (hWaveIn, pWaveHdr2, sizeof (WAVEHDR));
waveInStart (hWaveIn);
}
static void CALLBACK WaveS(HWAVEIN waveIn, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2)
{
switch(uMsg)
{
case MM_WIM_CLOSE:
waveInUnprepareHeader (waveIn, pWaveHdr1, sizeof (WAVEHDR)) ;
waveInUnprepareHeader (waveIn, pWaveHdr2, sizeof (WAVEHDR)) ;
free(pBuffer1);
free(pBuffer2);
break;
case MM_WIM_DATA:
pNewBuffer = (PBYTE)realloc (pSaveBuffer,dwDataLength +((PWAVEHDR)dwParam1)->dwBytesRecorded);
if (pNewBuffer == NULL)
{
waveInClose (waveIn) ;
return ;
}
pSaveBuffer = pNewBuffer ;
//
CopyMemory (pSaveBuffer + dwDataLength, ((PWAVEHDR)dwParam1)->lpData,((PWAVEHDR)dwParam1)->dwBytesRecorded) ;
dwDataLength += ((PWAVEHDR)dwParam1)->dwBytesRecorded ;
if(dwDataLength>=11300)
{
int ret=send(sock,(char*)pSaveBuffer,dwDataLength,0);
if(ret==SOCKET_ERROR)
{
m_close=TRUE;
ResumeThread(m_handle);
waveInClose(hWaveIn);
}
//Sleep(1000);
free (pSaveBuffer);
pSaveBuffer = reinterpret_cast<PBYTE>(malloc(1));
dwDataLength=0;
}
// Send out a new buffer
waveInAddBuffer (waveIn, (PWAVEHDR)dwParam1, sizeof (WAVEHDR)) ;
break;
}
}