Wave文件格式主要是用来存储音频PCM数据的,其实也可以存储非PCM音频数据,这种情况我们就不考虑了。文件的扩展名为“.wav”,采用RIFF文件结构。

一、RIFF文件格式简介

1、RIFF文件是由一个一个的chunk组成的,并且chunk之间可以嵌套。使用小端存储。

2、chunk的基本结构如下:

struct chunk
{char   chunkId[4];       // 4个字符组成的chunk标识,少于4字符右补空格U32    chunkSize;        // 数据块的大小,字节char   data[chunkSize]
};

chunkId可以为"RIFF"、"LIST"、"fmt"、"data"...

3、当chunkId为"RIFF"或"LIST"(类型块)时,chunk的结构变形为下面这样:

struct chunk
{char    chunkId[4];    // 4字符组成的chunk标识,少于4字符右补空格U32     chunkSize;     // chunkType + data的数据大小,字节char    chunkType[4];  // chunk的类型,e.g. WAVE/AVI...char    data[chunkSize - 4]
};

二、Wave文件格式

1、Wave文件采用RIFF文件格式,当然也就遵循RIFF文件结构。总体来看Wave文件是由多个chunk嵌套组成的。

Wave文件格式
字段 长度(B) 字段描述
chunk1 chunkId 4 第一个chunk的标识始终是"RIFF"
chunkSize 4 该chunk的数据大小,包括chunkType
chunkType 4 对于Wave文件chunk的类型为"WAVE"
data chunk2 chunkId 4 Wave文件的第二个chunk标识为"fmt"
chunkSize 4 该chunk的数据大小
data wFormatTag 2 音频数据格式,0x0001表示PCM数据
nChannels 2 声道数
nSamplesPerSec 4 采样率,每秒采样次数
nAvgBytesPerSec 4 每秒的音频数据大小(B),声道数*采样率*每个采样点的比特数/8
nBlockAlign 2 每个时刻的音频数据块大小(B),声道数*每个采样点的比特数/8
wBitsPerSample 2 每个采样点(的幅值)用多少比特编码(8 or 16)
chunk3 chunkId 4 Wave文件的第三个chunk的标识为"data"
chunkSize 4 该chunk的数据大小
data PCM数据 chunkSize PCM数据

从上表可以看出:

(1) Wave文件最外层是一个标识为"RIFF"的类型块chunk1

(2) 在chunk1的data部分嵌套了2个chunk,即chunk2和chunk3

(3) chunk2的标识为"fmt",在它的data部分存储音频的一些相关属性

(4) chunk3的标识为"data",在它的data部分存储具体的音频PCM数据

2、PCM数据存储格式

三、实例分析

文件:C:\Windows\Media\Windows 关机.wav

工具:notepad++ Hex Editor插件(或者UltraEdit)

Windows 关机.wav

为方便描述,把Wave文件的各个字段进行了1-14编号 


1: 0x 52 49 46 46,4字节,"RIFF"的ASCII码,对应chunk1的chunkId字段


2: 0x dc 95 02 00,4字节,小端存储,转为大端字节序0x 00 02 95 dc,即十进制的169436

表示chunk1的数据大小为169436字节,对应chunk1的chunkSize字段

查看Windows 关机.wav文件的大小为169444字节,chunkId和chunkSize占用8字节,所以还有169436字节


3: 0x 57 41 56 45,4字节,"WAVE"的ASCII码,对应chunk1的chunkType字段


4: 0x 66 6d 74 20,4字节,"fmt "的ASCII码,"fmt"不够4个字符,所以右边补空格

对应chunk2的chunkId字段


5: 0x 10 00 00 00,4字节,小端存储,转为大端字节序0x 00 00 00 10,即十进制的16

表示chunk2的数据大小为16字节,由上面表格可知,wFormatTag、nChannels、nSamplesPerSec、nAvgBytesPerSec、nBlockAlign、wBitsPerSample总共16字节

对应chunk2的chunkSize字段


6: 0x 01 00,2字节,转为大端字节序0x 00 01,表示Wave文件存储的是音频PCM数据

对应chunk2的data部分的wFormatTag字段


7: 0x 02 00,2字节,转为大端字节序0x 00 02,即十进制的2,表示声道数为2即双声道

对应chunk2的data部分的nChannels字段


8: 0x 44 ac 00 00,4字节,转为大端字节序0x 00 00 ac 44,即十进制的44100,表示音频采样率为44100Hz

对应chunk2的data部分的nSamplesPerSec字段


9: 0x 10 b1 02 00,4字节,转为大端字节序0x 00 02 b1 10,即十进制的176400

表示每秒的音频数据大小为176400B,该值等于”声道数*采样率*每个采样点的比特数/8”

即2 * 44100 * 16 / 8 = 176400,对应chunk2的data部分的nAvgBytesPerSec


10: 0x 04 00,2字节,转为大端0x 00 04,即十进制的4

