本文总结声音的存储,对如下问题做出回答。

1.声音有哪些属性?

2.声音转换成电脑文件(wav/mp3)的过程是怎么样的?

3.PCM格式的音频文件和WAV格式文件的内容有什么差异?

声音是物体振动产生的声波。声音通过介质(空气、固体、液体)传入到人耳中,带动听小骨振动,经过一系列的神经信号传递后,被人所感知。

声音是一种波。物体振动时会使介质(如空气)产生疏密变化,从而形成疏密相间的纵波。

频率(音调):声音1秒内周期性变化的次数

人耳的听觉范围在20Hz-20kHz。 低频的声音沉闷厚重,高频的声音尖锐刺耳。 高于 20kHz的声音为超声波。

振幅(响度):声音的大小

有的时候,我们用分贝(dB)形容声音大小。值得注意的是,dB是一个比值,是一个数值,没有任何单位标注。(功率强度之比的对数的10倍)

电脑存储声音,也叫声音的数字化,是以二进制存储的。

用到的基本技术是脉冲编码调制技术,主要包括采样、量化、编码3个基本过程。

简化表述一下声音转换成电脑文件(wav/mp3)的过程:

声音的主要物理特征是频率和振幅,频率你可以理解为说话语速的快慢,而振幅你可以理解为说话语调的高低(注意这里声音的大小可以通过音量键调节,不属于计算机需要存储的物理特征之一),

1.采样:按频率间隔记录振幅高低,这叫采样。一次震动至少要有2个采样点。

2.量化:获取到的幅度值用数字量来表示,这叫量化。

3.编码:而我们计算机是用二进制来存储数据的,也就是0和1,将量化后的信息转成二进制的0和1来存储,这就是编码。

采样,指把时间域或空间域的连续量转化成离散量的过程 。

对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成一串用1和0表示的二进制数字(数字信号)。

我们每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字。于是,我们就将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。

PCM文件:原始采样值的音频数据。 pcm 文件内容不包含频率,位数,以及声道数。要播放pcm文件需要知道采样的频率,位数,以及声道数。

WAV文件头中存有 格式块(fmt)和数据块(data),数据块中存有一个个的采样值。 wav 文件相当于在pcm文件的前面加上了格式信息。 是没有压缩过的音频文件格式。

PCM/WAV 文件中的音频数据都是模拟信号对应的采样值。

描述 PCM 音频数据的参数的时候有如下描述方式:

44100HZ 16bit stereo: 每秒钟有 44100 次采样, 采样数据用 16 位(2 字节)记录, 双声道(立体声)

22050HZ 8bit  mono: 每秒钟有 22050 次采样, 采样数据用 8 位(1 字节)记录, 单声道

48000HZ 32bit 51ch: 每秒钟有 48000 次采样, 采样数据用 32 位(4 字节浮点型)记录, 5.1 声道

44100Hz 指的是采样率,它的意思是每秒取样 44100 次。采样率越大,存储数字音频所占的空间就越大。

16bit 指的是采样精度,意思是原始模拟信号被采样后,每一个采样点在计算机中用 16 位(两个字节)来表示。采样精度越高越能精细地表示模拟信号的差异。

Stereo 指的是声道数,也即采样时用到的麦克风的数量,麦克风越多就越能还原真实的采样环境(当然麦克风的放置位置也是有规定的)。

多媒体文件格式(五):PCM / WAV 格式

多媒体文件格式(五):PCM / WAV 格式 - 灰色飘零 - 博客园

一文看懂音频原理 - 哔哩哔哩

音频文件在计算机中是怎么存储的?逻辑结构是怎么样的? - 知乎

以PCM/WAV为例,首先它是若干个chunk组成的,这个chunk是什么…你可以姑且认为它是个数据包或者说数据片段。chunk有个chunk头,包含一些诸如chunk字节数、声道、采样率、位深等信息。具体的结构可以稍微搜索一下。

chunk头后面跟随的按照头里描述的chunk字节数那么多的采样数据了。

首先声音本身是机械波,一个东西发声靠的是高频震动,如同我们的声带、乐器的弦和簧片;我们听到声音是通过鼓膜接收这样的震动,再转换成神经信号。如果我们需要纪录一段声音,本质上就是要纪录震动的形式,重放的时候只需要让一个振膜还原这个震动即可(耳机、音响)。以往的磁带、黑胶唱片等都是通过纪录模拟信号来纪录声音:振膜(mic)怎么动,磁头、刻针就怎么动,记录的信息是连续的。

