Your first function, waveOutOpen((HWAVEOUT*)&hWaveOut,WAVE_MAPPER,(tWAVEFORMATEX*)&PCMWaveFmtRecord,NULL,NULL,NULL); seems to be correctly, but more correctly is to use function like that: HWAVEOUT hWaveOut; waveOutOpen(&hWaveOut,WAVE_MAPPER,(LPWAVEFORMATEX)&PCMWaveFmtRecord,NULL,NULL,NULL); (where PCMWaveFmtRecord identifies the format of the waveform-audio data to be sent to the device). The second and third function: waveOutPrepareHeader((HWAVEOUT)&hWaveOut,&WaveHeader,sizeof(WaveHeader)); waveOutWrite((HWAVEOUT)&hWaveOut,&WaveHeader,sizeof(WaveHeader)); is not correctly because the first parrametter pased is need to be a HWAVEOUT handle and not a reference. Correctly is: waveOutPrepareHeader(hWaveOut,&WaveHeader,sizeof(WAVEHDR)); waveOutWrite(hWaveOut,&WaveHeader,sizeof(WAVEHDR));