一:音频处理流程:
直播客户端的处理流程
- 音视频采集 (这个时候获取到的数据量非常大)
- 音视频编码 (对采集的数据进行编码,压缩成非常小的数据之后,在进行传输)
音频数据的流转
PCM
数据是最原始的音频数据,完全无损。
通过AudioRecord
,MediaRecorder
等API将模拟信号转为数字信号(PCM数组)
AudioRecord
: AudioRecord 类是 Android 系统提供的用于实现录音的功能类。https://developer.android.google.cn/reference/android/media/AudioRecordMediaRecorder
:https://developer.mozilla.org/zh-CN/docs/Web/API/MediaRecorder/MediaRecorder
音频格式:
- 运用不同的方法对音频数据进行压缩
- 无损压缩:
ALAC
、APE
、FLAC
- 有损压缩:
MP3
、AAC
、OGG
、WMA
音频数据流转图:
二:声音三要素
人类听觉范围
声音的三要素
- 音调: 音频的快慢,低 -> 高 , 低沉 -> 悦耳
- 音量: 振动的幅度
- 音色: 谐波
音调: 甲的频率 > 乙的频率
音量: 波动的峰值和谷值现对比较大的,音量就大。
如下图,甲的音量>乙的音量。
谐波:
- 自然界中产生的和音,由很多不同频率的声音组成。所有的变化都是在主频率上做的一个微调。
- 如下图:
绿色的走势与紫色的走势几乎相同。
黄色:一次谐波
蓝色: 二次谐波
不同的音色是由这些小的谐波所造成的(有的声音柔美,有的凶) - 假设我们在自然界中的声音是紫色的结果(和音)。绿色是它的基频(主频率),与黄色的频率和蓝色的频率混合在一起,产生了紫色的结果。
模数转换
声音波形如下 :
量化后的数字信息:
采样无限大的时候,实际上就是一个模拟信号。
采样率: 48k/s(基本完全还原了人的声音), 44.1k/s, 32k/s, 16k/s, 8k/s。
采样大小/位深: 一个采样用多少bit存放,精确程度,16bit被认为是专业音频领域里面最低的位深度标准,和44.1kHz的采样率一样。
声道数: 单声道,双声道,多声道(电影院)。
码率计算: PCM音频流的码率:采样率 x 采样大小 x 声道数
例如:采样率为44.1KHz,采样大小为16bit,双声道的PCM编码的WAV文件,它的码率为:
44.1K * 16 * 2 = 1411.2Kb/s
这么大的码流,显然是无法在网络上传输的,因此还需要压缩。
采样结果为十进制,还需要转为二进制。如下图:
二进制方波图:
音频原始数据
音频原始数据格式:
PCM
(纯的音频数据,里边的每一个数据都有一定的含义,但和文件格式没有关系)WAV
(媒体格式,既可以存储原始数据PCM(大多数情况下),也可以存储压缩数据。他其实是在PCM数据上套了一个头,头里包含了一些基本信息,便于播放器使用这些参数去播放)
WAV文件头格式如下图:
分为三部分:
- 第一部分: 一个"
RIFF
"字符串,数据块的大小,格式;
Format
为data
,就表示后面是真正的数据,Format
为fmt
,就表示后面是解释data
数据的信息。 - 第二部分:
NumChannels
:声道数SampleRate
:采样率BitsPerSample
:每个采样的位深Subchunk1Size
:整个绿色部分的大小AudioFormat
: 如果为0100就表示是PCM数据ByteRate
: 采样率的字节数BlockAlign
:块按几个字节对齐,一般为偶数
前三个为头部最关键的信息:声道数,采样率,每个采样的位深。
- 第三部分:橙色为数据部分。
WAV数据格式示例如下图: