Exemplo n.º 1
0
// reads a wav file, sends packetized buffers to the server, 
int UDPsend(UDPinfo *UI, TCPinfo *TI)
{
	WSABUF filecontents;
	DWORD bytetoSend;
	DWORD flags = 0;
	FILE *fp;
	int byteSent = 0;
	int bufpos = 0;
	int numpackets;


	memset((void *)&UI->WH, 0, sizeof(wavheader));

	fp = wavOpen(&UI->WH);

	filecontents.buf = (char *) malloc (BUFSIZE);
	filecontents.buf = UI->WH.soundBuffer;
	filecontents.len = BUFSIZE;
	numpackets = (UI->WH.dataSize / BUFSIZE);
	bytetoSend = (numpackets * SOUND_DATA_SIZE)+(numpackets * 44);// do math for this ...soundbuffer/512 then add header to each of those

	TCPcontrolsend(TI, UI, UI->WH.size);

	while(bytetoSend > byteSent)
	{
		filecontents.buf = packetize(&UI->WH, &bufpos);
		byteSent += sendto(UI->sd, filecontents.buf, BUFSIZE, flags, (struct sockaddr *)&UI->server, UI->server_len); 
		
	}
	return 0;
}
Exemplo n.º 2
0
void UDPread(UDPinfo *UI, int filesize)
{
	WSABUF UDPread;
	int bytesRecv = 0;
	DWORD flags = 0;
	int err;
	WAVEHDR* waveBlocks;
	FILE *fp;
	WAVEFORMATEX wfx;
	wavheader WH;
	HWAVEOUT hWaveOut;
	char data[BUFSIZE];
	int i = 0;

	UDPread.buf = (char *) malloc (BUFSIZE);
	UDPread.len = BUFSIZE;


	waveBlocks = allocateBlocks(BLOCK_SIZE, BLOCK_COUNT);
	waveFreeBlockCount = BLOCK_COUNT;
	waveCurrentBlock = 0;
	InitializeCriticalSection(&waveCriticalSection);

	fp = wavOpen(&WH);

	wfx.nSamplesPerSec = WH.sampleRate;
	wfx.wBitsPerSample = 16;
	wfx.nChannels = 2;
	wfx.cbSize = 0;
	wfx.wFormatTag = WAVE_FORMAT_PCM;
	wfx.nBlockAlign = (wfx.wBitsPerSample * wfx.nChannels) >> 3;
	wfx.nAvgBytesPerSec = wfx.nBlockAlign * wfx.nSamplesPerSec;

	
	if((err = waveOutOpen(&hWaveOut, WAVE_MAPPER, &wfx,(DWORD_PTR)waveOutProc, (DWORD_PTR)&waveFreeBlockCount, CALLBACK_FUNCTION)) != MMSYSERR_NOERROR)
	{
		fprintf(stdout, "unable to open wave mapper device");
		fprintf(stdout, "%d", err);
		ExitProcess(1);
	}
	while(bytesRecv < filesize)
	{
		if(recvfrom(UI->sd, UDPread.buf, BUFSIZE, flags,NULL,NULL) == SOCKET_ERROR)
		{
			err = WSAGetLastError();
			if(err != ERROR_IO_PENDING)
			{
				// error during read
			}
		}
	

		
		memcpy(data,UDPread.buf, BUFSIZE);
		
		writeAudio(hWaveOut, data, BUFSIZE, waveBlocks, waveCriticalSection);
		bytesRecv += BUFSIZE;
	}
	/*
	 * unprepare any blocks that are still prepared
	 */
	for(i = 0; i < waveFreeBlockCount; i++) 
	{
		if(waveBlocks[i].dwFlags & WHDR_PREPARED)
		{
			waveOutUnprepareHeader(hWaveOut, &waveBlocks[i], sizeof(WAVEHDR));
		}
	}
	DeleteCriticalSection(&waveCriticalSection);
	freeBlocks(waveBlocks);
	waveOutClose(hWaveOut);


	
}