数字音频概览

转自:http://blog.csdn.net/fireseed/article/details/2186

 

相信您一定拥有一大摞的音频格式,但是您有了解过它的存储原理吗?如果您是这方面的专家,那我只能用“班门弄斧”来形容我现在的所做所为了。我写这篇文章是为了对这方面不太了解的朋友,当然不是每一个好的程序员都是Mr. Know-all,因此在我和一些网友在音频这方面的交流时常会造成一些误会,这也是我写这篇文章的初衷。当然,我不敢妄称专家,错漏之处在所难免,如有发现,敬请指教,在下洗耳恭听!

众所周知,声音是一种能量波,因此也有频率和振幅的特征。人耳能听到声音正是由于空气的振动令耳膜产生共振。振动的频率便是声波的频率,一般人耳的接受能力是20Hz到20000Hz,低于此泛围的叫次声波,高于此泛围的叫超声波。从音乐上来讲,不同的音调的频率是不一样,比如do、re、mi就是三种不同的频率。那么,不同的乐器发出相同音调的声音也就是频率一样,但我们却可以听出它们的不同,这又是怎么回事呢?这就是音色的差别,事实上相同音调不同乐器的声音之间的差别并不在频率上而是在波形上。

任何真实存在的声音,哪怕它只是蛐蛐儿的一声鸣叫,几乎都像是交响乐队的产品,它们似乎都是许多乐器同时演奏的结果。简单的说,一般的声音都等同于大大小小许多音叉各种正弦波合成的声音,它们就是复合波。实际上小提琴、大提琴、黑管、风琴、长笛、小号、定音鼓、钹、钗、沙锤等所以音质不同,就是因为它们的复合波的组成不同。比如人的心电图和脑电图就是完全不同的波形,同样频率的两组声波,周期相同,但在一个周期内的形状不一样,人耳听到的声音就会有很大的差别。

音箱中喇叭的发声原理其实很简单,就是通过电磁感应现象,将变化的电流转为盆膜的振动,从而产生空气的振动,接着人耳就会听到声音了。因此,只要有频率在人耳能够接受的范围之内并且足够强大的电流输入喇叭,人耳在足够近的声场距离内就可以得到声压,也就是听到声音。当然在多媒体有源音箱上除了喇叭还有运放(电流放大器)和功放(功率放大器)等器件,这些器件的大致作用就是将输入的电流和功率放大至喇叭可以发出声音的泛围内。电脑上的声卡的作用就是将CPU传来的数字音频数据经过缓冲、处理、分流、转换等操作再通过音频接口将载有模拟信号的电流传送到音箱,令其发声。

现在对于电声的原理因该比较清楚了,爱迪生发明留声机正是利用了这个原理,在唱片上刻下声波的曲线,再用唱针沿着波线划过产生振动,并用电流放大就可以放出声音了。这其实就是现在所说的模拟信号,也就是用一条光滑的曲线来表示声波,但计算机数据只能用1和0表示,那么计算机又该如何表示声波呢?下面我们将引入一个概念“采样率”。

在一秒钟之内对声波进行取点的数量叫做采样率。假设声波是一条沿X正方向沿伸的sin曲线,那么我们就可以沿着X方向上在曲线上取到不同的Y方向的值,这个值就叫做采样值。当然计算机能表示的数量是有限的,我们不可以在X方向上以无限小的增量对曲线进行采样,所以我们只能按照固定的间隔对波进行采样。采样的过程其实就是抽取声波中某时间点的振幅值,很显然,在一秒中内抽取得点越多,获取得振幅越多,对波形的描述就更加准确。,人耳能够感觉到的最高频率为20kHz,但人耳对这一频率的声音并不是很敏感,所以在一次振动周期中,至少有2个点的采样,就能基本满足听觉要求,也就是至少每秒进行40k次采样,用40kHz表达,这个40kHz就是采样率。

现在我们已经可以用数字来表示声波了,但这还够,我们还必须用一个固定大小的数值类型来表示每一个采样点的量化值,这个量化值叫做“位率”,就是通常说的“比特率”。为了方便计算机表示,位率被定为2的整数次幂,所以我们常见的CD是以每点16bit的采样点进行采样的,能表示的振幅是2的16次方,也就是-32768到32767。当然了,采样率越高越能重现波形,表现更准确的音色,但是不是位率越高越能表现更大的音量呢?事实上不是这样的,比如16位能表现最大32767的值,而8位最大表现255,但在计算机做位率的转换时,它会做一个映射,比如16位的值32767向8位转换时,它会被按比例缩小到255,这样的音量值实际上是一模一样的,只是位率越高越能体现更多的动态细节。

