繁体   English   中英

在C ++中读取.wav数据时出现意外输出

[英]Unexpected output when reading .wav data in c++

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

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

然后,我读取了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获得的数据进行比较时,其功效与功率或300左右完全相差10倍。 我正在使用xcode。

24位.wav文件具有整数样本,而不是浮点数(float / double); 波中的浮点IEEE样本通常具有32或64位。 只需将数据读入32位int即可; 请注意,对齐方式,符号性和字节性也必须匹配(Wave数据通常以二进制补码格式签名)。 或者,如注释中指出的那样,将其导出为16位以允许对数据进行简单打包和对齐匹配。

例如,Sound Foundry 6.0允许8、16、24和32位整数样本以及32和64位浮点IEEE样本。 大多数专业音频应用程序都遵循相同的原则,主要是因为硬件仅支持那些位分辨率。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM