Android音视频【八】音频基础

人间观察

今年应该不回家过年了,长这么大还真是一个人第一次在外过年,

前些文章讲了视频,我们开始音频。

音频的基础概念

开始介绍前,先看一个声音的波形图:


audio-demo.png

横轴是时间,纵轴为振幅,两个图像分别代表左右声道。由于声音频率较大,所以在图像中的信号不是“正弦”,而是实心的。

声音是一种波

声音是一种压力波,当敲击键盘或者撞击物体时,它们的震动会引起空气的震动,使空气产生疏密变化,由此就形成了一种声波。

声波的三要素

声波的三要素是频率、振幅、和波形,频率代表音阶的高低,振幅代表响度,波形代表音色。

频率 : 频率 越高,波长越短,低频声响的波长则越长,所以更容易越过障碍物,能量衰减就小,声音传播的就远。反之则会得到相反的结论。

振幅:用不同的力度敲击物体,它的声音大小不一样,它的能量也不一样,声音越大振幅越高。

波形/音色: 音色就是在同样的频率(音调)和响度(振幅)下,敲击键盘或者撞击物体是完全不同的。波的形状代表了声音的音色。

声音采集与存储

如何进行声音进行保存呢? 对声音的采样常用麦克风等设备将声音信号转换成电信号,再用模/数转换器将电信号转换成一串用1和0表示的二进制数字(数字信号)。每秒对声音采样上万次,获得上万个按照时间顺序排列的二进制数字,然后将连续变化不断的声音转化成了计算机可储存并识别的二进制数字。

为了将模拟信号数字化,需要进行:采样,量化,编码。

采样

首先要对模拟信号进行采样,所谓采样就是在时间轴上对信号进行数字化。根据奈奎斯特定理(也称采样定理),按比声音最高频率高 2 倍以上的频率对声音进行采样,对于高质量的音频信号,其频率范围在 20Hz ~ 20kHz ,所以采样频率一般为 44.1kHz ,这样就保证采样声音达到 20kHz 也能被数字化,从而使得经过数字化处理之后,人耳听到的声音质量不会被降低。而所谓的 44.1 kHz 就是代表 1 s 会采样 44100 次。

常见的采样有:8khz,22.1khz ,44.1khz,48khz等

量化

每个采样又该如何表示呢?进行量化。量化是指在幅度轴上对信号进行数字化。量化位数越大,声音的质量越高。常用的量化位数有8位、16位和32位。量化位数指用几位二进制数来存储采样获得的数据。量化位数为8即指用8位二进制数来存储数据,如0001011

比如用 16 bit 的二进制信号来表示声音的一个采样,而 16 bit 所表示的范围是 [-32768 , 32767] , 共有 65536 个可能取值,因此最终模拟的音频信号在幅度上也分为了 65536 层。

编码

编码,就是按照一定的格式记录采样和量化后的数字数据,比如顺序存储或压缩存储等等。

这里涉及了很多种格式,通常所说的音频的裸数据就是 PCM (Pulse Code Modulation) 数据。描述一段 PCM 数据一般需要以下几个概念:量化格式(sampleFormat)、采样率(sampleRate)、声道数 (channel) 。以 CD 的音质为例:量化格式为 16 bit (2 byte),采样率 44100 ,声道数为 2 ,这些信息就描述了 CD 的音质。而对于声音的格式,还有一个概念用来描述它的大小,称为数据比特率,即 1s 时间内的比特数目,它用于衡量音频数据单位时间内的容量大小。而对于 CD 音质的数据,比特率为多少呢? 计算如下:

44100 * 16 * 2 = 1378.125 kbps

那么在一分钟里,这类 CD 音质的数据需要占据多大的存储空间呢?计算如下:

1378.125 * 60 / 8 / 1024 = 10.09 MB

当然,如果 sampleFormat 更加精确 (比如用 4 个字节来描述一个采样),或者 sampleRate 更加密集 (比如 48kHz 的采样率), 那么所占的存储空间就会更大,同时能够描述的声音细节就会越精确。存储的这段二进制数据即表示将模拟信号转为数字信号了,以后就可以对这段二进制数据进行存储,播放,复制,或者进行其它操作。

关于这3个过程,可以看下这篇文章,图形表示采样,量化,编码的过程更容易理解。https://www.bilibili.com/read/cv1771961/

所以说:

1)采样:在时间轴上对信号数字化;

2)量化:在幅度轴上对信号数字化;

3)编码:按一定格式记录采样和量化后的数字数据。

声道