现在你也许注意到了一点,常见的采样率是48000、44100、22050、11025等,为什么不是50000、10000之类的呢?人耳的极限频率是20000hz,而采样率只要大于频率的2倍,人耳就能够几本分辩率出声音,所以对应于人耳的最大接受频率,同时也为了机算机方便表示,设定CD的标准采样率为44100,低于他的采样率按他的分倍数计算,大于的按48000的整数倍计算。

现在我们再来看一下音乐CD的存储方式。CD的全称是Compact Disk,是一种激光储存媒体,它用覆盖在圆形塑料片上的金属膜来存储数据。存在CD上的数据是以数字方式存储的,也就是0、1数据,每一位就是金属膜上的一个点。这些点是以同心圆的方式由里圈到外圈顺序排列的,点的凸凹带表0或1。当激光照射在盘面时,凸凹会有不同的反射,这样数据就被读了出来。音乐CD就是按照音轨的段落标签,将上面讲的数字波形数据刻到盘面上的。音频CD格式就是纯粹的数字音轨,没有校验,然而世界上不可能有完美的盘面,或多或少会有一些物理损坏,这就导致音频数据的丢失。但通常情况下这是微不足到的,很小的盘面划伤对于音乐数据的损伤连仪器都很难测出来,更不要说人耳了,但发烧友对完美的追求是无穷尽的。现在有一款软件在抓轨时就采用了重复读取求平均值的方式来提高精度,这款软件的名字叫做EAC。


当音乐CD的数据被读到电脑后,他的存储将成为一大难题,我们可以来算一下,44100Hz采样率16bit位率的立体声数据数据一秒钟有多少?44100Hz * (16 / 8)Byte * 2Channel = 176400字节,也就是0.17M,一分种就是10.5M,一般CD可以存70多分钟的音乐,那么一张CD算下来就是700多M,对于一般百余G的硬盘空间,这还是比较难以承受的,所以很多年以前有人就提出了有损压缩的办法,采用了类似于快速傅利叶变换的算法,对数据进行处理,可以把WAVE压缩到很小,一秒钟100-300K,这样就很好的解决了存储的问题,但这是以牺牲了一部分音质为代价的。

但随着近年来生活水平的提高、硬盘容量的提升,人们开始追求更加完美的音质。在这种情形下就诞生了一些无损压缩的音频格式,比如APE、FLAC、PAC、WV等。它们大多数的压缩原理有三:基于音频数据优化的游程编码、单纯哈夫曼和基于时实音量的位率压缩。APE就是采用了单纯哈夫曼和基于时实音量的位率压缩的综合算法,压缩率非常高,一般可以把WAVE压一半,但是复杂的算法也造成了编解码的效率低下。

在文章的最后,我向您推荐一款很好的音频播放软件Foobar2000,他是完全免费的。作者是Peter Pawlowski,也就是以前Winmap三人开发小组中的一员。他因为不满于Winamp只追求漂亮的界面和花而不实的功能,而离开了NullSoft公司,自立门户。在Foobar2000刚刚推出的时候就得到了广泛的关注,它定位于音响发烧友、电台导播、音频程序员这类专业用户,在提供对原始声音100%完美的重放的同时,又提供了可选的强大实时音频处理功能。另外它还支持非常多的专业音频格式,现在已经有非常多的用户了,而foobar2000也正式成为了一个组织,由于他的SDK完全开放,因此一批世界上最优秀的音频程序员都聚集在那里。当你第一次使用foobar2000时,你一定会被它的“丑陋”所吓倒,现在的任何一款媒体播放器的界面都会比他强太多太多,但foobar2000就是这样,它并不追求宠大的初级用户群,从诞生伊始,它的身份就是专业级的音频回放处理软件。它的主页是http://www.foobar2000.org,你可以去那里免费下载最新的版本,推荐下载special版,你会拥有更多的功能。

(全文完)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值