美文网首页
《音频文件前世今生和衍生技术原理》

《音频文件前世今生和衍生技术原理》

作者: 天之痕121 | 来源:发表于2020-05-31 12:25 被阅读0次

    前言:计算机存储本质

    记住一点,计算机所有的文件均为二进制文件,包括文本文件(它是特殊的二进制文件,为什么特殊?因为它里面全部可直接翻译为字符),这些二进制文件就是一群0101集合(特定软件能打开就能看到),他们的读取与写入,过程完全相同:

    读入内存:文件-->二进制流-->-->按格式解码-->应用程序内存数据
    写出文件:应用程序内存数据-->按格式编码-->二进制流-->文件

    一直以来,我们对于文本文件的处理是比较好理解的,不论是前端的表格还是表单等参数,传到后端的本质都是字符串,所以很好理解,也很好处理。
    但对于音频,图像,视频等多媒体文件,我就一直不理解它们的本质。
    于是,我详细查询了网上资料,整合成如下几篇完整的《前世今生漫谈》

    图片文件前世今生和衍生技术原理
    https://www.jianshu.com/p/830202931e59
    补档:https://www.jianshu.com/p/3f31b72be674
    音频文件前世今生和衍生技术原理
    https://www.jianshu.com/p/2f097ab27051
    视频文件前世今生和衍生技术原理
    https://www.jianshu.com/p/aa78924ee4da

    音频文件前世今生漫谈

    一、音频文件的转化原理

    一直觉得音频文件是个神奇的东西,声音竟然可以自动转化为文件?它是怎么转的?
    其实,里面包含了好几步:
    1.物理信号---->电信号(也叫模拟电信号,或者叫模拟信号)
    其中物理信号就是如声音,压力,流速等连续信号
    转换过程,其实就是电流强弱变化,举两个例子就明白了:
    (1)声音转换:高中都学过感应电动势吧
    声音通过振动膜,产生机械振动,振动膜带动线圈在磁场中切割磁力线,线圈产生感应电动势,继而使得电压大小随时间发生连续变化,而这个电流大小就相当于电信号,从侧面反应了声音的波形信息。

    转换原理1.png
    (2)压电转换:
    施加一定的压力在某些材料上,会使得这些材料发生变形,变形会导致电阻 的变化,在定电压下,电流就会发生连续波动,从侧面反应了压力的强弱信息。可以用来保存压力,流速的信息

    2.模拟信号(电流或电压值)---->数字信号(1,0高低电平)
    纯模拟信号的时代已经过去,当今时代大部分都是用数字信号,为什么?一句话:数字信号抗干扰能力强(便于还原)、加密便捷、无噪声积累
    什么是模拟信号?什么是数字信号?你可以这么理解:
    给你一个完整的抛物线曲线,就是模拟信号,特点:连续值
    在这段抛物线上取100个连续间隔点,或者1000连续间隔点,然后把它们连线起来近似拟合成抛物线,就是数字信号,特点:离散值。其中这个点个数就叫做采样频率,频率越大,精度也就越高。
    模拟信号与数字信号之间的转化有专门的转换器,叫做A/D 转换器。原理你可以简单理解为:比如模拟信号的抛物线某2个点值为4和5,数字信号里就是两串0和1构成的数字。这就完成了转换。具体原理这里不深究。

    3.数字信号(1,0)----->编码----->以IO流存储成文件(即音频文件)
    到这一步已经好理解了,计算机存储文件本质就是二进制0,1存储,0代表低电平,1代表高电平。数字信号按照一定的规则编码后,以二进制IO流存储到文件中。、

    总结声音转化过程:
    物理信号(机械振动)--->模拟电信号(电压)--->数字信号(0,1)--->二进制音频文件
    反之,如果要把音频文件重新转化回声音放出来,原理差不多相个反。

    好,理解了音频文件转化的过程,那我们再来详细谈谈音频文件中重要的几个重要的参数与作用,我们以wav文件为例,为什么讲wav这个老古董?因为后面什么mp3,acc等格式都是基于wav格式发展出来的,wav是最接近模拟量的数字量,是最原始的数据。下面的几个参数,其他格式都会用到。
    参考博客:

    研究音频的本质
    http://www.360doc.com/content/11/0216/10/1189011_93448035.shtml
    采样率和采样位数的由来
    https://www.cnblogs.com/yongdaimi/p/10722108.html

    wav音频文件格式,全称WaveFom(波形文件),是微软公司专门为Windows开发的一种标准数字音频文件,最早于1991年8月出现在Windows3.1操作系统上,它有4个重要参数

    (1)采样频率F
    (2)量化位数B(采样位数B)
    (3)码率R
    (4)声道数(这个我就不解释了吧,双声道的话存储数据量翻1倍)

    (1)采样频率F:每秒采集音频数据的次数。
    4个参数中最重要的参数,是模拟信号转化为数字信号的桥梁,频率越高,音频保真度越高。

    计算机广泛配置的16位声卡,使用的采样频率通常包括11025Hz、22050Hz、44100Hz和48000Hz四种,其中,采用11025Hz采样的声音效果相当于电话声音的效果;采用22050HZ采样的声音效果相当于FM调频广播的效果;采用44100HZ采样的声音效果相当于CD声音的效果。

    小知识:在信号处理领域,有这么一个定理,叫奈奎斯特定理,你不用管这个定理是怎么来的,只需要知道:如果我们要精确的记录一个信号,我们的采样频率必须大于等于音频信号的最大频率的2倍,记住,是最大频率的2倍,也就是:

    F >= 2 * fmax

    而在wav格式里,F=44.1kHz
    我们知道,人耳的听音频率范围是20-20kHz,也就是说,如果我们要精确记录这个音频信号,采样频率最低起码是40kHz。虽然不知道为何wav定的采样频率为44.1kHz,不过,起码我们能确定的是44.1kHz这个采样频率,可以精确记录小于22.05kHz的音频信号,这个就足够了。

    (2)量化位数B(采样位数B):即采样样本描述精度
    先引用百度百科中的对量化一词的概念介绍

    百度百科:量化
    所谓量化,就是把经过抽样得到的瞬时值将其幅度离散,即用一组规定的电平,把瞬时抽样值用最接近的电平值来表示。

    量化.png

    首先你要理解一个概念,计算机二进制世界里,是无法准确描述一个数字的,只是说可以无限接近。比如:1/3这个无限循环小数,可以用0.333,0.3333等无限逼近,但如果你非要做到100%完全相同,二进制世界表示:我胡汉三就没遇到过这么憋屈的事情-。所以,用二进制值量化来表示现实世界中的一个数,就需要规定:精度。而所谓的量化位数,就是精度

    比如采样率F=44.1kHz,表示每秒钟采样44100个点,也就是横轴上每隔(1/44100)秒采集一个点;而采到的每个点都用一个数值来表示其幅度(电压)。假设整个音频信号的变化幅度范围是-5V~+5V(10V区间)的话:

    如果量化位数为8位,即2的8次方=256,则描述振幅的精度就是10V/256
    如果量化位数为16位,即2的16次方=65536,则描述振幅的精度就是10V/65536。
    量化位数越高,则精度越高,对于声音振幅的真实值也就越逼近与精确,更能保真。
    目前主流的声卡里量化位数一般为8位或16位。

    (3)比特率(也叫码率):即一秒内存储的信息量

    百度百科:
    声音中的比特率是指将模拟声音信号转换成数字声音信号后,单位时间内的二进制数据量,是间接衡量音频质量的一个指标.
    在数字多媒体领域,比特率是单位时间播放连续的媒体如压缩后的音频或视频的比特数量。在这个意义上讲,它相当于术语数字带宽消耗量,或吞吐量。

    比特率是怎么得来的?很简单

    比特率R = 采样频率F * 量化位数B * 声道数(一般为双声道2)
    R = F * B * 2
    如 R=44.1kHz16b2=1411.2kbps~=1411kbps

    小知识:那比特率(码率)是不是越大越好呢?

    对于从无损格式-->mp3等有损压缩格式而言,那么,码率越大是越好,码率越大,越能保真
    但对于从mp3等有损压缩格式--->其他有损压缩格式而言,码率毫无意义,比如你用一个128kbs的MP3的歌转成320kbps码率的MP3,音质不会有任何改善,只是徒增存储容量罢了。
    码率只是告诉你存了多少数据量,并不能反映这些数据量的精度好坏。

    介绍完了三个重要的参数,我们再来讲讲压缩,先一句话概括:
    不论是有损压缩还是无损压缩,基本原理都是在不影响文件的基本使用的前提下,只保留原数据中一些“关键点”,去掉了数据中的重复的、冗余的信息,从而达到压缩的目的。无损压缩就是能够100%还原回来,有损压缩则是不能100%还原。

    二、有损格式的压缩原理

    当我们了解wav格式三大参数的含义后,可能有人会疑惑,既然wav是最接近模拟量的数字格式,为啥还整来后面的有损格式和无损格式呢,直接wav多好啊。

    是的,直接wav很好,然而,他的码率太大了。1411kbps,啥米概念,就是说一个10秒的音频,居然要用到约3.44MB去存储!!!

    KBps和Kbps是完全不同的概念.所以写的时候最好写清楚.B是Byte的缩写,叫做字节.b是bit的缩写
    kbps含义是kbit/s,p是每的意思,1kbyte/s= 1KB/s =8kbit/s
    所以
    计算公式:3.44MB = 1411kbps * 10秒 * 2(双声道翻倍)/8*1024

    在过去存储技术不发达的年代,这个量太大了,实在无法接受。因此,必须压缩,必须把没用或者不重要的信息给去掉减少存储量。于是,有损格式诞生了。
    比如:对于人耳而言,我们接受的音频信号大部分都集中在中低频部分,高频部分我们相对不是那么敏感。所以直接把高频部分去掉,就减少了信息量。

    另一个,音频信号的本质是余弦波波谱,对于音频信号而言,在某个极短的时间区间内,相邻的几个记录点他们的取值范围是非常接近的,比如5个点,[0.45,0.446,0.461,0.45,0.447],我直接用一个平均值0.45代替表示,就变成了0.45(5)来记录,这样,原本需要用5个记录点,只需要1个记录点加一个倍数就够了,信息量就少了近5倍。还有其他的压缩方法,不过和上面两种原理差不多。通过各种手法,我们把不需要的信息去掉,把不重要的信息用近似值代替,从而达到有损压缩。

    同样一个10秒音频,经过有损压缩后,其码率值为320kbp,则大小才787KB!!!为wav格式的五分之一!!!
    用尽量少的数据,存储尽量多有用的信息,有损格式做到了!!!这也是为啥有损格式流行起来的原因。

    三、无损压缩格式的压缩原理

    随着时代发展,无损压缩出现了,它和有损格式有个共同点,就是压缩。不同点是,无损,可以100%还原回去。怎么做到的呢?同样举个例子,有9个记录点如下:[0.45,0.45,0.3,0.45,0.5,0.5,0.3,0.3,0.3]
    如果要无损压缩,只需要这么记录
    [0.45(2),0.3(1),0.45(1),0.5(2),0.3(2)]
    原先需要9个记录点,现在只需要5个记录点就可以了,而且先后顺序也完全清晰。这只是其中一种算法思路,也有其他不同算法,所以才有ape和flac等多种无损格式,但它告诉我们无损压缩是可行的。
    我们同样用码率这个参数做比较,一个10秒音频,经过无损压缩后,码率值为727kbps,大小为1.73MB。大概为wav的一半。

    最后提一下:
    音频的输入变成文件的过程
    模拟信号--》采样--》量化--》ADC--》数字信号--》编码--》数据IO流--》文件

    转换过程.png

    三种格式文件输出为音频的过程
    wav格式:wav数据流—》DAC—》滤波电路—》放大电路—》输出

    有损格式:有损压缩数据流—》解码—》DAC—》滤波电路—》放大电路—》输出

    无损压缩格式:无损压缩数据流—》解码—》DAC—》滤波电路—》放大电路—》输出

    尾言:需要认识掌握的几种常见音频格式

    音质从高到低排名:
    .cda:CD格式,无损压缩,文件大
    .wav(WaveForm):波形文件,几乎同.cda,无损压缩,文件大
    .aac(Advanced Audio Coding):高级音频编码,编码优秀,近似无损压缩,文件小巧
    .mp3(MPEG AudioLayer-3):动态图像专家组-音频层3号标准:有损压缩,文件小巧

    相关文章

      网友评论

          本文标题:《音频文件前世今生和衍生技术原理》

          本文链接:https://www.haomeiwen.com/subject/fkvlzhtx.html