Linux内核驱动ALSA音频框架与声卡驱动开发 - 第1节
1.1 音频信号基础
音频信号本质上是随时间变化的声波压力在介质(通常为空气)中的传播。在物理层面,声波是一种纵波,通过压缩和稀疏介质分子来传递能量。人耳可感知的频率范围大约为 20 Hz 至 20 kHz,这一范围被称为听觉频率范围。
1.2 数字音频原理
数字音频的核心是将连续的模拟音频信号转换为离散的数字表示,这一过程称为模数转换(ADC)。数字音频系统通过三个基本步骤完成转换:采样、量化和编码。
1.2.1 采样(Sampling)
采样是在时间轴上以固定间隔对模拟信号进行瞬时值提取的过程。根据奈奎斯特采样定理,采样频率必须至少为信号最高频率的两倍,才能无失真地重建原始信号。
| 采样率 | 常见应用 | 最高可表示频率 |
|---|---|---|
| 8 kHz | 电话语音 | 4 kHz |
| 44.1 kHz | CD 音频 | 22.05 kHz |
| 48 kHz | DVD / 专业音频 | 24 kHz |
| 96 kHz | 高解析度音频 | 48 kHz |
| 192 kHz | 录音室母带 | 96 kHz |
1.2.2 量化(Quantization)
量化是将采样得到的连续幅度值映射到有限个离散电平的过程。量化精度由位深度决定,常见位深度包括 8-bit、16-bit、24-bit 和 32-bit。位深度越高,动态范围越大,量化噪声越低。
1.3 PCM 编码
脉冲编码调制(Pulse Code Modulation, PCM)是数字音频最基础的编码格式。PCM 将模拟信号经过采样、量化后,每个采样值用固定位数的二进制码字表示。PCM 数据通常以线性或非线性(如 μ-law、A-law)方式存储。
1.3.1 PCM 数据格式
在 Linux ALSA 框架中,PCM 数据以帧(Frame)为单位组织。一帧包含所有声道在当前采样点的数据。常见的 PCM 格式包括:
- S16_LE:有符号 16 位小端序,最常用的格式
- S24_LE:有符号 24 位小端序,存储在 32 位容器中
- S32_LE:有符号 32 位小端序
- FLOAT_LE:32 位浮点数格式,用于高精度处理
// PCM 帧结构示例(双声道,16-bit 立体声)
// 帧大小 = 声道数 × 采样位宽 / 8
// 例如:2 声道 × 16-bit = 4 字节/帧
struct pcm_frame_stereo16 {
int16_t left; // 左声道采样值
int16_t right; // 右声道采样值
};
1.4 采样率与位深度
采样率和位深度是数字音频的两个核心参数,直接影响音频质量和数据量。
| 参数 | 定义 | 对质量的影响 | 对数据量的影响 |
|---|---|---|---|
| 采样率 | 每秒采集的样本数(Hz) | 决定频率上限,越高高频还原越好 | 线性增加:采样率×2 → 数据量×2 |
| 位深度 | 每个样本的比特数(bit) | 决定动态范围和信噪比 | 线性增加:位深×2 → 数据量×2 |
1.4.1 数据速率计算
数字音频的数据速率(比特率)计算公式为:
比特率 (bps) = 采样率 (Hz) × 位深度 (bit) × 声道数
示例:CD 质量立体声音频
比特率 = 44100 × 16 × 2 = 1,411,200 bps ≈ 1.41 Mbps
每分钟数据量 = 1.41 Mbps × 60 / 8 ≈ 10.6 MB
1.5 音频硬件架构
典型的音频硬件架构由多个功能模块组成,从模拟信号输入/输出到数字信号处理,最终与 CPU 和内存交互。在嵌入式系统中,音频硬件通常集成在 SoC 内部或通过外部编解码器(Codec)连接。
1.5.1 核心组件
- 音频编解码器(Audio Codec):负责 ADC/DAC 转换,通常包含模拟混音器、增益控制、滤波器等
- 数字音频接口(DAI):如 I²S、PCM、TDM 等,用于在 SoC 和 Codec 之间传输数字音频数据
- DMA 控制器:负责在内存和音频外设之间搬运 PCM 数据,无需 CPU 逐字节干预
- 时钟源(Clock):提供采样时钟和主时钟,保证音频同步
- 模拟前端(Analog Front-End):包括麦克风放大器、耳机放大器、线路输入/输出等
1.5.2 常见音频总线协议
| 协议 | 特点 | 典型应用 |
|---|---|---|
| I²S | 3 线制(BCLK、LRCLK、DATA),支持立体声 | 消费电子、嵌入式音频 |
| TDM | 时分复用,支持多声道(最多 16 声道) | 专业音频、车载音响 |
| PCM | 同步串行接口,支持单声道/立体声 | 蓝牙音频、数字无线通信 |
| AC'97 | 5 线制,包含 Codec 控制通道 | 老旧 PC 主板、早期嵌入式 |
| HDMI ARC | 通过 HDMI 线缆传输音频回传 | 电视、家庭影院 |
snd_soc_dai_driver 结构体来描述 DAI 的能力,包括支持的数据格式、时钟极性、帧格式等。
1.6 本章小结
本章建立了音频系统的基础知识框架。从模拟音频信号的物理特性出发,理解了数字音频的采样、量化和 PCM 编码原理,掌握了采样率和位深度对音频质量和数据量的影响,最后梳理了嵌入式音频硬件的典型架构和总线协议。这些概念是后续学习 ALSA 框架和声卡驱动开发的基石。