#include <stdio.h>
typedef struct wavefile{
unsigned char RIFF_sign[4]; // RIFF标志
unsigned long Docum_len; // 文件长度
unsigned char WAVE_sign[4]; // WAVE标志
unsigned char Fmt_sign[4]; // fmt标志
unsigned long Transition; // 过渡字节
unsigned short Format_type; // 格式类别
unsigned short Pass_num; // 通道数
unsigned long Samp_rate; // 采样率
unsigned long Trans_rate; // 传输速率
unsigned short Data_adju; // 数据块调整数
unsigned short Data_bit; // 数据位数
unsigned char Data_sign[4]; // data标志
unsigned long Data_size; // 语音数据长度
}wave;
void output(wave wav_head)
{
int i;
printf("输出头文件信息:\n");
printf("RIFF标志: ");
for(i=0;i<4;i++) printf("%c",wav_head.RIFF_sign[i]);
printf("\n文件长度: %ld\n",wav_head.Docum_len);
printf("wav文件标志: ");
for(i=0;i<4;i++) printf("%c",wav_head.WAVE_sign[i]);
printf("\nfmt标志: ");
for(i=0;i<4;i++) printf("%c",wav_head.Fmt_sign[i]);
printf("\n过度字节: %ld\n",wav_head.Transition);
printf("格式类别: %d\n",wav_head.Format_type);
printf("通道数: %d\n",wav_head.Pass_num);
printf("采样率: %dHz\n",wav_head.Samp_rate);
printf("数据传输速率: %ldbps\n",wav_head.Trans_rate);
printf("数据块调整数: %d\n",wav_head.Data_adju);
printf("每样本数据位数: %d\n", wav_head.Data_bit);
printf("data标记符: ");
for(i=0;i<4;i++) printf("%c", wav_head.Data_sign[i]);
printf("\n数据长度: %d\n",wav_head.Data_size);
}
void main()
{
FILE *fpwave=NULL;
wave wav_head;
fpwave = fopen("file.wav", "rb");
if (fpwave)
{
fread(&wav_head, sizeof(wave), 1, fpwave);
output(wav_head);
}
else
{
printf("Open wave file failed!\n");
}
fclose(fpwave);
fpwave = NULL;
}