欢迎光临
我们一直在努力

音频 PCM

音频里的 PCM(Pulse Code Modulation) = 线性脉冲编码调制,是未经压缩的原始音频裸数据,Linux 音频栈最底层格式,ALSA、PipeWire、ALSA 设备交互全部基于 PCM。

核心定义

模拟声波电压 → 定时采样 → 量化为数字整数 → 原始二进制流

  • 无损、无压缩、无封装、无编码压缩
  • 所有音乐 / 视频音频解码后,最终都会输出为 PCM 送给声卡播放

四大关键参数(必懂)

1. 采样率 sample rate

每秒采集多少次声波幅值

  • 8000Hz:座机电话
  • 44100Hz:CD 标准
  • 48000Hz:视频 / 影视 / 设备默认
  • 96k/192k:HiFi 高解析

2. 位深 bit depth

单个采样点占用比特,决定动态范围、底噪

  • 16bit(S16):民用主流
  • 24bit(S24):专业录音、声卡
  • 32bit Float:混音器、音频引擎内部运算

3. 数据格式(存储 / 排列)

最常用:

  • S16_LE:16 位 有符号 小端(Linux 声卡默认)
  • S24_LE / S32_LE:24/32 位
  • F32_LE:32 位浮点

4. 声道 channels

  • 1:单声道
  • 2:立体声(左右)
  • 6:5.1 环绕
  • 8:7.1 环绕

字节计算

单帧(一次采样所有声道)字节数:

每秒字节数:

PCM 常见类型

LPCM 线性 PCM

音频默认,幅值线性分布,WAV、FLAC 原始数据、HDMI 音频都是 LPCM。

原始声波采样数据 = PCM → LPCM 是 PCM 最常用子集 → WAV/FLAC 是封装格式,里面装的是 LPCM

LPCM(Linear PCM,线性 PCM)

✅ 消费 / 专业音频唯一在用的 PCM

  • 采样值线性均匀量化,音量和数值成正比
  • 无压缩、无失真、无编码映射
  • CD、声卡、ALSA、HDMI、视频原生音频 全部用 LPCM
  • 区别:A/μ-law 是非线性 PCM(电话语音用,压缩动态)

日常口语:音频里 PCM = LPCM

WAV(微软 RIFF WAV)

容器格式(封装)

  • 结构:WAV 文件头 + LPCM 裸数据
  • 头里保存:采样率 / 位深 / 声道 / 字节对齐等参数
  • 特点:
    • 内部音频编码:固定 LPCM
    • 无损、无压缩、体积大
    • 后缀 .wav

FLAC(Free Lossless Audio Codec)

无损压缩编码 + 容器

  • 输入:LPCM 原始音频
  • 处理:无损压缩算法(类似 zip 压缩音频)
  • 播放:FLAC 解码 → 还原出和原文件一模一样的 LPCM → 声卡播放
  • 特点:
    • 音质 = WAV 完全一致
    • 体积比 WAV 小 30%~50%
    • 不可逆压缩、无音质损失

关键维度对比表

格式编码类型压缩有无文件头音质体积场景
PCM 调制标准统称 不一定 无(裸流) 原始 最大 底层裸数据、ALSA 裸流
LPCM 线性无损编码 无压缩 无损原版 最大 声卡底层、视频原生音轨
WAV 容器 + LPCM 无压缩 无损 录音、剪辑、编曲
FLAC 无损压缩编码 无损压缩 无损 (同 WAV) 中等 音乐收藏、HiFi

区别于压缩音频

MP3/AAC/OPUS:压缩格式,播放时解码 → 转 PCM 再输出。

核心从属关系 

模拟声音
↓ 采样量化
LPCM 原始裸数据(纯二进制,无参数)

├─ 加WAV头封装 → WAV 文件
└─ FLAC无损压缩 → FLAC 文件

MP3/AAC(有损) 解码后 → 也是 LPCM 再播放

PCM 与 LPCM 核心区别

PCM(脉冲编码调制)

是一大类音频采样编码标准的统称,不是特指某一种格式。包含多种分支:

  • LPCM 线性 PCM(民用 / 专业音频主力)
  • A-law PCM(电信固话)
  • μ-law PCM(欧美电话)
  • 非线性压缩 PCM 等

LPCM(Linear PCM 线性脉冲编码调制)

是 PCM 的子集、最常用分支。

核心:音频振幅数值 和 音量 呈严格线性正比,无非线性压缩、无失真。

核心差异

对比项PCM(广义)LPCM(线性 PCM)
范围 通用大类 PCM 的特定子集
量化方式 可线性、可非线性 纯线性均匀量化
压缩 部分类型带非线性压缩 完全无压缩、无失真
应用场景 通信、语音、音频全覆盖 音乐、声卡、视频、专业音频
设备底层 不通用 声卡 / ALSA/HDMI 原生格式

音频领域口语潜规则

日常音频开发、Linux 音频、音视频开发中:

口头说的「PCM」= 特指 LPCM

  • 裸音频流、ALSA 播放数据、WAV 内部数据、MKV/MP4 无损音轨,全是 LPCM
  • 只有电信语音场景,才会区分 A-PCM / μ-PCM

关键实战区别

非线性 PCM(A/μ-law)

人为压低大音量、放大小音量(非线性),牺牲音质压缩动态,节省带宽,只用于电话。

LPCM

原汁原味记录声波电压数值,无损、线性、高动态,是所有无损音频的原始基底:

FLAC/MP3/AAC 解码 → 统一输出 LPCM → 声卡播放

PCM 裸数据排列(LPCM,最常用)

1)单声道(1ch,16bit 示例)

时间 →
[样本1(2B)] [样本2(2B)] [样本3(2B)] …

  • 每个样本:2 字节(16bit),依次排列

2)立体声(2ch,16bit 交错,主流)

时间 →
[L1(2B)][R1(2B)] [L2(2B)][R2(2B)] [L3(2B)][R3(2B)] …

3)立体声平面格式(planar,FFmpeg 常用)

L 声道:[L1][L2][L3]…(连续一块)
R 声道:[R1][R2][R3]…(连续一块)

    Linux 音频栈里的 PCM

    ALSA

    • /dev/snd/pcmC0D0p:播放 PCM 设备
    • 应用直接写入 PCM 裸数据即可发声

    PulseAudio / PipeWire

    上层统一做音量、重采样、声道映射,底层依然流转 PCM。

    工具测试

    # 播放原始16位小端48k立体声PCM
    aplay -f S16_LE -r 48000 -c 2 test.pcm
    # 录制原始PCM
    arecord -f S16_LE -r 48000 -c 2 record.pcm

    总结

    裸 PCM 和 WAV 区别

    • 裸 PCM:只有声音二进制,不知道采样率 / 位深,直接打不开
    • WAV:带头部参数,播放器直接识别播放

    LPCM 为什么单独存在?

    电视 HDMI、MP4/mkv 内音轨、专业广播,都是封装里直接存 LPCM,不用 WAV 外壳

    FLAC 和 WAV 可以互相无损互转

    ffmpeg 互转完全无音质损耗:

    # WAV → FLAC 压缩
    ffmpeg -i audio.wav audio.flac
    # FLAC → WAV 还原原始LPCM
    ffmpeg -i audio.flac audio.wav

    谁是最终播放格式?

    所有音频:MP3/OGG/FLAC/WAV/ 视频音轨→ 全部解码统一转为 LPCM→ 送给声卡(ALSA/PipeWire)播放

    赞(0)
    未经允许不得转载:171主机测评 » 音频 PCM
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址