Как читать необработанные данные PCM из файла и конвертировать в плавающее?

Я прочитал двоичный файл необработанных данных PCM, но не могу преобразовать его в число с плавающей точкой. Я читаю необработанный файл PCM, который Audacity распознает как 16-битный неподписанный. Я использую следующий код:

fseek(stream, 0, SEEK_END);
size = ftell(stream);
fseek(stream, 0, SEEK_SET);
uint8_t * buf = (uint8_t *)malloc(size);
float * f = (float *)malloc(size * sizeof(float) / 2);

//read buffer
fread(buf, sizeof(uint8_t), size, stream);

//convert to float:
for(int j=0;j<size;j+=2){
int16_t temp1 = buf[j] | buf[j+1] << 8;
f[j/2]=(float)temp1/(float)32767.0;
if( f[j/2] > 1 )
f[j/2] = 1;
if( f[j/2] < -1 )
f[j/2] = -1;
}

Что я здесь не так делаю?

2

Решение

j увеличивается на 2, поэтому вы заполняете только остальные значения f [].

Вместо этого назначьте f [j >> 1]

Надеюсь, вы выделили f для удержания не менее j / 2 float.

1

Другие решения


По вопросам рекламы [email protected]