在c++中读取.wav数据时的意外输出
Unexpected output when reading .wav data in c++
我正在制作一个非常简单的方法,但是遇到一些麻烦。
我想读取。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
相关文章:
- 字符串比较中的意外输出
- 来自 decltype 的意外输出类型
- 字符数组到十六进制字符串的转换 - 意外输出
- 使用 boost::regex 从目录中获取带有一些正则表达式的文件名称时出现意外输出
- 使用后序遍历递归的深度优先搜索会产生意外输出
- C++的意外输出
- 贝金纳C++练习解决方案的意外输出
- 无效* 转换获得意外输出
- 以下程序的意外输出
- 意外输出:矢量矢量(功率集)
- 基本 int 数组提供意外输出
- 线程的意外输出
- 减法中的意外输出
- 带有左移操作员C 的意外输出
- C strncpy意外输出
- 意外输出..函数绑定在虚拟表中的发生方式
- 星号的意外输出
- 已编译的 protobuf 文件的意外输出路径
- 打印对象矢量的意外输出
- 递归函数用于计算 n 个数字之和的意外输出