Wav文件也分好几个种类,相应的非数据信息存储在文件头部分,以下是各种WAV文件头格式。

表1 8KHz采样、16比特量化的线性PCM语音信号的WAVE文件头格式表(共44字节)
偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 10 00 00 00H(PCM) long int size1=0x10
14H 2 int 01 00H int fmttag=0x01
16H 2 int int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=声道数*量化数/8
22H 2 int 量化数 int bitpersamples=8或16
24H 4 char "data" char data_id="data"
28H 4 long int 采样数据字节数 long int size2=文长-44
2CH 到文尾 char 采样数据  

表2 8KHz采样、8比特A律量化的PCM语音信号的WAVE文件头格式表(共58字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ALAW) long int size1=0x12
14H 2 int 06 00H int fmttag=0x06
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x01
22H 4 long int 量化数 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58

表3 8KHz采样、8比特U律量化的PCM语音信号的WAVE文件头格式表(共58字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(ULAW) long int size1=0x12
14H 2 int 07 00H int fmttag=0x07
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x01
22H 4 long int 量化数 long int bitpersamples=8
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000000530700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58

表4 ADPCM语音编码后的WAVE文件头格式表(共90字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 32000000H(ADPCM) long int size1=0x32
14H 2 int 02 00H int fmttag=0x02
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=声道数*量化数/8
22H 2 int 量化数 int bitpersamples=4
24H 34 char 固定字节 char temp1
46H 4 char "fact" char wave_fact="fact"
4AH 8 char 0400000004930600H定 char temp2
52H 4 char "data" char wave_data="data"
56H 4 long int 采样数据字节数 lont int size2=文长-90
5AH 到文尾 采样数据    

表5 GSM语音编码后的WAVE文件头格式表(共60字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 14000000H(GSM) long int size1=0x14
14H 2 int 31 00H int fmttag=0x31
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 8 char 4100000002004001H定 char temp1
28H 8 char 6661637404000000H定 char temp2
30H 4 char 40 E2 05 00H定 char temp3
34H 4 char "data" char wave_data="data"
38H 4 long int 采样数据字节数 lont int size2=文长-60
3CH 到文尾 采样数据    

表6 SBC语音编码后的WAVE文件头格式表(共58字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(SBC) long int size1=0x12
14H 2 int 71 00H int fmttag=0x71
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x25
22H 4 long int 量化数 long int bitpersamples=16
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000076280400H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-59

表7 CELP语音编码后的WAVE文件头格式表(共58字节)

偏移地址 字节数 数据类型 内容 文件头定义为
00H 4 char "RIFF" char riff_id[4]="RIFF"
04H 4 long int 文件总长-8 long int size0=文总长-8
08H 8 char "WAVEfmt " char wave_fmt[8]
10H 4 long int 12000000H(CELP) long int size1=0x12
14H 2 int 70 00H int fmttag=0x70
16H 2 int 声道数 int channel=1 或2
18H 4 long int 采样率 long int samplespersec
1CH 4 long int 每秒播放字节数 long int bytepersec
20H 2 int 采样一次占字节数 int blockalign=0x0C
22H 4 long int 量化数 long int bitpersamples=16
26H 4 char "fact" char wave_fact="fact"
2AH 8 char 0400000060520700H定 char temp
32H 4 char "data" char wave_data="data"
36H 4 long int 采样数据字节数 lont int size2=文长-58

WAVEFORMATEX

typedef struct{WORD wFormatTag; WORD nChannels; DWORD nSamplesPerSec; DWORD nAvgBytesPerSec; WORD nBlockAlign; WORD wBitsPerSample; WORD cbSize; } WAVEFORMATEX;

具体参数解释如下:
wFormatTag:波形数据的格式,定义在MMREG.H文件中
nChannels:波形数据的通道数:单声道或立体声
nSamplesPerSec:采样率,对于PCM格式的波形数据,采样率有8.0 kHz,11.025kHz,22.05 kHz,44.1 kHz等
nAvgBytesPerSec:数据率,对于PCM格式的波形数据,数据率等于采样率乘以每样点字节数
nBlockAlign:每个样点字节数
wBitsPerSample:采样精度,对于PCM格式的波形数据,采样精度为8或16
cbSize:附加格式信息的数据块大小
概念2、定义设备头结构
WAVEHDR定义了指向波形数据缓冲区的设备头。

WAVEHDR

typedef struct { LPSTR lpData; DWORD dwBufferLength; DWORD dwBytesRecorded; DWORD dwUser; DWORD dwFlags; DWORD dwLoops; struct wavehdr_tag * lpNext; DWORD reserved; } WAVEHDR;

lpData:波形数据的缓冲区地址
dwBufferLength:波形数据的缓冲区地址的长度
dwBytesRecorded:当设备用于录音时,标志已经录入的数据长度
dwUser:用户数据
dwFlags:波形数据的缓冲区的属性
dwLoops:播放循环的次数,仅用于播放控制中
lpNext和reserved均为保留值
注意:上述结构体以及我们在程序中所使用到的“HWAVEIN””HWAVEOUT”结构体均是系统已经存在的,我们只需要对其进行赋值即可。

一、各种WAV文件头格式相关推荐

  1. wav文件头格式详解

    wav文件头格式详解 首先先声明几个变量: int file_size;      //文件大小 int channel;        //声道数 int sample_rate;   //采样率 ...

  2. g711音频封装wav文件头格式

    g711音频封装wav文件头格式 之前的客户需求,平台音频不支持g711格式,只支持wav/mp3,wav格式封装比较简单,只需要在原始音频数据上封装一层wav头就可以,在此记录一下该模块接口.参考开 ...

  3. Audio WAV文件头格式

    最近需要对多个WAV文件进行拼接,这就涉及到WAV文件头的创建和修改更新.之前的方式是利用第一个WAV的文件头,在最后全部拼接完后再修改文件头中的文件长度及音频数据长度.这个长度如果不修改,最后拼接的 ...

  4. java校验文件头格式_转自:java 文件格式二进制头文件校验

    转自:https://blog.csdn.net/useprogram/article/details/90637401 public class FileTypeUtil { private fin ...

  5. wav文件头损坏_Dex文件结构学习

    本文为看雪论坛优秀文章看雪论坛作者ID:iio 目 录 一.DexHeader 1. 理解DexHeader 2. 解析DexHeader 二.DexStringId 1. 理解DexStringId ...

  6. 位图(BMP)文件头格式及数据分析

    由于BMP文件有诸多格式,这里只以256色彩色位图为例来分析一下. 这个图是我自己用画图板做的,如下. 图1 BMP图 由于这里限制上传BMP文件,所以这个是JPG的.我的原始的BMP文件大小是200 ...

  7. 常见的文件头格式解析

    1.从Ultra-edit-32中提取出来的 附件:文件格式分析器 JPEG (jpg),文件头:FFD8FF PNG (png),文件头:89504E47 GIF (gif),文件头:4749463 ...

  8. Arcgis系列——gis读取ascii文件头格式

    (1)ascii头文件格式 参考中国气象数据网0.5°格点数据的文件格式,题头格式如下: NCOLS xxx NROWS xxx XLLCORNER xxx YLLCORNER xxx CELLSIZ ...

  9. wav文件头修复_标记管理音频文件工具:Yate for Mac

    Yate for Mac是一款Mac平台的音乐标签及管理工具,能够帮助我们轻松编辑音乐文件的元标签数据,支持MP3, M4A, MP4,AIFF, FLAC, WAV以及 DSF格式的音频文件,我们可 ...

最新文章

  1. 现代软件工程 第十二章 【用户体验】练习与讨论
  2. SpringBoot2.0之 个性化Banner
  3. 控制用户输入字符的个数
  4. Microsoft Teams:删除成员账户其历史聊天会发生什么?
  5. Exchange邮箱的创建与配置
  6. AngularJS开发指南
  7. 随想录(windows静态库和动态库)
  8. 十六进制数用int吗_你真的精通C语言吗?来解这十道C语言迷题试试吧!
  9. ajax怎么添加表单,使用Ajax动态地将表单添加到Django表单集
  10. 数据结构视频教程 -《[北风网]C#版数据结构与算法高级教程》
  11. CharSequence接口
  12. 免费机器视觉视频教程halcon-百度网盘
  13. 51单片机外设篇:LED点阵
  14. 用html制作一个网站的步骤,新手怎么做网页 新手如何制作一个网页
  15. Excel 按照某一列不同内容插入分页符号
  16. python鼠标绘图_python opencv入门 鼠标绘图(4)
  17. Color Constancy 色彩恒常性(1)White Patch Retinex
  18. ORACLE ASSETS 11i资产管理
  19. MATLAB远程桌面不可启动——解决方法
  20. 互联网数据挖掘与分析讲解

热门文章

  1. C语言实现老鼠走迷宫(附源码)
  2. Python实现生日蛋糕
  3. webpack打包出的js 如何引入到index.hml并输出
  4. java注释提醒_Java注解
  5. Win8风格界面效果
  6. J2EE之旅(入门)
  7. SpringBoot登录界面国际化,英文界面展示中文信息
  8. Cleanup has successfully processed the following paths
  9. 如何在 Linux 系统启用 UEFI 的 Secure Boot
  10. 选修课:唐宋词课堂鉴赏笔记02