l'inizializzazione avviene correttamente, se non chiamassi start() non ci sarebbe errore...non so proprio cosa possa essere, ecco il codice di start() nella classe:
codice:
// Define: start() (fake)
bool waveCapture::start()
{
DWORD dwCBufferLength = getSuggestedBufferSize();
if(this->_start(0, dwCBufferLength, dwCNumBuffers))
return true;
else
return false;
}
// Define: start(WORD) (fake)
bool waveCapture::start(const WORD uDevice)
{
DWORD dwCBufferLength = getSuggestedBufferSize();
if(this->_start(uDevice, dwCBufferLength, dwCNumBuffers))
return true;
else
return false;
}
// Define: start(WORD, DWORD, DWORD) (fake)
bool waveCapture::start(const WORD uDevice, const DWORD dwBufferLength, const DWORD dwNumBuffers)
{
if(this->_start(uDevice, dwBufferLength, dwNumBuffers))
return true;
else
return false;
}
// Define: _start(WORD, DWORD, DWORD) (real)
bool waveCapture::_start(const WORD uDevice, const DWORD dwBufferLength, const DWORD dwNumBuffers)
{
// need dwNumBuffers in stop() as well,
// so I set __dwNumBuffers under the counter
__dwNumBuffers = dwNumBuffers;
// Define WAVEFORMATEX Structure (WAVEFORMATEX wf):
wf.wFormatTag = WAVE_FORMAT_PCM;
wf.wBitsPerSample = _wBitsPerSample;
wf.nChannels = _nChannels;
wf.nSamplesPerSec = _dwSamplePerSec;
wf.nBlockAlign = (wf.nChannels * wf.wBitsPerSample) / 8;
wf.nAvgBytesPerSec = (wf.nSamplesPerSec * wf.nBlockAlign);
wf.cbSize = 0;
// Create event:
hevent = CreateEvent(NULL,FALSE,FALSE,NULL);
// WaveInOpen
if(waveInOpen(&hwi,uDevice,(LPWAVEFORMATEX)&wf,(DWORD)hevent,0,CALLBACK_EVENT) != MMSYSERR_NOERROR)
{
return false;
}
// Define WAVEHDR Structure:
buff = new WAVEHDR[dwNumBuffers];
for (int i = 0; i<(int)dwNumBuffers; i++)
{
ZeroMemory(&buff[i], sizeof(buff[i]));
buff[i].lpData = (char*) malloc(dwBufferLength);
buff[i].dwBufferLength = dwBufferLength;
buff[i].dwBytesRecorded = 0;
buff[i].dwUser = 0;
buff[i].dwFlags = 0;
buff[i].dwLoops = 0;
if(waveInPrepareHeader(hwi, &buff[i], sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
{
return false;
}
if(waveInAddBuffer(hwi, &buff[i], sizeof(WAVEHDR)) != MMSYSERR_NOERROR)
{
return false;
}
}
// Start capturing...
if(waveInStart(hwi) != MMSYSERR_NOERROR)
{
printf("waveInStart: ERROR!\n");
return false;
}
_dwBufferCount = 0;
dwTotalBufferLength = 0;
return true;
}