c++ - 将波形文件读入有符号浮点数组
问题描述
使用以下代码,我可以将波形文件读入浮点数组。然而,波浪的负面最终会出现在正面,因此:-MAX -> 0 和“-0” -> MAX。我无法完全理解如何正确地做到这一点。我确实意识到 wave 的标题部分可能超过 44 个字节长,但对于这个应用程序来说,它不会发生。我希望你们中的一个好人可以帮助我:-)
string filename;
getline(cin, filename);
ifstream wavFile(filename, ios::binary | ios::ate);
if (!wavFile)
cout << "error reading file\n";
int size = wavFile.tellg();
wavArray = new unsigned char[size];
wavFile.seekg(0, ios::beg);
wavFile.read((char *)wavArray, size);
wavFile.close();
int j = 1;
for (int i = 0; i < 262; i++)
{
unsigned int tmp = (wavArray[i + 44] | (wavArray[i + 45] << 8));
printf("%d : %f \n", k, (tmp / 32768.0));
j++;
i++;
}
解决方案
问题是您对tmp
变量使用无符号。tmp
因此,即使样本为负,您也永远不会有负值。试试这个
int16_t tmp = (wavArray[i + 44] | (wavArray[i + 45] << 8));
你应该#include <cstdint>
得到int16_t
类型。
推荐阅读
- java - 每当在android studio中打开新项目时,可绘制的ic_launcher_background.xml文件中的错误
- apache - 为什么这个 .htaccess 重写代码没有正确重定向?
- graph - 如何知道节点/特征贡献?
- c++ - 为什么此代码段有效?如何取消引用 nullptr?
- css - 在 CSS 中更改页面的颜色配置文件
- verilog - 我什么时候应该在 SystemVerilog 中使用关键字“assign”?
- kubernetes - 在没有云提供商负载均衡器的情况下,将 kubernetes 集群暴露给“世界”
- python - Pygame collidepoint()无法正常工作
- c# - Nuget 问题:接口一直引用旧版本
- javascript - NavLink:悬停和活动时的 CSS 动画