如何从文件中读取原始PCM数据并转换为浮点数?

时间:2014-08-03 12:34:41

标签: c++ type-conversion binaryfiles pcm

我读取了原始PCM数据的二进制文件,但无法将其正确转换为浮点数。我正在读取一个原始pcm文件,大胆识别为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;
}

我在这里做错了什么?

1 个答案:

答案 0 :(得分:1)

j递增2,因此您只填写f []的每个其他值。

相反,请指定f [j&gt;&gt; 1]

希望你分配f来保持至少j / 2浮动。