Título: c++ winapi microfono
Publicado por: shiro51 en 16 Abril 2013, 01:59 am
Hola, estuve buscando por el foro pero no encuentro lo que busco. Tengo un proyecto donde obtengo el audio del microfono y luego lo reproduzco: const int NUMPTS = 44100 * 1; int sampleRate = 44100; short unsigned int waveIn[NUMPTS];
for( int i = 0; i < NUMPTS; i++ ) { waveIn[i] = 0; }
HWAVEIN hWaveIn; WAVEHDR WaveInHdr; HWAVEOUT hWaveOut;
WAVEFORMATEX pFormat; pFormat.wFormatTag = WAVE_FORMAT_PCM; pFormat.nChannels = 1; pFormat.nSamplesPerSec = sampleRate; pFormat.nAvgBytesPerSec = 2 * sampleRate; pFormat.nBlockAlign = 2; pFormat.wBitsPerSample = 16; pFormat.cbSize = 0;
waveInOpen(&hWaveIn, WAVE_MAPPER, &pFormat, 0, 0, WAVE_FORMAT_DIRECT);
WaveInHdr.lpData = (LPSTR)&waveIn; WaveInHdr.dwBufferLength = 2 * NUMPTS; WaveInHdr.dwBytesRecorded = 0; WaveInHdr.dwUser = 0; WaveInHdr.dwFlags = 0; WaveInHdr.dwLoops = 0; waveInPrepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));
waveInAddBuffer(hWaveIn, &WaveInHdr, sizeof(WAVEHDR));
waveInStart(hWaveIn);
cout << "Recording..." << endl; Sleep((NUMPTS/sampleRate) * 1000);
FILE *audio = fopen("audio.txt", "w+"); for( int i = 0; i < NUMPTS; i++ ) { fprintf(audio, "%d\n", (int)waveIn[i] ); } fclose(audio);
//cout << "Playing..." << endl;
//if(waveOutOpen(&hWaveOut, WAVE_MAPPER, &pFormat, 0, 0, WAVE_FORMAT_DIRECT)) //{ // MessageBoxA(NULL, "Failed to replay", NULL, MB_OK | MB_ICONEXCLAMATION ); //}
//waveOutSetVolume(hWaveOut, 0xFFFF); //waveOutWrite(hWaveOut, &WaveInHdr, sizeof(WaveInHdr)); //Sleep((NUMPTS/sampleRate) * 1000);
//waveOutUnprepareHeader(hWaveOut, &WaveInHdr, sizeof(WAVEHDR)); waveInUnprepareHeader(hWaveIn, &WaveInHdr, sizeof(WAVEHDR)); waveInClose(hWaveIn); //waveOutClose(hWaveOut); Ahora mismo lo tengo para que lo guarde en un txt el sonido entrante durante 1 segundo, quisiera tratar los números, para hacer un oscilador del sonido, saber cuando es fuerte o debil el sonido. Como son 2 bytes, es de 0 a 65535, pero no se cuando es bajo y cuando es fuerte o como funciona este sistema... Quisiera poder distinguirlos para hacer una media y hacer un oscilador del audio... si pudierais ayudarme me seria de gran ayuda.
|