this is some new code...how can I put the recording into a infinite loop? do I have to use threads?
thanksCode:#include <windows.h> #pragma comment (lib, "winmm.lib") #include <mmsystem.h> #include <iostream> #include <stdlib.h> // Define "system" function #include <string> #define system_buf_len 32768 void CALLBACK waveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2); bool addbuffer(WAVEHDR *pWaveHdr); 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)waveInProc, 0, CALLBACK_FUNCTION ); // Prepare Buffer int i=0; int num_buff = 20; WAVEHDR *buffer = (WAVEHDR *) malloc(sizeof(WAVEHDR)*num_buff); for (i=0; i<num_buff; i++) { buffer[i].lpData = (LPSTR) malloc(system_buf_len); buffer[i].dwBufferLength = system_buf_len; buffer[i].dwBytesRecorded = 0; buffer[i].dwUser = 0; buffer[i].dwFlags = 0; buffer[i].dwLoops = 0; waveInPrepareHeader(phvi, &buffer[i], sizeof(WAVEHDR)); waveInAddBuffer(phvi, &buffer[i], sizeof(WAVEHDR)); } //waveInStart; waveInStart(phvi); //waveInClose; waveInClose(phvi); system("pause"); return 0; } void CALLBACK waveInProc(HWAVEIN hwi,UINT uMsg,DWORD dwInstance,DWORD dwParam1,DWORD dwParam2) { WAVEHDR* pWaveHdr; switch(uMsg) { case MM_WIM_DATA: pWaveHdr = ((WAVEHDR*)dwParam1); if (pWaveHdr && hwi) { if (pWaveHdr->dwFlags && WHDR_DONE == WHDR_DONE) { pWaveHdr->dwFlags = 0; waveInUnprepareHeader(hwi, pWaveHdr, sizeof(WAVEHDR)); if (pWaveHdr->dwBytesRecorded > 0) { addbuffer(pWaveHdr); } delete[] pWaveHdr->lpData; pWaveHdr->lpData = NULL; } } break; case MM_WIM_OPEN: std::cout << "MM_WIN_OPEN" << std::endl; break; case MM_WIM_CLOSE: std::cout << "MM_WIN_CLOSE" << std::endl; break; } } bool addbuffer(WAVEHDR *pWaveHdr) { std::cout << pWaveHdr->dwBytesRecorded << std::endl; std::cout << pWaveHdr->lpData << std::endl; return true; }




Reply With Quote