Стал в ступор с тупой функцией вывода звука: слышу лишь "пуки". Вырезал из программы кусок, чтобы чисто - результат тот же. Никто не подскажет, где я ступил?
Код:
#include <windows.h>
#include <mmsystem.h>
#include <stdio.h>
HWAVEOUT handle;
WAVEHDR whdr;
typedef unsigned long dword;
union SAMPLE
{
dword sample;
struct { short left, right; } ch;
};
SAMPLE buffer[16384];
int main()
{
int i;
WAVEFORMATEX wf;
wf.cbSize = sizeof(wf);
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.nSamplesPerSec = 44100;
wf.wBitsPerSample = 16;
wf.nChannels = 2;
wf.nBlockAlign = 4;
wf.nAvgBytesPerSec = 176400;
MMRESULT r = waveOutOpen(&handle, WAVE_MAPPER, &wf, NULL, 0, CALLBACK_NULL);
if(r != MMSYSERR_NOERROR) printf("Аудио не запустилось!");
for (int i=0; i<16384; i++) {
buffer[i].sample=0x3FFF3FFF;
}
for (i=0; i<100; i++) {
whdr.dwBufferLength=882*4;
whdr.lpData=(char *)buffer;
whdr.dwFlags=0;
whdr.dwBytesRecorded = 0;
whdr.dwUser = 0;
whdr.dwLoops = 0;
whdr.lpNext = NULL;
whdr.reserved = 0;
MMRESULT r=waveOutPrepareHeader(handle,&whdr,sizeof(whdr));
if (r==MMSYSERR_NOERROR) waveOutWrite(handle,&whdr,sizeof(whdr));
while(!(whdr.dwFlags&WHDR_DONE)) Sleep(1);
waveOutUnprepareHeader(handle,&whdr,sizeof(whdr));
}
return 0;
}