AOSP 15 音频基础概念通俗讲解
在 Android 的音频系统(AOSP 15 中)里,开发者经常会遇到一些"硬核"术语,比如 channel、sample rate、format、frame、period_size 等。刚接触时,这些名词很容易混淆。下面我们通过生活中的例子,把这些概念讲清楚。
1. 声道(Channel)
-
单通道(Mono):一个声道。例如,你用一个麦克风录下来的声音,只会有一条音轨。
-
立体声(Stereo):两个声道(左声道 + 右声道)。耳机里听音乐时,常常会感觉某些乐器在左边,某些声音在右边,这是立体声的效果。
👉 类比:
单声道就像你在一个房间里用单只麦克风录下所有声音;
立体声就像你在房间左右各放一个麦克风,能感受到空间感。
在 AOSP 中,常见的声道数有:
-
CHANNEL_OUT_MONO
(1 声道) -
CHANNEL_OUT_STEREO
(2 声道) -
甚至还有 5.1、7.1 多声道输出,用于影院或车机系统。
2. 采样率(Sample Rate)
定义:每秒钟对声音采样的次数。
常见的采样率:
-
44.1 kHz(CD 音质)
-
48 kHz(常见于视频和 Android 系统默认)
-
更高的有 96 kHz、192 kHz(发烧级音频)。
👉 类比:
采样率就像拍照的"帧率"。
-
如果你用每秒 10 张的帧率拍视频,动作会卡顿;
-
如果你用每秒 60 张的帧率,画面就很流畅。
音频也是一样,采样率越高,声音细节越多,但数据量也越大。
3. 格式(Format)
定义:每个采样点占用的位数。
常见格式:
-
16 bit(常见)
-
24 bit(高保真)
-
32 bit float(专业音频处理)
👉 类比:
采样率决定你"拍多少张照片",而格式决定你"照片的清晰度"。
-
16 bit = 普通相机拍摄
-
24 bit / 32 bit = 专业单反拍摄,能保留更多细节。
在 AOSP 中,用 AUDIO_FORMAT_PCM_16_BIT
等宏来表示。
4. 帧(Frame)
定义 :一个帧 = 一次采样的所有声道样本。
举例:
-
单声道(Mono):一帧就是 1 个采样点。
-
立体声(Stereo):一帧包含 左声道样本 + 右声道样本。
👉 类比:
帧就像一张"立体照片":
-
单声道 = 黑白照片
-
立体声 = 彩色照片(需要两个通道一起看才完整)
在 Android 的 HAL 层,音频数据处理时基本单位就是"帧"。
5. period_size 和 period_count
这两个概念和 DMA(Direct Memory Access,直接内存访问)有关,是音频驱动和硬件打交道时的重要参数。
-
period_size:一次 DMA 传输的数据量(单位通常是帧数)。
-
period_count:DMA 一次环形缓冲区里有多少个 period。
👉 类比:
想象你在工厂流水线上装瓶水:
-
period_size 就像一次流水线传送的瓶子数量。
-
period_count 就像传送带分成几段,每段传输完后都会"打个点",提醒工人检查。
在 AOSP 中:
-
period_size 决定 一次中断传输多少数据;
-
period_count 决定 缓冲区里能存多少次 period 。
通常二者配合起来决定 音频延迟 和 系统稳定性。
6. 举个完整的例子
假设我们在 Android 车机(AOSP 15)上播放音乐:
-
声道:2(立体声,左/右扬声器)
-
采样率:48000 Hz(每秒 48000 次采样)
-
格式:16 bit(每个采样点 2 字节)
-
一帧:立体声 → 左声道 2 字节 + 右声道 2 字节 = 4 字节
-
period_size:1024 帧(一次 DMA 传输 1024 帧 = 4096 字节)
-
period_count:4(DMA 缓冲区被分成 4 个 period,总缓冲区大小 = 4096 × 4 = 16 KB)
这样,音频驱动会每传输 1024 帧触发一次中断,系统就能有节奏地往缓冲区填数据,保证音乐连续不断。
7. 总结
-
Channel:声道数量(Mono / Stereo / 多声道)
-
Sample Rate:每秒采样次数(决定声音"流畅度")
-
Format:每个采样点的位数(决定声音"清晰度")
-
Frame:一次采样的所有声道样本(基本处理单位)
-
Period Size:一次 DMA 传输的帧数
-
Period Count:缓冲区包含多少个 period
这些参数最终决定了:
-
音质(采样率 + 格式)
-
空间感(声道数)
-
延迟 & 流畅度(period_size + period_count)
在 AOSP 15 的 Audio 系统中,这些概念贯穿 HAL(Audio HAL)、Framework(AudioFlinger)、以及 App 的播放录制接口,是理解 Android 音频系统的第一步。