计算机中计算音频文件大小的小研究

1/5/2021 SpeechComputer Science

本文章从“计算机网络”课程中的内容衍生而来(模拟信号及数字信号)

# 前言

最近因为上了计算机网络课,所以学到了一些关于通信的知识。老师上课的时候介绍一下在电脑中一首歌的存储大小是怎么算出来的——设该歌曲的存储大小为M,它的比特率为P(在歌曲文件的属性中可以看到),歌曲时长为T,则有:

M = P * T

# 探索

虽然比特率P是歌曲固有的属性,但是它的大小是由什么决定的?老师也说了是由于声音在传输的时候是由模拟信号传输的(波形信号),但由于计算机的存储方式只能是二进制,因此需要将模拟型号通过数字信号编码才能传输到计算机上。课件上提供了转换的三个步骤:

  1. 采样:按一定间隔对语音信号进行采样(这里的采样频率,是决定比特率的一项)
  2. 量化:把每个样本舍入到最接近的量化级别上(这里的量化级别,是决定比特率的一项)
  3. 编码:对每个舍入后的样本进行编码(这里的编码指PCM编码,又称脉冲调制)

sound

语音模拟信号采样图例

上图中的PCM输出即是我们电脑中一段语音的存储方式。

# 计算比特率

让我们回归到计算比特率的正题上,因为比特率的大小取决于我们采样的频率和量化样本的级别,因为语音信号的频率一般不大于4KHz(最高频率为4KHz),根据香农定理,当我们的采样频率大于最高频率的两倍的话(即8KHz),就能够完整地恢复出原始的语音信号。 那我们取采样频率f = 8KHz, 样本量化级别取上图的3位(3bit),那么有:

P = 8kHz * 3bit = 24kbps

这里我们的得出的比特率明显小于我们平常听的MP3格式的比特率(192kbps或320kpbs),那平常MP3格式的比特率是相对于我们的例子哪里变化了呢?

# 分析CD录制所采取的策略

根据查阅Wikipedia和相关资料,录像带记录声音时,一条带有3样本,每个样本一共有245行,每行又有60场频,因此正好有3x245x60=44100个场频,因此CD常用的采样频率为44.1KHZ,这是当时的CD制作巨头SONY和PHILIPS共同制定的。同时,因为人耳能够听到的声音的最高频率为2000HZ,因此44.1KHZ大于两倍的人耳所能听到的声音的最高频率。

除了44.1KHZ的采样频率外,CD的量化位取为16bit,按道理来说,量化位取越大,所采样的结果越精确,但为什么选择16bit呢?因为更高的量化精度意味着更大的数据量,受限于当时光盘的存储能力,如果采取较高的量化精度,那么很难存储足够长的歌曲。以16bit/44.1KHz精度的信号为例,一个声道的位速(码率)就是:

16bit * 44.1KHz = 705.6Kbit/s

而双声道就是:

705.6 * 2 = 1411.2Kbit/s

则一段60分钟的音频需要的容量为1411.2 * 1000 * 3600 / (8 * 1024 * 1024) = 605.6MB,大致为当时一张CD的容量。

# 结束语

然而,随着时代的发展,一张CD能够存放越来越多的数据,因此目前的HDCD的采样频率及采样精度为88.2KHZ(双声道)和24bit(因此码率大概为2116kbps,这是无损音乐量级),甚至32bit 192KHz。但考虑到有的听众需要兼顾歌曲容量大小及音质,因此诞生了压缩后的使用320kbps的MP3格式音乐。