|
    
  
|
顶楼
发表于 2006-12-24 22:49
| 只看该作者
[center]一 音频编码篇[/center]
) A+ R; w" H5 ^% w* i
7 `9 i6 @7 ^; I+ C* c% {0 D( k6 l
通常我们采用脉冲代码调制编码,即PCM编码。PCM通过抽样、量化、编码三个步骤将连续变化的模拟信号转换为数字编码。
8 U. J5 m. I @& S! t0 @. G: j7 @
1、什么是采样率和采样大小(位/bit)?
' m! [1 F' d3 T$ z& x6 W' U+ j+ W( `2 w2 V
频率对应于时间轴线,振幅对应于电平轴线。波是无限光滑的,弦线可以看成由无数点组成,由于存储空间是相对有限的,数字编码过程中,必须对弦线的点进行采样。采样的过程就是抽取某点的频率值,很显然,在一秒中内抽取的点越多,获取得频率信息更丰富,为了复原波形,一次振动中,必须有2个点的采样,人耳能够感觉到的最高频率为20kHz,因此要满足人耳的听觉要求,则需要至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。我们常见的CD,采样率为44.1kHz。光有频率信息是不够的,我们还必须获得该频率的能量值并量化,用于表示信号强度。量化电平数为2的整数次幂,我们常见的CD位16bit的采样大小,即2的16次方。采样大小相对采样率更难理解,因为要显得抽象点,举个简单例子:假设对一个波进行8次采样,采样点分别对应的能量值分别为A1-A8,但我们只使用2bit的采样大小,结果我们只能保留A1-A8中4个点的值而舍弃另外4个。如果我们进行3bit的采样大小,则刚好记录下8个点的所有信息。采样率和采样大小的值越大,记录的波形更接近原始信号。 2 f2 V `3 m+ r, y4 L0 u- l: p
/ R N4 c: o- ?# l0 i# o" g, N+ _/ E8 V) a0 L+ Z
2、有损和无损 % m/ h: e8 g' P& I7 S5 L
/ J2 l, L# L# s& ~' u$ N% J3 p
根据采样率和采样大小可以得知,相对自然界的信号,音频编码最多只能做到无限接近,至少目前的技术只能这样了,相对自然界的信号,任何数字音频编码方案都是有损的,因为无法完全还原。在计算机应用中,能够达到最高保真水平的就是PCM编码,被广泛用于素材保存及音乐欣赏,CD、DVD以及我们常见的WAV文件中均有应用。因此,PCM约定俗成了无损编码,因为PCM代表了数字音频中最佳的保真水准,并不意味着PCM就能够确保信号绝对保真,PCM也只能做到最大程度的无限接近。我们而习惯性的把MP3列入有损音频编码范畴,是相对PCM编码的。强调编码的相对性的有损和无损,是为了告诉大家,要做到真正的无损是困难的,就像用数字去表达圆周率,不管精度多高,也只是无限接近,而不是真正等于圆周率的值。
/ ~. }/ [$ j2 }" E* ^0 @0 e* l, [! Z
6 u! }' |7 @/ X- ~7 G, V g M5 E 3、为什么要使用音频压缩技术
, H) o" h' V* g/ m6 T$ j$ N+ X* U
( M0 r5 Q! s( @/ _ `( S6 d 要算一个PCM音频流的码率是一件很轻松的事情,采样率值×采样大小值×声道数bps。一个采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的数据速率则为44.1K×16×2 =1411.2 Kbps。我们常说128K的MP3,对应的WAV的参数,就是这个1411.2 Kbps,这个参数也被称为数据带宽,它和ADSL中的带宽是一个概念。将码率除以8,就可以得到这个WAV的数据速率,即176.4KB/s。这表示存储一秒钟采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的音频信号,需要176.4KB的空间,1分钟则约为10.34M,这对大部分用户是不可接受的,尤其是喜欢在电脑上听音乐的朋友,要降低磁盘占用,只有2种方法,降低采样指标或者压缩。降低指标是不可取的,因此专家们研发了各种压缩方案。由于用途和针对的目标市场不一样,各种音频压缩编码所达到的音质和压缩比都不一样,在后面的文章中我们都会一一提到。有一点是可以肯定的,他们都压缩过。 5 P5 ^- S9 p5 d* l( f* ?/ G
0 G" k6 n4 ^& L$ \5 @9 V( K0 s4 } k/ c! Y. D
4、频率与采样率的关系 / e0 `0 @$ q8 J' z' m, b& T {
) p( v j# U. J, e7 E: U, [) C
采样率表示了每秒对原始信号采样的次数,我们常见到的音频文件采样率多为44.1KHz,这意味着什么呢?假设我们有2段正弦波信号,分别为20Hz和20KHz,长度均为一秒钟,以对应我们能听到的最低频和最高频,分别对这两段信号进行40KHz的采样,我们可以得到一个什么样的结果呢?结果是:20Hz的信号每次振动被采样了40K/20=2000次,而20K的信号每次振动只有2次采样。显然,在相同的采样率下,记录低频的信息远比高频的详细。这也是为什么有些音响发烧友指责CD有数码声不够真实的原因,CD的44.1KHz采样也无法保证高频信号被较好记录。要较好的记录高频信号,看来需要更高的采样率,于是有些朋友在捕捉CD音轨的时候使用48KHz的采样率,这是不可取的!这其实对音质没有任何好处,对抓轨软件来说,保持和CD提供的44.1KHz一样的采样率才是最佳音质的保证之一,而不是去提高它。较高的采样率只有相对模拟信号的时候才有用,如果被采样的信号是数字的,请不要去尝试提高采样率。 ! q; D9 X( w% Q* B3 U. e
% E G; O6 G/ v3 N) N2 X3 D/ X 因为,根据耐奎斯特采样理论,你的采样频率必须是信号最高频率的两倍。例如,音频信号的频率一般达到20Hz,因此其采样频率一般需要40Hz。
$ x1 U1 T: _: T: T' o , w, n4 c" o( @" D
而人耳收听的范围只能到23Khz以下,所以CD的采样率才是44.1Khz。22Khz×2=44Khz,考虑到一定的余量采用44.1Khz。7 l6 h9 v4 [" X0 b. T1 o3 |: H: m0 H
1 r+ y$ r; c1 Q* [& @, {5 o; q
2 r! d* h' u' D6 d. P* V/ |5 F7 w" t 5、流特征 9 D) x, B) `; t' H: [
r; I% \; S8 |% c& q6 D; ?1 q 随着网络的发展,人们对在线收听音乐提出了要求,因此也要求音频文件能够一边读一边播放,而不需要把这个文件全部读出后然后回放,这样就可以做到不用下载就可以实现收听了。也可以做到一边编码一边播放,正是这种特征,可以实现在线的直播,架设自己的数字广播电台成为了现实。 0 n- W5 M d6 k, B5 h/ p. `9 `: [
! m8 ~) p# G" I: g( F4 W3 B) |$ i6 _& K
* s, }( W. Y f3 P7 I$ V! N [center]WAVE文件的编解码器[/center]
, s+ O: o* M5 K6 N8 Z T' F
@& W: F3 [) a6 G" A% r+ d- E! w4 |& X4 c4 n
WAV文件格式是一种由微软和IBM联合开发的用于音频数字存储的标准,它采用RIFF文件格式结构,非常接近于AIFF和IFF格式。多媒体应用中使用了多种数据,包括位图、音频数据、视频数据以及外围设备控制信息等。RIFF为存储这些类型的数据提供了一种方法,RIFF文件所包含的数据类型由该文件的扩展名来标识,能以RIFF文件存储的数据包括: P0 h) d; g( S1 O! q
( C- v& C; ]4 h$ q" _
# 音频视频交错格式数据(.AVI)
. u2 f* o X$ c& ^4 i$ E2 @2 |. n; y' p9 d# Y3 G8 `
# 波形格式数据(.WAV)6 S. J! G6 T7 d* `1 `% ] ^
7 R6 |" J& Z- R
# 位图格式数据(.RDI)$ B" D4 s$ w) A$ Z7 l: p
( }# A$ R! B5 p0 B6 U # MIDI格式数据(.RMI)2 t6 R5 C$ l6 L9 l2 J
4 E, ?# a- I6 d9 F' e d
# 调色板格式(.PAL)
' d) H( G! S5 B- s9 B: H1 O* o* H1 N9 B0 L: Z
# 多媒体电影(.RMN)
" L; U4 m/ d; v6 m& E |6 Q9 P4 q
- L+ H, O) a; P9 ?" Q& F5 S" S' ] # 动画光标(.ANI)% y0 w3 N! u; T, u+ e4 h
; N9 @1 M2 H, W # 其它RIFF文件(.BND)" {0 m# u% X$ x+ J& C
% w" r4 p2 k/ S5 D$ d7 k. l- k, O& f0 |/ {+ z
RIFF是一种含有嵌套数据结构的二进制文件格式,每个数据结构都称为因一个chunk(块)。Chunk在RIFF文件中没有固定的位置,因而偏移量不能用于定位域值。一个块中的数据包括数据结构、数据流或其它组块(称为子块)等,每个RIFF块都具有如下结构:: s8 Q' I) G3 Y
! T- t6 ^2 D% e$ I typedef struct _Chunk
7 N4 |7 y+ C0 G, M% B! r1 T
6 w" S* M9 q# [7 i% s' A {4 |0 _* }5 @* x+ J4 ?3 i
9 g; q) f8 I4 d) D& o DWORD ChunkId; /*块标志*/" U- T; Z, E) m" t, K
3 r1 `5 b! F+ K! i DWORD ChunkSize; /*块大小*/5 G6 Y) T* o( e' W! Z7 ^
7 l, b( |' O4 h3 c( G BYTE ChunkData[ChunkSize]; /*块内容*/, N* q8 \0 E+ d0 N
3 x% [% y) o4 f7 f
} CHUNK;* [) Z {+ G! A1 I! Q, B. o
4 R. k' J' N$ P! v ChunkId由4个ASCII字符组成,用以识别块中所包含的数据。字符RIFF用于标识RIFF数据块,间隔空格在右面是不超过4个字符的ID。由于这种文件结构最初是由Microsoft和IBM为PC机所定义,RIFF文件是按照little-endian字节顺序写入的,而采用big-endian字节顺序的文件则用‘RIFX’作为标志。
/ s5 S \6 o$ U' l5 {$ W
+ w2 V% W: G' e) ^- w ChunkSize(块大小)是存储在ChunkData域中数据的长度,ChunkId与ChunkSize域的大小则不包括在该值内。/ ^# E9 f h* X) ~
9 v4 E, |+ R( {1 A# E, i" F! e ChunkData(块内容)中所包含的数据是以字(WORD)为单位排列的,如果数据长度是奇数,则在最后添加一个空(NULL)字节。7 g5 X$ w {) I! a5 n' a. T) E
, Q% q" j2 T8 X% { 子块(Subchunk)与块具有相同的结构。一个子块就是包含在其它块内部的一个块,只有RIFF文件块‘RIFF’和列表块‘List’才能含有子块,所有其它块仅能含有数据。一个RIFF文件就是一个RIFF块,文件中所有其它块和子块均包含在这个块中。
8 K2 v' E% i0 b$ Z( K# L( W. S f) J) G9 G
WAV文件可以存储大量格式的数据,通常采用的音频编码方式是脉冲编码调制(PCM)。由于WAV格式源自Windows/Intel环境,因而采用Little-Endian字节顺序进行存储。: I/ p* v& o" `: x9 L3 X
# y: g, D; O- G& h& R6 h+ s
" z8 ` ~6 ~! O% i/ H( t# h( C
[center]脉冲编码调制[/center]
1 D6 E3 g" r6 |1 j+ M1 L6 t# Q- L
* k, }2 l- W/ Z& t Claude E.Shannon于1948年发表的“通信的数学理论”奠定了现代通信的基础。同年贝尔实验室的工程人员开发了PCM技术,虽然在当时是革命性的,但今天脉冲编码调制被视为是一种非常单纯的无损耗编码格式,音频在固定间隔内进行采集并量化为频带值,其它采用这种编码方法的应用包括电话和CD。PCM主要有三种方式:标准PCM、差分脉冲编码调制(DPCM)和自适应DPCM。在标准PCM中,频带被量化为线性步长的频带,用于存储绝对量值。在DPCM中存储的是前后电流值之差,因而存储量减少了约25%。自适应DPCM改变了DPCM的量化步长,在给定的信造比(SNR)下可压缩更多的信息。) z% z0 |5 ?5 K3 R/ Q2 Z. e
2 o6 h' k2 B) c1 Q6 L
+ p* U5 d0 R4 l1 o1 b0 i/ e& u: F
[center]共同的执行过程[/center]
0 q& a) M* H& ?' k5 H. z; P# [, X e2 ?# s
& E5 m4 Y! \+ o, N( x6 t- U5 ~
在对WAV音频文件进行编解码过程中,最一致的地方包括采样点和采样帧的处理和转换。一个采样点的值代表了给定时间内的音频信号,一个采样帧由适当数量的采样点组成并能构成音频信号的多个通道。对于立体声信号一个采样帧有两个采样点,一个采样点对应一个声道。一个采样帧作为单一的单元传送到数/模转换器(DAC),以确保正确的信号能同时发送到各自的通道中。) u o4 E: {9 F; H) d0 m
$ Q" {, V( y5 l, s4 \+ y% Q
7 J6 J: G% Z' k4 F j [center]WAVE音频格式的优缺点[/center]
/ z' G! {8 [9 q5 n. W1 \ O: Y7 f7 b- n h9 U" q' O* h
" V- w7 @: Y! U7 g WAV音频格式的优点包括:简单的编/解码(几乎直接存储来自模/数转换器(ADC)的信号)、普遍的认同/支持以及无损耗存储。WAV格式的主要缺点是需要音频存储空间。对于小的存储限制或小带宽应用而言,这可能是一个重要的问题。WAV格式的另外一个潜在缺陷是在32位WAV文件中的2G限制,这种限制已在为SoundForge开发的W64格式中得到了改善。
; b9 {: C) F5 S
7 \1 G0 G2 {- m6 \1 @. X[该帖子由作者于2006年12月29日 10:48:20最后编辑] |
|