首页 > 编程知识 正文

wav格式的音频文件,WAV是音频文件格式吗

时间:2023-05-04 12:41:06 阅读:218344 作者:3500

wav是微软开发的一种音频文件格式,注意,wav文件格式是无损音频文件格式,相对于其他音频格式文件数据是没有经过压缩的,通常文件也相对比较大些。

文件格式如图所示:


解析代码如下:

#include <stdio.h>#include <stdint.h>#include <stdlib.h>struct WAV_Format {uint32_t ChunkID;/* "RIFF" */uint32_t ChunkSize;/* 36 + Subchunk2Size */uint32_t Format;/* "WAVE" *//* sub-chunk "fmt" */uint32_t Subchunk1ID;/* "fmt " */uint32_t Subchunk1Size;/* 16 for PCM */uint16_t AudioFormat;/* PCM = 1*/uint16_t NumChannels;/* Mono = 1, Stereo = 2, etc. */uint32_t SampleRate;/* 8000, 44100, etc. */uint32_t ByteRate;/* = SampleRate * NumChannels * BitsPerSample/8 */uint16_t BlockAlign;/* = NumChannels * BitsPerSample/8 */uint16_t BitsPerSample;/* 8bits, 16bits, etc. *//* sub-chunk "data" */uint32_t Subchunk2ID;/* "data" */uint32_t Subchunk2Size;/* data size */}; int main(void){FILE *fp = NULL;struct WAV_Format wav;fp = fopen("test.wav", "rb");if (!fp) {printf("can't open audio filen");exit(1);}fread(&wav, 1, sizeof(struct WAV_Format), fp);printf("ChunkID t%xn", wav.ChunkID);printf("ChunkSize t%dn", wav.ChunkSize);printf("Format tt%xn", wav.Format);printf("Subchunk1ID t%xn", wav.Subchunk1ID);printf("Subchunk1Size t%dn", wav.Subchunk1Size);printf("AudioFormat t%dn", wav.AudioFormat);printf("NumChannels t%dn", wav.NumChannels);printf("SampleRate t%dn", wav.SampleRate);printf("ByteRate t%dn", wav.ByteRate);printf("BlockAlign t%dn", wav.BlockAlign);printf("BitsPerSample t%dn", wav.BitsPerSample);printf("Subchunk2ID t%xn", wav.Subchunk2ID);printf("Subchunk2Size t%dn", wav.Subchunk2Size);fclose(fp);return 0;}

// 2016-09-22 add
ByteRate计算方法是SampleRate * NumChannels * BitsPerSample/8,那么这个公式计算出来的是1秒钟音频数据大小,单位为Byte,以44100、16bit、2通道为例,那么计算出来值为176400,根据总音频数据大小,可以得出播放时间的计算公式为Subchunk2Size / ByteRate。


参考:http://soundfile.sapp.org/doc/WaveFormat/

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。