Здравствуйте. Пишу программу по обработке звука с микрофона. Данные сохраняются в массиве char. Один отчёт равен 16 бит. Посоветуйте, как грамотно преобразовывать эти данные в int, чтобы строить по ним график амплитуд.
Сами отчета с микрофона я получаю с помощью функции библиотеки bass.dll
rchan = BASS_RecordStart(FREQ,CHANS,0,&DuffRecording,0); // rchan - канал записи
и её колбэка:
BOOL CALLBACK DuffRecording(HRECORD hangle, const void *buffer, DWORD lenght, void *user)
{
if((reclen % BUFSTEP) + lenght >= BUFSTEP) // динамическое выделение памяти под поток
recbuf = (char *)realloc(recbuf,((reclen + lenght) / BUFSTEP + 1) * BUFSTEP);
memcpy(recbuf+reclen,buffer,lenght); // recbuf - массив отчетов char, из которого мне необходимо извлечь и обработать данные
reclen+=lenght; // reclen - длина массива recbuf
return TRUE;
}
Поток сохраняет отчёты с микрофона в массиве char recbuf. 2 байта - один отчет. С ними мне и нужно как-то работать.