c++ winapi microfono

Iniciado por shiro51, 16 Abril 2013, 01:59 AM

0 Miembros y 1 Visitante están viendo este tema.

shiro51

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.