在c++中读取.wav数据时的意外输出

Unexpected output when reading .wav data in c++

本文关键字:意外 输出 数据 wav c++ 读取      更新时间:2023-10-16

我正在制作一个非常简单的方法,但是遇到一些麻烦。

我想读取。wav文件的数据。我只对前80个样本感兴趣,接下来我要做的是。我使用fseek到文件的第44字节(数据开始的地方)https://ccrma.stanford.edu/courses/422/projects/WaveFormat/

然后我读取24位块(我绝对肯定。wav文件有24位的样本,因为我创建了它+检查了它)

下面是我的代码:
void WavData::leerTodo(char *fname){
    double array[1000];
    FILE* fp = fopen(fname,"rb");
    fseek(fp, 44, SEEK_SET);
    if (fp) {
        fread(array,sizeof(double), 100, fp);
        for (int i = 0; i<100; i++) {
            cout<<"datos del .wav son es "<<array[i]<<"n";
        }
    }
}

当我将结果与从matlab获得的数据进行比较时,结果完全不同,相差10的300次方左右。我用xcode

24位。wav文件具有整数样本,而不是浮点(float/double)样本;波中的浮点IEEE样本通常是32位或64位。只需将数据读入32位整型;请注意,对齐、签名和尾序也必须匹配(Wave数据通常以二进制的补码格式签名)。或者,正如评论中指出的那样,将其导出为16位,以方便对数据进行打包和对齐匹配。

例如,Sound Foundry 6.0允许8、16、24和32位整数采样和32 &64位浮动IEEE样本;大多数专业音频应用程序都遵循相同的路线,主要是因为硬件只支持这些位分辨率。

进一步阅读:http://en.wikipedia.org/wiki/Audio_bit_depth