wav文件格式整理

WAV简介:

  1. 标准格式化的 WAV 文件和 CD 格式一样,也是 44.1K 的取样频率, 16 位量化数字,因此在声音文件质量和 CD 相差无几。
  2. WAV 是由若干个Chunk 组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk、Format Chunk、 Fact Chunk(可选)和 Data Chunk。 每个Chunk又由块标识符数据大小数据三部分组成:
    这里写图片描述实际Chunk的大小为数据大小加8个字节。
  • RIFF WAVE Chunk:该块以“RIFF” 作为标示,紧跟 wav文件大小(该大小是 wav 文件的总大小-8字节,也就是一个u32的大小),然后数据段为“WAVE”,表示是 wav 文件。 RIFF块的 Chunk 结构如下:
    typedef __packed struct { u32 ChunkID; //chunk id;这里固定为"RIFF",即 0x52494646,R[52] I[49] F[46] u32 ChunkSize ; //集合大小,文件总大小-8字节,02131C02表示音乐文件一共有35394306字节大小 u32 Format; //格式:WAVE,即 0x57415645 }ChunkRIFF;
  • Format Chunk:该块以“fmt ”作为标示(注意t后面有个空格),一般情况下,该段的大小为 16 个字节,但是有些软件生成的 wav 格式,该部分可能有 18 个字节,含有 2 个字节的附加信息。 Format 块的 Chunk 结构如下:
    typedef __packed struct { u32 ChunkID; //chunk id;这里固定为"fmt ",即 0x666D7420 ,空格[20] u32 ChunkSize ; //子集合大小(不包括 ID 和 Size),就是这个chunk后面的字节数 u16 AudioFormat; //音频格式:1表示线性 PCM;2表示IMA ADPCM u16 NumOfChannels; //通道数量;1,表示单声道;2,表示双声道 u32 SampleRate; //采样率:44AC0000表示44100Hz(以字节为单位反着的,后面都是) u32 ByteRate; //字节速率:10B10200表示176400 u16 BlockAlign; //块对齐(字节):0400表示4字节对齐 u16 BitsPerSample; //单个采样数据大小:1000表示单个数据16位 }ChunkFMT;
  • Fact Chunk:该块为可选块,以“fact”作为标示,不是
    每个 WAV 文件都有, 在非 PCM 格式的文件中, 一般会在 Format 结构后面加入一个 Fact 块,该块 Chunk 结构如下:
    typedef __packed struct { u32 ChunkID; //chunk id;这里固定为"fact",即 0X74636166; u32 ChunkSize ; //子集合大小(不包括 ID 和 Size) u32 DataFactSize; //数据转换为 PCM 格式后的大小 }ChunkFACT;
    DataFactSize 是这个 Chunk 中最重要的数据,如果这是某种压缩格式的声音文件,那么从这里就可以知道他解压缩后的大小。对于解压时的计算会有很大的好处! 但如果使用的是 PCM 格式,就不存在这个块。
  • Data Chunk:该块是真正保存 wav 数据的地方,以“data”作为该 Chunk 的标示, 然后是数据的大小。数据块的 Chunk 结构如下:
    typedef __packed struct { u32 ChunkID; //chunk id;这里固定为"data",即 0x64617461 u32 ChunkSize ; //子集合大小(不包括 ID 和 Size);文件大小-60. }ChunkDATA;
    ChunkSize 后紧接着就是 wav 数据了,得到wav数据之后,通过I2S把数据传输给WM8978就可以播放音乐了~
    这里写图片描述
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值