音频应用

 找回密码
 快速注册

QQ登录

只需一步,快速开始

查看: 13982|回复: 1
收起左侧

[音频] WAVE音频格式

[复制链接]

4215

积分

2

听众

-107

音贝

音频应用新手发布

Rank: 3

积分
4215
发表于 2005-9-24 18:53:00 | 显示全部楼层 |阅读模式
数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。
) h2 v, |* A: s( c* i4 L5 WWAVE文件是计算机领域最常用的数字化声音文件格式之一,它是微软专门为Windows系统定义的波形文件格式(Waveform Audio),由于其扩展名为"*.wav"。
+ Q2 N: I9 a, Z, NWAVE是录音时用的标准的WINDOWS文件格式,文件的扩展名为“WAV”,数据本身的格式为PCM或压缩型。
: ]. \; r0 q5 ]; i. K9 kWAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。符合 PIFF Resource Interchange File Format规范。所有的WAV都有一个文件头,这个文件头音频流的编码参数。* `3 A0 e  [6 @% o1 n
8601a18b87d6277f631217ff21381f30e824fcf1.jpg
: e* g; Z& }: z
' o, T, l" B0 M" j" D! C4 [WAV对音频流的编码没有硬性规定,除了PCM之外,还有几乎所有支持ACM规范的编码都可以为WAV的音频流进行编码。
, r! H  T2 _7 m" ]& r7 H多媒体应用中使用了多种数据,包括位图、音频数据、视频数据以及外围设备控制信息等。RIFF为存储这些类型的数据提供了一种方法,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括:& M: k5 V1 J! L0 {( J
音频视频交错格式数据(.AVI) 、波形格式数据(.WAV) 、位图格式数据(.RDI) 、MIDI格式数据(.RMI) 、调色板格式(.PAL) 、多媒体电影(.RMN) 、动画光标(.ANI) 、其它RIFF文件(.BND)。
% {+ L; K' }# A  v% j# @5 e$ hwave文件有很多不同的压缩格式,所以,正确而详细地了解各种WAVE文件的内部结构是成功完成压缩和解压缩的基础,也是生成特有音频压缩格式文件的前提。' Q+ y% X' n2 u* j
最基本的WAVE文件是PCM(脉冲编码调制)格式的,这种文件直接存储采样的声音数据没有经过任何的压缩,是声卡直接支持的数据格式,要让声卡正确播放其它被压缩的声音数据,就应该先把压缩的数据解压缩成PCM格式,然后再让声卡来播放 [1]  。5 x/ N5 Z. P2 w! b5 B
内部结构
: F. u. w2 a4 p/ }注:由于WAV格式源自Windows/Intel环境,因而采用Little-Endian字节顺序进行存储。) R0 b: u2 K* q4 S9 a0 Q- c
WAVE文件是以RIFF(Resource Interchange File Format, "资源交互文件格式")格式来组织内部结构的。2 ~; F0 F) d! h$ ]. Z6 Q& i$ c# s
RIFF文件结构可以看作是树状结构,其基本构成是称为"块"(Chunk)的单元,最顶端是一个“RIFF”块,下面的每个块有“类型块标识(可选)”、“标志符”、“数据大小”及“数据”等项所组成。块的结构如下表所示:
% M( ?$ A! r" i$ O" R3 l5 F2 Y$ S4 r
  \; V8 t: O  t  `0 ?  P, q7 `# q6 \2 x3 ?
名称
0 i6 l% J1 x. _' O" N8 i
Size
# ^7 u" |* |$ s
备注
& a+ Y) \( u4 z! W5 A# s
块标志符
  c1 h( n& a; w  V
4
* m; `* O# `  `7 S
4个小写字符(如 "fmt ", "fact", "data" 等)/ Z! C9 w  s1 ]2 m. P
数据大小
' I. I& U2 A; @5 M* m% N; ?( X* y
4
9 `# K2 @" n2 p& g! T. B$ U
DWORD类型,表示后接数据的大小(N Bytes)8 f& ~9 T9 Y5 S4 `/ q1 b" p7 P
数据
' l) }$ |8 L2 z2 k% `6 d2 F
N) a8 W# V0 K* t, d
本块中正式数据部分
0 c  J5 P1 G7 t! n* I
上面说到的“类型块标识”只在部分chunk中用到,如 "WAVE" chunk中,这时表示下面嵌套有别的chunk。& i9 w9 {, n* \; {
当使用了 "类型块标识" 时,该chunk就没有别的项(如块标志符,数据大小等),它只作为文件读取时的一个标识。先找到这个“类型块标识”,再以它为起点读取它下面嵌套的其它chunk。
& Y% a  q1 ]/ F" P6 E" f每个文件最前端写入的是RIFF块,每个文件只有一个RIFF块。从 Wave文件格式详细说明 中可以看到这一点。/ I4 H+ }3 h" A2 p
非PCM格式的文件会至少多加入一个 "fact" 块,它用来记录数据(注意是数据而不是文件)解压缩后的大小。这个 "fact" 块一般加在 "data" 块的前面。9 l/ i2 W& {2 Y. D; p
WAVE文件是由若干个Chunk组成的。按照在文件中的出现位置包括:RIFF WAVE Chunk, Format Chunk, Fact Chunk(可选), Data Chunk。具体见下表:
5 N; ~: p6 i+ [& v, H-------------------------------------------
! s, `; x) X; M, m% q| RIFF WAVE Chunk |' z  o; a. i8 G& a/ [+ O
| ID = "RIFF" |
* r, z/ s' o2 _2 e% z| RiffType = "WAVE" |
) X9 d- @2 J# Y4 u-------------------------------------------1 i" S# x6 E5 g. m) _
| Format Chunk |& j5 R9 j. k4 v2 f8 \) A9 T
| ID = "fmt " |
; z, [/ |+ O( J% L  o-------------------------------------------  E% |9 \' r% k( i  K8 u2 z# J
| Fact Chunk(optional) |
; {/ N; Z, m% y& V. D3 v7 R| ID = "fact" |
8 y; D5 W* H2 n" B" H% v1 h  r( O-------------------------------------------
$ D6 g; d, h7 S$ b- p| Data Chunk |
# F- O+ D1 q1 f: Y, G+ B| ID = "data" |
; B- Z9 U" u4 U  k-------------------------------------------- x8 a0 c- v+ l5 z- C$ Q9 S
Wav格式包含Chunk示例
: e, `. k- T! N5 V* y% W  N9 `Fact Chunk9 h8 }; I" I5 i) u! M
=======================================- i4 n& j+ ^# F1 n, J* S5 X
| |所占字节数|具体内容 |4 o% c6 Y" v8 |% y$ N# p0 x5 ^
=======================================
8 g8 f3 H, H" i% n  l| ID | 4Bytes | "fact" |. [/ X1 E; J. I* d; i; w
---------------------------------------
  K. j+ I9 {/ q8 e1 x; x| Size | 4Bytes | 4 |
# H7 A5 c& i) O$ G2 E! v---------------------------------------: I! W; P! e* e$ \, I. B: i
| data | 4Bytes |解压后的音频数据的大小(B)|( z# m4 Z& ]. c) ]7 I

" Q' s9 M) Q. l别名 字节数 类型 注释% k0 s, k6 C) h# S6 n3 h! @1 |
ckid 4 char "RIFF" 标志, 大写
; \" G) G& S- P- y5 R) }cksize 4 int32 文件长度。这个长度不包括"RIFF"标志 和文件长度 本身所占字节, 下面的 子块大小也是这样。" C3 H5 {/ S% V9 _( O8 D' Y
fcc type 4 char "WAVE" 类型块标识, 大写。
' w+ O& R( H, P. Jckid 4 char 表示"fmt" chunk的开始。此块中包括文件内部格式信息。小写, 最后一个字符是空格。
1 J) |6 m% _7 ^- Z" fcksize 4 int32 文件内部格式信息数据的大小。
$ L# e. ~8 X. HFormatTag 2 int16 音频数据的编码方式。1 表示是 PCM 编码! J! S) O  X, U' _1 s
Channels 2 int16 声道数,单声道为1,双声道为2
- f; e& g/ a5 q* v) s7 YSamplesPerSec 4 int32 采样率(每秒样本数), 比如 44100 等9 Y/ V/ F5 ^- B
BytesPerSec 4 int32 音频数据传送速率, 单位是字节。其值为采样率×每次采样大小。播放软件 利用此值可以估计缓冲区的大小。
( J+ e8 c6 p: Y. f  MBlockAlign 2 int16 每次采样的大小 = 采样精度*声道数/8(单位是字节); 这也是字节对齐的最小单位, 譬如 16bit 立体声在这里的值是 4 字节。播放软件需要一次处理多个该值大小的字节数据,以便将其值用于缓冲区的调整。
3 h' n* ?4 t* ZBitsPerSample 2 int16 每个声道的采样精度; 譬如 16bit 在这里的值就是16。如果有多个声道,则每个声道的采样精度大小都一样的。& Y4 f1 U9 W7 K
[cbsize] 2 int16 [可选]附加数据的大小。- H, q7 U, f- i& F: c) X( V$ c9 B# Q6 U
[...] x
% s: A2 a1 g% B$ y[ckid] 4 char "fact".
- m' v; y5 H) z# T4 L1 l[cksize] 4 int32 "fact" chunk data size.
! f" k# q/ h2 Y. `- v- Z[fact data] 4 int32 解压后的音频数据的大小(Bytes).( E2 r3 b: X  Z% v+ m: n9 X
ckid 4 char 表示 "data" chunk的开始。此块中包含音频数据。小写。
3 K6 D, a5 g# k4 f1 R0 H) q: j2 k6 Vcksize 4 int32 音频数据的长度
. o6 V9 @% V$ ~0 j# ?* O$ S...... 文件声音信息数据(真正声音存储部分)3 k* H: {4 S! E: Y1 e$ ~6 W8 f
[......] 其它 chunk
欢迎厂家入驻,推文!免费!微信:yinpinyingyong

1万

积分

5

听众

-1954

音贝

音频应用注册会员

Rank: 4Rank: 4

积分
16326
发表于 2005-9-24 20:32:00 | 显示全部楼层
恭喜!WAVE音频格式
欢迎厂家入驻,推文!免费!微信:yinpinyingyong
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

音频应用搜索

QQ|小黑屋|手机版|音频应用官网微博|音频应用 ( 鄂ICP备16002437号 )

GMT+8, 2025-6-7 06:08 , Processed in 0.031503 second(s), 9 queries , Redis On.

Powered by Audio app

快速回复 返回顶部 返回列表