WAVE文件格式是Microsoft为存储多媒体的RIFF规范的一部分。一个RIFF文件以一个文件头开始,然后是一系列的数据块。一个WAVE文件常常仅由一个WAVE块构成,WAVE块包含一个说明格式的fmt块和存储取样信息的数据块。

标准WAVE文件格式

偏移

长度(字节)

变量名

描述

备注

0

4

ChunkID

ASCII字符“RIFF”,大端形式

RIFF头

4

4

ChunkSize

36+SubChunk2Size,即:4 + (8 + SubChunk1Size) + (8 + SubChunk2Size),指除文件前8字节后的字节数

RIFF头

8

4

Format

ASCII字符“WAVE”,大端形式

RIFF头

12

4

Subchunk1ID

ASCII字符“fmt ”,大端形式

Fmt子块

16

4

Subchunk1Size

对于PCM文件为16。指除前8字节的Fmt块大小

Fmt子块

20

2

AudioFormat

PCM=1,其他值指以某种形式压缩(见表2)

Fmt子块

22

2

NumChannels

单声道=1,立体声=2

Fmt子块

24

4

SampleRate

取样率,取16000

Fmt子块

28

4

ByteRate

SampleRate * NumChannels * BitsPerSample/8

Fmt子块

32

2

BlockAlign

NumChannels * BitsPerSample/8,所有声道中一个样本数据的字节总数

Fmt子块

34

2

BitsPerSample

8或16

Fmt子块

36

4

Subchunk2ID

ASCII字符串“data”

Data子块

40

4

Subchunk2Size

NumSamples * NumChannels * BitsPerSample/8,指数据中的字节数

Data子块

44

*

Data

实际的声音数据

 

表2 Format Code 格式编码

格式编码

预处理符号

数据

0x0001

WAVE_FORMAT_PCM

PCM

0x0003

WAVE_FORMAT_IEEE_FLOAT

Ieee float

0x0006

WAVE_FORMAT_ALAW

8bits ITU-T G.711 A-law

0x0007

WAVE_FORMAT_MULAW

8-bit ITU-T G.711 u-law

0xFFFE

WAVE_FORMAT_EXTENSIBLE

 

注意:

1)WAVE文件默认的字节顺序是小端顺序,若是大端顺序用RIFX代替RIFF标识

2)取样数据必须是偶数字节

3)8位取样数据被存储为无符号数,从0到255.16位的取样数据被存储为补码,从-32768到32767

4)在wave数据流中可能有添加的子块。每一个子块有char SubChunkID[4],unsigned long SubChunkSize和SubChunkSize字节的数据

5)RIFF代表Resource Interchange File Format

转自:http://blog.csdn.net/foxwit/article/details/5802389

最新文章

  1. weui 搜索框
  2. PE文件格式 持续更新ing
  3. Bestcoder round #65 && hdu 5593 ZYB's Tree 树形dp
  4. 解决Unable to locate Kerberos realm
  5. 几种进入mysql的方法
  6. 选择排序算法Java与Python实现
  7. 关于Merge的整理--AndroidScreenSlidePager开源库中用到的
  8. Windows7服务无法启动的解决
  9. bresenham算法的FPGA的实现1
  10. vue框架-学习记录
  11. Servlet之Request对象
  12. android 高斯模糊实现
  13. Ubuntu16 Nginx的安装与基本配置
  14. Jni OnLoad()和OnUnload()
  15. tsung压力测试——安装
  16. 【LeetCode】142. Linked List Cycle II
  17. java 高性能读模式(译)
  18. DRL 教程 | 如何保持运动小车上的旗杆屹立不倒?TensorFlow利用A3C算法训练智能体玩CartPole游戏
  19. gff/gtf格式
  20. 实验一:使用ADO.NET方式读数据

热门文章

  1. 每日英语:A Buying Guide to Air-Pollution Masks
  2. sql自动创建表并复制数据
  3. 九章面试题:Find first K frequency numbers 解题报告
  4. if __name__ == '__main__' 含义
  5. 【FindReport】图表快速部署开发
  6. 用nodejs的express框架在本机快速搭建一台服务器
  7. Java后台测试技巧
  8. jvm面试题
  9. How Not to Crash #3: NSNotification通知引起的崩溃
  10. [Linux]如何查看系统的Time Slice