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:
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.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);
Per avere un'applicazione più performante mi sarebbe piaciuto passare più buffer alle waveInPrepareHeader e waveInAddBuffer prima di iniziare la registrazione.
Ad esempio:
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!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);
Come fareste voi?
grazie



Rispondi quotando