我制作了一个非常简单的方法,但遇到了一些麻烦。
我想读取.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获得的数据进行比较时,它与功率或300左右完全不同。我正在使用xcode。
答案 0 :(得分:2)
24位.wav文件有整数样本,而不是浮点(浮点数/双精度);浮点IEEE波形中的样本通常为32或64位。只需将数据读入32位int;请注意,对齐,签名和字节顺序也必须匹配(Wave数据通常以两种补码格式签名)。或者,正如评论中所指出的,将其导出为16位,以便在数据上轻松打包和对齐匹配。
例如,Sound Foundry 6.0允许8,16,24和32位整数样本和32&amp; 64位浮动IEEE样本;大多数专业音频应用都遵循相同的路线,主要是因为硬件仅支持那些位分辨率。