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