表示每个时钟(有2个采样点)的音频数据有4B大小,该值等于”声道数*每个采样点的比特数/8”

即2 * 16 / 8 = 4,对应chunk2的data部分的nBlockAlign字段


11: 0x 10 00,2字节,转为大端0x 00 10,即十进制的16,表示每个采样值用16比特编码

对应chunk2的data部分的wBitsPerSample字段


12: 0x 64 61 74 64,4字节,"data"的ASCII码,对应chunk3的chunkId字段


13: 0x b8 95 02 00,4字节,转为大端0x 00 02 95 b8,即十进制的169400

表示chunk3的data部分的数据大小即PCM音频数据的大小,对应chunk3的chunkSize字段


14: 音频PCM数据,chunk3的data

Wave(.wav)文件格式相关推荐

  1. wave格式分析,wave音频文件格式分析配程序

    wav文件格式分析详解 程序如上一篇博文 一.综述     WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的. RIFF是英文Resource Interchange Fil ...

  2. wav文件格式分析详解

    wav文件格式分析详解 作者:曹京 日期:2006年7月17日 一.综述     WAVE文件作为多媒体中使用的声波文件格式之一,它是以RIFF格式为标准的. RIFF是英文Resource Inte ...

  3. WAV文件格式解析及处理

    RIFF file format RIFF全称为资源互换文件格式(Resources Interchange File Format),是Windows下大部分多媒体文件遵循的一种文件结构.RIFF文 ...

  4. wav文件格式分析与详解

    wav文件格式分析与详解 WAV文件是在PC机平台上很常见的.最经典的多媒体音频文件,最早于1991年8月出现在Windows 3.1操作系统上,文件扩展名为WAV,是WaveFom的简写,也称为波形 ...

  5. C语言解析wav文件格式

    目录 C语言解析wav文件 1.wav文件的二进制格式解析 1.1 RIFF chunk(资源互换文件格式块) 1.2 第一个子块fmt(描述数据子块中声音信息的格式) 1.3 第二个子块data(附 ...

  6. WAV 文件格式分析

    一. WAV文件简介 波形音频文件格式 (WAV / WAVE)是Microsoft开发的一种数字化声音文件格式,用于在PC上存储音频比特流,文件扩展名为"*.wav". WAV文 ...

  7. WAV文件格式全面分析+使用CoolEdit生成正弦波

    CoolEdit 生成正弦波以及WAV文件格式解析 生成正弦波 生成正弦波为: 48K采样率,单声道,一个Sample是16bit,10秒钟时间的PCM数据 生成的正弦波 将上面生成的正弦波保存为WA ...

  8. 音频wav文件格式分析

    一.音频文件 ​ /usr/share/sounds/deepin/stereo/desktop-login.wav 二.文件信息 syli@syli-PC:~/work/repo/Demo/pa$ ...

  9. 数据压缩——WAV文件格式分析

    目录 WAV文件概述 WAV文件格式 一.案例分析 二.代码分析 1.建立结构体 2.读取数据段长度 3.结果 参考 WAV文件概述 WAV文件是在PC机上常见且最经典的多媒体音频文件,文件扩展名为W ...

最新文章

  1. linux安装vsftp教程,CentOS7 vsftp 安装与配置(视频教程)
  2. 数据库开发——MySQL——多表查询
  3. 我们用过的linux系统
  4. c语言中组合函数,排列组合c怎么算 公式是什么
  5. isinstance_Java类class isInstance()方法及示例
  6. JSP--(使用请求转发的动作标识jsp:forward)
  7. 拉取ftp服务器上的文件_无公网IP环境下搭建外部访问FTP文件共享服务器
  8. WPF特效-实现3D足球效果
  9. 很不错标签云js插件
  10. 运动会管理系统java
  11. 接口返回数据带横杠时的正确写法
  12. MYSQL建表时PK,NN,UQ,BIN,UN,ZF,AI字段标识的意义
  13. java横向导出excel_Java中导入、导出Excel
  14. WIN7修改“桌面”存储位置
  15. JetBrains全家桶软件
  16. 【NCNN解读】——benchmark部分
  17. 亿美软通史东旭:5G消息热潮下的安全冷思考丨5GMASSAGING · 上海站预告
  18. 基于智能空间布局优化的系留低空应急通信系统设计及研究
  19. iPad 使用技巧:Apple Pencil
  20. 新年将至,如何用python给朋友送上新年祝福呢?

热门文章

  1. Warning: preg_match(): Compilation failed: PCRE does not support
  2. Linux下的硬件驱动——USB设备配置以及开发
  3. spring boot之controller注解与RequestController注解
  4. idea类存在找不到解决办法
  5. JSP书香味道点餐系统课设
  6. 陀螺仪程序---可直接用
  7. 名编辑电子杂志大师教程 | 添加页码
  8. 在没有安装VC软件的电脑上也可以执行的exe文件
  9. python音乐播放器
  10. 离线语音芯片-开发指南