关于 wav 文件的块大小混淆

时间:2021-02-26 05:39:47

标签: c wav dataformat

我正在尝试使用 c 文件处理来解析 .wav 文件。我对我得到的输出有点困惑。下面给出的是我正在运行以解析 .wav 文件的代码,目前我只是在解析文件的标题部分。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct{

    char* ChunkId;
    char* fmt;
    u_int32_t ChunkSize;

}Header;

int main(void){

    FILE * file = fopen("piano2.wav","r");

    Header header; 
    header.ChunkId = malloc(sizeof(char) * 4);
    header.fmt = malloc(sizeof(char) * 4);

    if(file == NULL){
        return 1;
    }

    fread(header.ChunkId,sizeof(char),4,file);
    fread(&header.ChunkSize,sizeof(u_int32_t),1,file);
    fread(header.fmt,sizeof(char),4,file);


    printf("%s\n",header.ChunkId);
    printf("%u\n",header.ChunkSize);
    printf("%s\n",header.fmt);

    fclose(file);
    free(header.ChunkId);
    free(header.fmt);
}

我在运行代码后得到这个输出。

RIFF
1210884
WAVE

输出的 RIFF 和 WAVE 部分对我来说很清楚,但第二行是我在理解上有一个小问题的地方。块大小实际上是多少?我很难计算它,我知道它是小端形式的 32 位数字,我有 unsigned int 形式的输出。我应该将其转换为十六进制吗?然后转换成big-endian再计算chunk size,还是输出本身就是chunk size?

0 个答案:

没有答案
相关问题