#include "stdafx.h" #include "mmsystem.h" #include "makewave.h" static HANDLE heventdone = 0; static void CALLBACK waveOutProc( HWAVEOUT hwo, UINT uMsg, DWORD dwInstance, DWORD dwParam1, DWORD dwParam2 ) { if(uMsg == MM_WOM_DONE) SetEvent(heventdone); } int myplaysound(unsigned char * buffer, DWORD size) { DWORD i; if(!heventdone) heventdone = CreateEvent(NULL, FALSE, FALSE, NULL); HWAVEOUT hwo; WAVEFORMATEX waveformat; waveformat.wFormatTag=WAVE_FORMAT_PCM; waveformat.nChannels=1; waveformat.nSamplesPerSec = 44100; waveformat.nAvgBytesPerSec = 44100; waveformat.nBlockAlign = 1; waveformat.wBitsPerSample = 8; waveformat.cbSize = 0; i=waveOutOpen(&hwo, WAVE_MAPPER, &waveformat, (DWORD)&waveOutProc, 0, CALLBACK_FUNCTION); WAVEHDR whdr; whdr.dwBufferLength=size; whdr.dwFlags=0; whdr.lpData=(char *)buffer; i=waveOutPrepareHeader(hwo,&whdr,sizeof(whdr)); i=waveOutWrite(hwo,&whdr,sizeof(whdr)); WaitForSingleObject(heventdone, INFINITE); i=waveOutReset(hwo); i=waveOutUnprepareHeader(hwo,&whdr,sizeof(whdr)); i=waveOutClose(hwo); return 0; }