声道(sound channel)是指声音在录制或播放时在不同空间位置采集或回放的相互独立的音频信号,所以声道数也就是声音录制时的声音源数量或者回放时相应的扬声器数量。

常见的有:单声道,立体声道,4声道,5.1声道,7.1声道等。在移动端一般是单声道,立体声道。

音频编码

上面提到了 CD 音质的数据采样格式,曾计算出每分钟需要的存储空间约为 10.09 MB ,如果仅仅是将其存储在光盘或者硬盘中,可能是可以接受的,但是若要在网络中实时在线传输的话,那么这个数据量可能就太大了,所以必须对其进行压缩编码。压缩编码的基本指标之一就是压缩比,压缩比通常小于 1 。压缩算法包括有损压缩和无损压缩。无损压缩是指解压后的数据可以完全复原。在常用的压缩格式中,用的较多的是有损压缩,有损压缩是指解压后的数据不能完全恢复,会丢失一部分信息,压缩比越小,丢失的信息就比越多,信号还原后的失真就会越大。根据不同的应用场景 (包括存储设备、传输网络环境、播放设备等),可以选用不同的压缩编码算法,如 PCM 、WAV、AAC 、MP3 、Ogg 等。

  • WAV 编码

WAV 编码就是在 PCM 数据格式的前面加了 44 个字节,分别用来存储 PCM 的采样率、声道数、数据格式等信息。

特点: 音质好,大量软件支持。

场景: 多媒体开发的中间文件、保存音乐和音效素材。

  • MP3 编码

MP3 具有不错的压缩比,使用 LAME 编码 (MP3 编码格式的一种实现)的中高码率的 MP3 文件,听感上非常接近源 WAV 文件,当然在不同的应用场景下,应该调整合适的参数以达到最好的效果。

特点: 音质在 128 Kbit/s 以上表现还不错,压缩比比较高,大量软件和硬件都支持,兼容性好。

场景: 高比特率下对兼容性有要求的音乐欣赏。

  • AAC 编码

AAC 是新一代的音频有损压缩技术,它通过一些附加的编码技术(比如 PS 、SBR) 等,衍生出了 LC-AAC 、HE-AAC 、HE-AAC v2 三种主要的编码格式。LC-AAC 是比较传统的 AAC ,相对而言,其主要应用于中高码率场景的编码 (>=80Kbit/s) ; HE-AAC 相当于 AAC + SBR 主要应用于中低码率的编码 (<= 80Kbit/s); 而新推出的 HE-AAC v2 相当于 AAC + SBR + PS 主要用于低码率场景的编码 (<= 48Kbit/s) 。事实上大部分编码器都设置为 <= 48Kbit/s 自动启用 PS 技术,而 > 48Kbit/s 则不加 PS ,相当于普通的 HE-AAC。

特点: 在小于 128Kbit/s 的码率下表现优异,并且多用于视频中的音频编码。

场景: 128 Kbit/s 以下的音频编码,多用于视频中音频轨的编码。

  • Ogg 编码

Ogg 是一种非常有潜力的编码,在各种码率下都有比较优秀的表现,尤其是在中低码率场景下。Ogg 除了音质好之外,还是完全免费的,这为 Ogg 获得更多的支持打好了基础,Ogg 有着非常出色的算法,可以用更小的码率达到更好的音质,128 Kbit/s 的 Ogg 比 192kbit/s 甚至更高码率的 MP3 还要出色。但是目前因为还没有媒体服务软件的支持,因此基于 Ogg 的数字广播还无法实现。Ogg 目前受支持的情况还不够好,无论是软件上的还是硬件上的支持,都无法和 MP3 相提并论。

特点: 可以用比 MP3 更小的码率实现比 MP3 更好的音质,高中低码率下均有良好的表现,兼容性不够好,流媒体特性不支持。

场景: 语言聊天的音频消息场景。

压缩编码的原理实际上就是压缩调冗余信号,冗余信号是指哪些不能被人感知到的信号,包含人耳听觉范围之外的音频信号以及被屏蔽掉的音频信号等,这些冗余信息进行编码处理。

一般在音视频通话,直播中,短视频,以及大部分的视频都是用aac编码。

总结

本篇主要是介绍了音频的一些基础知识和概念,对于后续学习音频的编解码有帮助,而不会一脸懵。

备注

文章都是理论基础,为了保证概念的准确性,借鉴复制了一些书籍和文章的描述。学习这些理论还是要权威些。

书籍:音视频开发指南

你可能感兴趣的:(Android音视频【八】音频基础)