Código:
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.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);
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.