引言
在计算机、嵌入式系统和音频设备中,PCM(Pulse Code Modulation,脉冲编码调制)是最基础的 音频数据格式。无论是 MP3、AAC 还是 FLAC,最终它们的 底层都是 PCM。
但 PCM 究竟是什么?它如何转换音频?在 Linux 声卡驱动(ALSA)中,它又是如何工作的?本篇文章将带你 彻底理解 PCM,让你不再对 PCM 感到陌生。
1. PCM 的基本概念
PCM 是一种 将模拟音频信号转换为数字音频信号 的方法。它的核心过程包括:
- 采样(Sampling)
- 量化(Quantization)
- 编码(Encoding)
让我们从一个 实际案例 讲解。
1.1 采样(Sampling)
采样就是每秒钟从模拟信号中取出多少个数值。采样率(Sample Rate) 用 Hz(赫兹)表示,例如:
- 44.1 kHz(CD 质量):每秒 44100 个采样点。
- 48 kHz(DVD 质量):每秒 48000 个采样点。
- 96 kHz(高解析音频):每秒 96000 个采样点。
📌 理解方式:
- 采样率越高,声音的还原度越好,但文件体积也更大。
1.2 量化(Quantization)
采样后,每个点的数值需要转换为离散的数字。
- 8-bit PCM(256 级别):每个采样点存储 0~255 之间的整数。
- 16-bit PCM(常见):每个采样点存储 -32768~32767 之间的整数。
- 24-bit PCM(专业音频):每个采样点存储 -8388608~8388607 之间的整数。
📌 理解方式:
- 位深度(Bit Depth)越高,音质越细腻。
- 16-bit PCM 是目前最常见的音频格式。
1.3 编码(Encoding)
- **PCM 编码最常见的格式是
Signed 16-bit Little Endian
,在 Linux 中表示为S16_LE
。 - 数据格式:PCM 数据可以是 单声道(Mono)或立体声(Stereo)。
示例:CD 质量的 PCM
Format: Signed 16-bit Little Endian
Sample Rate: 44100 Hz
Channels: 2(Stereo)
2. PCM 设备与功放(Amplifier)的区别
在音频系统中,我们通常会看到 PCM 设备(PCM Device) 和 功放(Amplifier),它们的作用截然不同。
2.1 什么是 PCM 设备?
在 Linux ALSA(Advanced Linux Sound Architecture) 框架中,PCM 设备指的是 负责处理 PCM 音频数据流的设备。它可以是:
- I2S/SAI 控制器(用于 PCM 数据传输)
- 音频 CODEC(如 PCM1754)(处理 PCM 并进行 D/A 转换)
- 数字信号处理单元(DSP)
如何识别 PCM 设备?
aplay -l
示例输出:
**** List of PLAYBACK Hardware Devices ****
card 0: pcm1754audio [pcm1754-audio], device 0: 30c30000.sai-lm48100q lm48100q-0
Subdevices: 1/1
Subdevice #0: subdevice #0
📌 理解方式:
- PCM 设备 处理 PCM 数据流,并将其传输到 DAC 或其他组件。
pcm1754audio
代表 PCM 设备。
2.2 LM48100Q 是 PCM 设备吗?
❌ 不是!
LM48100Q 是一个功率放大器(Audio Power Amplifier),它的作用是 放大模拟音频信号 并驱动扬声器。
但 PCM 设备(如 I2S 控制器或 CODEC)会向它提供音频信号,然后它负责放大输出。
📌 PCM 设备 vs 功放的区别
设备类型 | 作用 | 是否是 PCM 设备? |
---|---|---|
I2S/SAI 控制器 | 传输 PCM 数据 | ✅ 是 |
音频 CODEC(如 PCM1754) | 处理 PCM 数据,并进行 D/A 转换 | ✅ 是 |
功放(如 LM48100Q) | 放大模拟音频信号 | ❌ 不是 |
📌 理解方式:
- PCM 设备 = 处理数字 PCM 音频的设备
- 功放 = 处理模拟音频信号的设备
- LM48100Q 不能直接处理 PCM 数据,它只能接收 DAC 输出的模拟信号,然后进行放大。
3. PCM 设备的 Linux 命令
3.1 查看 PCM 设备
cat /proc/asound/cards
aplay -l # 列出所有 PCM 播放设备
arecord -l # 列出所有 PCM 录音设备
📌 示例输出:
**** List of PLAYBACK Hardware Devices ****
card 0: pcm1754audio [pcm1754-audio], device 0: 30c30000.sai-lm48100q lm48100q-0
表示:
- card 0:声卡编号 0。
- pcm1754audio:设备名。
- lm48100q:功放芯片(不是 PCM 设备)。
4. 结论
✅ PCM 设备 是指 处理数字 PCM 数据 的设备,如 I2S 控制器、CODEC。
✅ LM48100Q 只是功放,不是 PCM 设备,它接收 PCM 设备输出的模拟音频信号 并放大。
✅ 如果要播放 PCM 音频,你需要一个 CODEC(如 PCM1754)将 PCM 转换成模拟信号,再送到 LM48100Q 进行放大。
掌握 PCM 之后,你就掌握了 数字音频的核心原理! 🚀