PCM 音频:采样率、位深与声道布局
Pulse Code Modulation(脉冲编码调制)、Sample Format 与声道布局
理解 PCM(Pulse Code Modulation,脉冲编码调制)如何把采样、量化后的幅度编码成数字样本,再计算采样率、位深和声道数共同决定的原始音频数据量。
先明确本课目标
计算未压缩 PCM 码率
区分整数与浮点 Sample Format
区分交错与平面声道布局
PCM 是按时间排好的量化振幅表:每一列是一条独立声道,采样率决定表有多少行,声道布局说明各列的声音角色,样本格式决定每格怎样编码和占多少位。
为什么原始音频大小不需要看内容就能算?
固定采样率、固定位深和固定声道数的 PCM 每秒保存固定数量的样本,因此数据率与声音内容复杂度无关。
javascriptconst sampleRate = 48000;
const bitDepth = 24;
const channels = 2;
const bitsPerSecond = sampleRate * bitDepth * channels;
const megabytesPerMinute = bitsPerSecond / 8 * 60 / 1e6;- 每秒样本数 采样率给出每个声道每秒的样本数量。
- 乘单样本位数 位深决定每个样本的存储宽度。
- 乘声道并换单位 声道数扩大总样本量,除以 8 得到字节。
48kHz、24-bit、双声道 PCM 约为 2.304 Mbps,也就是每分钟约 17.28 MB。
OPTIONAL · 按需查阅完整术语表与概念边界遇到陌生术语时再展开,不打断主线实验。
展开⌄
边改边运行
浏览器加载后会激活代码编辑器、独立运行环境与实时输出。
实现 planar 与 interleaved Float32Array 的双向转换。
回到原理,解释刚才发生了什么
先用结果建立反馈,再按运行流程、核心原理和知识关系逐层深入。
核心讲解
PCM 描述样本表示,不是文件容器
连续声音先经过采样和量化,再把每个时刻的幅度编码成数值样本,这就是 Pulse Code Modulation。PCM 可以放入 WAV 等容器,也可以直接存在内存缓冲中;PCM 本身不规定文件头、轨道索引或压缩结构。
声道是一条独立的声音信号序列
单声道每个采样时刻只有一个幅度值;立体声同时保存左、右两条序列;5.1 则为左、右、中置、低频效果和环绕等角色分别保存序列。声道数回答“有几条”,Channel Layout 回答“每条负责什么”。
PCM 码率可以直接计算
采样率 × 位深 × 声道数就是未压缩音频每秒位数。例如 48 kHz × 16-bit × 2 声道约为 1.536 Mbps。
布局决定算法如何走内存
Interleaved 以 L、R、L、R 排列,适合设备输出;Planar 把每声道分开,许多编解码与 SIMD 算法更方便。
OPTIONAL · 迁移时查阅Web 与原生实现对照主线实验完成后,再用完整映射处理跨平台或跨 API 迁移。
展开⌄
Web Audio 偏好 Float32 planar 心智模型,原生设备接口常暴露更多 Sample Format。
WebGL
FFmpeg AVSampleFormat、Core Audio ASBD 和设备 API 会显式描述格式、布局和步长。
WebGPU
AudioBuffer 按声道提供 Float32Array;AudioData 还可表达多种 planar/interleaved 格式。
跨 API 传音频时先写清 sample rate、format、channel layout 三件事。