首页 > 解决方案 > 将波形文件读入有符号浮点数组

问题描述

使用以下代码,我可以将波形文件读入浮点数组。然而,波浪的负面最终会出现在正面,因此:-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++;
}

标签: c++castingbinarywav

解决方案


问题是您对tmp变量使用无符号。tmp因此,即使样本为负,您也永远不会有负值。试试这个

int16_t tmp = (wavArray[i + 44] | (wavArray[i + 45] << 8));

你应该#include <cstdint>得到int16_t类型。


推荐阅读