Salve,
ho scritto quello che dovrebbe essere il codice base per catturare un primo chunk di 4096 bytes di audio dal microfono del pc:
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!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; }
A questo punto mi domando se la callback è scritta nella forma corretta



Rispondi quotando