Salve,
volevo chiedere un parere su quale secondo voi potesse essere la migliore via per preparare diversi buffer (WAVEHDR) da usare per la cattura audio tramite le waveForm API.
Il seguente codice mi è stato consigliato proprio su questo forum e devo dire che funziona alla perfezione, forse magari fa troppo uso dell'operatore new, ma per il resto credo vada bene:
codice:
WAVEHDR **buff = new WAVEHDR*[num_buffers];
for (int i = 0; i<num_buffers; i++)
{
buff[i] = new WAVEHDR;
ZeroMemory(buff[i],sizeof(WAVEHDR));
buff[i]->lpData = (char*) malloc(system_buf_len);
buff[i]->dwBufferLength = system_buf_len;
buff[i]->dwBytesRecorded = 0;
buff[i]->dwUser = 0;
buff[i]->dwFlags = 0;
buff[i]->dwLoops = 0;
waveInPrepareHeader(hwi, buff[i], sizeof(WAVEHDR));
waveInAddBuffer(hwi, buff[i], sizeof(WAVEHDR));
}
Tuttavia anche il codice di seguito potrebbe andare bene, inoltre non c'è nessuna allocazione dinamica:
codice:
#include <vector>
typedef std::vector<WAVEHDR> WaveHdrArray;
typedef std::vector<char> CharArray;
(...)
WaveHdrArray buff(num_buffers);
CharArray chArray(system_buf_len * num_buffers);
for (int i = 0; i<num_buffers; i++)
{
ZeroMemory(&buff[i],sizeof(WAVEHDR));
buff[i].lpData = &chArray[i * system_buf_len];
buff[i].dwBufferLength = system_buf_len;
buff[i].dwBytesRecorded = 0;
buff[i].dwUser = 0;
buff[i].dwFlags = 0;
buff[i].dwLoops = 0;
waveInPrepareHeader(hwi, &buff[i], sizeof(WAVEHDR));
waveInAddBuffer(hwi, &buff[i], sizeof(WAVEHDR));
}
cosa ne pensate?
grazie