typedef unsigned int uint32_t;
typedef unsigned short uint16_t;
//RIFF塊
typedef struct
{
uint32_t ChunkID; //chunk id;這里固定為"RIFF",即0X46464952
uint32_t ChunkSize ; //集合大小;文件總大小-8
uint32_t Format; //格式;WAVE,即0X45564157
}ChunkRIFF ;
//fmt塊
typedef struct
{
uint32_t ChunkID; //chunk id;這里固定為"fmt ",即0X20746D66
uint32_t ChunkSize ; //子集合大小(不包括ID和Size);這里為:20.
uint16_t AudioFormat; //音頻格式;0X01,表示線性PCM;0X11表示IMA ADPCM
uint16_t NumOfChannels; //通道數量;1,表示單聲道;2,表示雙聲道;
uint32_t SampleRate; //采樣率 每秒鐘有多少個字節的數據送到DAC上
uint32_t ByteRate; //字節速率;通道數*DAC精度
uint16_t BlockAlign; //塊對齊(字節);
uint16_t BitsPerSample; //單個采樣數據大小 就是DAC需要的精度
// uint16_t ByteExtraData; //附加的數據字節;2個; 線性PCM,沒有這個參數
}ChunkFMT;
int main()
{
char Wave[]="ykzzldx.wav";
ChunkRIFF Riff;
ChunkFMT Fmt;
FILE *Wavefil;
Wavefil=fopen(Wave,"r+");
if(Wavefil==NULL)
{
printf("da kai wen jian shi bai\n");
return 0;
}
fread(&Riff,sizeof(Riff),1,Wavefil);
fread(&Fmt,sizeof(Fmt),1,Wavefil);
if(Riff.ChunkID==0X46464952)
{
printf("zhe shi wav wen jian \n");
printf("zheng ge wen jian de da xiao wei: %dKB\n",(Riff.ChunkSize+8)>>10);
if(Fmt.ChunkID==0X20746D66);
{
printf("Wav wen jian !\n");
if(Fmt.AudioFormat==0x01)
{
printf("zhe shi xian xing PCM ge shi \n");
}
printf("tong dao shu liang wei %d\n",Fmt.NumOfChannels);
printf("cai yang su lv wei: %dHz\n",Fmt.SampleRate);
printf("zi jie su lv wei :%dHz\n",Fmt.ByteRate);
printf("dan ge cai yang shu ju da xiao wei:\t%d\n",Fmt.BitsPerSample);
}
}
else
{
printf("zhe bu shi WAV wen jian \n");
return 0;
}
fclose(Wavefil);
return 0;
}
|