colpa mia per questo ultimo errore! (risolto)

Ora invece sono alle prese nella costruzione di un buffer più complesso rispetto a quello singolo che c'è nel seguente codice:

codice:
// Create Event:
HANDLE hevent = CreateEvent(NULL,0,0,NULL);

// Define WAVEFORMATEX Structure:
WAVEFORMATEX wf
(...);

// waveInOpen:
HWAVEIN hwi;
waveInOpen(&hwi,0,(LPWAVEFORMATEX)&wf,(DWORD)hevent,0,CALLBACK_EVENT);

// Define WAVEHDR Structure:
WAVEHDR buff;
ZeroMemory(&buff, sizeof(buff));
buff.lpData          = (LPSTR) malloc(system_buf_len);
buff.dwBufferLength  = system_buf_len;
buff.dwBytesRecorded = 0;
buff.dwUser          = 0;
buff.dwFlags         = 0;
buff.dwLoops         = 0;

// Start Recording:
waveInPrepareHeader(hwi, &buff, sizeof(WAVEHDR));
waveInAddBuffer(hwi, &buff, sizeof(WAVEHDR));
waveInStart(hwi);

// Loop...
while(1)
{
	WaitForSingleObject(hevent, INFINITE);
	if(buff.dwFlags & WHDR_DONE)
	{
		save_buffer(&buff);
		waveInAddBuffer(hwi, &buff, sizeof(WAVEHDR));
	}

	if(stop_thread_flag)
		break;
}
waveInUnprepareHeader(hwi, &buff, sizeof(WAVEHDR));
waveInClose(hwi);
Ovvero viene creato un buffer WAVEHDR unico che viene passato a waveInPrepareHeader e waveInAddBuffer. Una volta iniziata la registrazione passeremo di nuovo il buffer alla waveInAddBuffer.

Per avere un'applicazione più performante mi sarebbe piaciuto passare più buffer alle waveInPrepareHeader e waveInAddBuffer prima di iniziare la registrazione.

Ad esempio:

codice:
// Define WAVEHDR Structure:
int num_buffers = 3;
WAVEHDR buff[num_buffers];

for (int k = 0; k<num_buffers; k++)
{
	buff[k].lpData          = (LPSTR) malloc(system_buf_len);
	buff[k].dwBufferLength  = system_buf_len;
	buff[k].dwBytesRecorded = 0;
	buff[k].dwUser          = 0;
	buff[k].dwFlags         = 0;
	buff[k].dwLoops         = 0;

	waveInPrepareHeader(hwi, &buff[k], sizeof(WAVEHDR));
	waveInAddBuffer(hwi, &buff[k], sizeof(WAVEHDR));
}

waveInStart(hwi);

// Loop...
while(1)
{
	WaitForSingleObject(hevent, INFINITE);
	if(buff.dwFlags & WHDR_DONE)
	{
		save_buffer(&buff);
		waveInAddBuffer(hwi, &buff, sizeof(WAVEHDR));
	}

	if(stop_thread_flag)
		break;
}

waveInUnprepareHeader(hwi, &buff, sizeof(WAVEHDR));
waveInClose(hwi);
Il problema però è che nonso come "catturare il primo" buffer pronto (segnalato pronto) per usarlo e poi ripassarlo alla waveInAddBuffer dato che ora mi arriva un'array di buffers!

Come fareste voi?

grazie