Android 音频开发入门知识

一 前言

时至今日,短视频 App 可谓是如日中天,一片兴兴向荣。随着短视频的兴起,音视频开发也越来越受到重视。今天就来介绍下音频相关的基础知识。

二 基础概念

2.1 采样率(sample rate)

采样就是把模拟信号数字化的过程,不仅仅是音频需要采样,所有的模拟信号都需要通过采样转换为可以用0101来表示的数字信号,示意图如下所示:
Android 音频开发入门知识_第1张图片
蓝色代表模拟音频信号,红色的点代表采样得到的量化数值。

采样频率越高,红色的间隔就越密集,记录这一段音频信号所用的数据量就越大,同时音频质量也就越高。

根据奈奎斯特理论,采样频率只要不低于音频信号最高频率的两倍,就可以无损失地还原原始的声音。

通常人耳能听到频率范围大约在20Hz~20kHz之间的声音,为了保证声音不失真,采样频率应在40kHz以上。常用的音频采样频率有:8kHz、11.025kHz、22.05kHz、16kHz、37.8kHz、44.1kHz、48kHz、96kHz、192kHz等。

2.2 声道数(channels)

由于音频的采集和播放是可以叠加的,因此,可以同时从多个音频源采集声音,并分别输出到不同的扬声器,故声道数一般表示声音录制时的音源数量或回放时相应的扬声器数量。

2.3 位深度(bit depth)

在音频采样中,每个采样的 amplitude 用二进制数字编码。这个编码的分辨率就是位深度,也叫比特深度。把数据存储成二进制,意味着如果用 n 个二进制位来存储每个幅度值,总共可以表示的数值数量为 2 的 n 次方-1。1 bit 代表采样的值: 0 或 1。如果是 2 bit,采样值范围就是 0, 1, 2, 3。2 的 16 次方是 65536,所以 16 bit 的采样深度分辨率是 -32768~32768。位数越多,表示得就越精细,声音质量自然就越好,而数据量也会成倍增大。

Android 音频开发入门知识_第2张图片
我们常见的16Bit(16比特),可以记录大概96分贝的动态范围。那么,您可以大概知道,每一个比特大约可以记录6分贝的声音。同理,20Bit 可记录的动态范围大概就是120dB;24Bit 就大概是144dB。

2.4 脉冲编码调制(PCM)

通用的低级别的数字音频编码。音频信号被采样,然后根据位深在合适的范围内被量化成离散值。比如,对于16位的 PCM,采样值是介于-32768到+32767之间。

2.5 比特率(bit rate)

比特率,也叫码率,是指在一个数据流中每秒钟能通过的信息量,也可以理解为:每秒钟用多少比特的数据量去表示。原则上,音频位速越高质量越好。单位常为 kbps(kilo bits pre second)。音频数据的比特率文件大小计算公式如下:

Bit rate = sample rate * bit depth * channels

Size in bits = sample rate * bit depth * channels * length of time

所以,Sample rate 和 Bit depth 会影响 Bit rate 和文件大小。

2.6 音频帧(frame)

音频跟视频很不一样,视频每一帧就是一张图像,而从上面的正玄波可以看出,音频数据是流式的,本身没有明确的一帧帧的概念,在实际的应用中,为了音频算法处理/传输的方便,一般约定俗成取2.5ms~60ms为单位的数据量为一帧音频。

假设某通道的音频信号是采样率为8kHz,位宽为16bit,20ms一帧,双通道,则一帧音频数据的大小为:

int size = 8000 x 16bit x 0.02s x 2 = 5120 bit = 640 byte

2.7 Packet

Packet 是一个或者多个连续 frame 的集合。对于一个给定的音频数据格式,Packet 定义了定义了最小有意义的 frame 集合,并且是最小的可测量时间单位。
下图展示了 Packet、Frame 和 Sample 的关系:
Android 音频开发入门知识_第3张图片
在未压缩的音频中,一个 Packet 只有一个 frame;在压缩的音频中,一个 Packet 是不可再分割的压缩数据块,例如在一个 AAC 格式的Packet中就包含了1024个采样帧。

三 常见编码模式

3.1 VBR(Variable Bitrate)

动态比特率,也就是没有固定的比特率,压缩软件在压缩时根据音频数据即时确定使用什么比特率,这是以质量为前提兼顾文件大小的方式,推荐编码模式。

3.2 ABR(Average Bitrate)

平均比特率,是 VBR 的一种插值参数。LAME 针对 CBR 不佳的文件体积比和 VBR 生成文件大小不定的特点独创了这种编码模式。ABR 在指定的文件大小内,以每50帧(30帧约1秒)为一段,低频和不敏感频率使用相对低的流量,高频和大动态表现时使用高流量,可以做为 VBR 和 CBR 的一种折中选择。

3.3 CBR(Constant Bitrate)

常数比特率,指文件从头到尾都是一种位速率。相对于 VBR 和 ABR 来讲,它压缩出来的文件体积很大,而且音质相对于 VBR 和 ABR 不会有明显的提高。

你可能感兴趣的:(Android,开发,android,音频编码解码)