c++ - 如何从文件中读取原始 PCM 数据并转换为 float ?

标签 c++ type-conversion binaryfiles pcm

我读取了原始 PCM 数据的二进制文件,但无法将其正确转换为 float 。我正在阅读 audacity 识别为 16 位无符号的原始 pcm 文件。我正在使用以下代码:

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;
}

我在这里做错了什么?

最佳答案

j 递增 2,因此您只需填写 f[] 的所有其他值。

相反,分配 f[j>>1]

希望你分配给 f 以容纳至少 j/2 个 float 。

关于c++ - 如何从文件中读取原始 PCM 数据并转换为 float ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25104681/

相关文章:

c++ - 将两个链表中的特定值相加时出现问题

c - 如何将二进制文件的十六进制转储到 C 中

C++ 二进制文件方法正在从文件中删除内容?

android - android设备上二进制文件损坏的可能原因是什么

c++ - UDP 客户端/服务器发送数据但无法读取

C++, 'if' 表达式中的变量声明

转换具有多种类型(包括列表!)的列表的 Pythonic 方法

c++ - 将 int 数组更改为 char 数组

c++ - 如果函数没有结束运行,请在 5 分钟内停止函数

python - 枚举后需要逗号才能正确输出要列出的值