Salve,

ho scritto quello che dovrebbe essere il codice base per catturare un primo chunk di 4096 bytes di audio dal microfono del pc:

codice:
#include <windows.h>
#pragma comment (lib, "winmm.lib")
#include <mmsystem.h>
#include <iostream>
#include <stdlib.h> // Define "system" function
#define system_buf_len 4096

LRESULT CALLBACK mycallback(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam);

int main()
{
	// Definisco la struttura WAVEFORMATEX
	WAVEFORMATEX waveFormat;
	waveFormat.wFormatTag      = WAVE_FORMAT_PCM;
	waveFormat.wBitsPerSample  = 16;
	waveFormat.nChannels       = 1;
	waveFormat.nSamplesPerSec  = 44100;
	waveFormat.nBlockAlign     = waveFormat.nChannels * waveFormat.wBitsPerSample / 8;
	waveFormat.nAvgBytesPerSec = waveFormat.nSamplesPerSec * waveFormat.nBlockAlign;
	waveFormat.cbSize          = 0;

	MMRESULT mmres;   // ...
	HWAVEIN phvi;     // Handle for the input device
	UINT uDevice = 0; // Device id "Gruppo Microfoni"

	// waveInOpen
	mmres = waveInOpen(&phvi,
					uDevice,
					(LPWAVEFORMATEX)&waveFormat,
					(DWORD)mycallback,
					0,
					CALLBACK_EVENT
					);

	// Prepare Buffer

	char *buf = (char *)malloc(system_buf_len);

	WAVEHDR buffer;
	buffer.lpData          = buf;
	buffer.dwBufferLength  = system_buf_len;
	buffer.dwBytesRecorded = 0;
	buffer.dwUser          = 0;
	buffer.dwFlags         = 0;
	buffer.dwLoops         = 0;

	// waveInPrepareHeader
	waveInPrepareHeader(phvi, &buffer, sizeof(WAVEHDR));

	// waveInAddBuffer
	waveInAddBuffer(phvi, &buffer, sizeof(WAVEHDR));

	//waveInStart;
	waveInStart(phvi);
	system("pause");
	return 0;
}

LRESULT CALLBACK mycallback(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
{
	MessageBox(NULL, LPCTSTR(message), "Caption", MB_OK);
	return 0;
}
Dopo la chiamata waveInStart() credevo che dovessi aspettare una chiamata da parte del sistema alla callback (mycallback) quando l'intero buffer era pieno, per questo ho settato in maniera molto semplice la callback per vedere se veniva chiamata dal sistema (a limite stampando il valore di "message" che in teoria dovrebbe ritornare la costante MM_WIM_DATA). Tuttavia il codice viene eseguito senza errori da parte del compilatore ma la callback non viene richiamata!

A questo punto mi domando se la callback è scritta nella forma corretta