但是数字信号是离散的,所以就需要采样。所谓采样,就是固定间隔时间测量一下振膜的位置并纪录。每秒钟采样的次数叫做采样频率。显然采样频率无限大时,离散的数字信号就成了连续的信号,然而我们不可能存储和采集频率无限大的数字采样。

所幸,我们可以利用插值的方法来尽可能恢复原信号,其中PCM就采取的最简单的线性插值。然而当采样频率不够高时,就可能存在不同的表达。人耳的一般响应频率为20Hz-22kHz,超出的部分一般人都听不见,因此可以忽略。由耐奎斯特定理(采样定理),采样频率比信号频率的两倍还高时,信号是可以完全还原的,因此对于大多数音频,其采样频率为44.1kHz和48kHz,这样就一定能够还原大多数人可听范围内的震动信号。

然后是采样深度。我们要把采样记录下来时,存储8位,就意味着我们只能将振膜位置划分成256份;如果是16位,则可以有65536份……当然,也还可以是个浮点数,不过其本质仍旧是按位决定信息量的。采样深度即每个采样占用的位数,深度越大,采样精度越高,还原效果越好。一般常用音频采取16位(2字节)纪录一个采样。

所以此时,假设是44.1kHz 16bit的双声道采样,意味着每秒有2*44.1k*2byte=176.4kbyte/s=1411.2kbps的数据,以两个字节为一个单元,左右声道交替纪录的整数数组。其它频率、声道、深度依此类推。

当然,这仅仅是PCM格式的纪录方法。别的编码形式各有不同,如mp3就记录的是采样经过离散傅立叶变换后的频域信号,并且丢掉了一些高频部分,以此达到压缩的目的;ADPCM则是由于声音信号一般比较平滑,通过纪录一个标准采样(关键采样)后跟随若干个变化量大形式存储……但是最终都是转换为类似PCM中的采样数据交给输出端的。

声音信息的表示: 硬核音频系列(一)—— 声音信息的表示 - 国际哥的独立博客

wav 格式研究: wav格式研究_quentinliu的专栏-CSDN博客

音频编解码: 音频编解码·格式篇(1)Wave PCM audio format(WAV)_麦克船长的技术笔记-CSDN博客

m4a 格式提取: M4A格式的ID3信息提取_WeroCPP的专栏-CSDN博客_m4a音频信息读取

不同的声音是怎么存储的啊? - 知乎

MMSP Lab - Paper Abstracts 1993

MP3 (.mp3)—Wolfram Language Documentation

https://zh.wikipedia.org/wiki/%E8%84%88%E8%A1%9D%E7%B7%A8%E7%A2%BC%E8%AA%BF%E8%AE%8A

在黑胶唱片上刻下波形的轮廓就形成了唱片的律动,当我们播放这张唱片时,唱针会跟随这个波形进行播放,这会使唱机匣产生电压变化,产生类似于声音的原始波形,最终驱动扬声器发声。由于扬声器音盆会跟随波形运动,所以它能复制最初压入黑胶唱片的波形。

麦克风会拾取音频信号并将其发送到模数转化器来将音频信号转化成数字信号。计算机接收到这一串数字信息后会对其进行处理

我们听不了数字信号,所以必须将录制或处理的数字数据转换回可以通过扬声器或耳机播放的模拟信号。 因此,就需要数模转换器将数字串转换回一系列电压电平。

我们还需要将这一系列离散电压平转换成连续的波形。 我们将低通滤波器与数模转换器配合使用,来对阶梯信号进行过滤,从而使尖锐的波形边缘变得平滑,之后我们就可以将转换好的模拟信号发送到放大器/扬声器组合中了。

将模拟量用数字编码表示,PCM 是一种常见方式。

模数转换说白了是化连续为离散,在理解 PCM 过程中,只要抓住「对时间划分」和「对数量划分」这两个维度就足够了,一般用 y 轴表示时间,x 轴表示数量(值大小)。

Logo

CSDN联合极客时间,共同打造面向开发者的精品内容学习社区,助力成长!

更多推荐