音频 PCM
音频里的 PCMPulse Code Modulation 线性脉冲编码调制是未经压缩的原始音频裸数据Linux 音频栈最底层格式ALSA、PipeWire、ALSA 设备交互全部基于 PCM。核心定义模拟声波电压 → 定时采样 → 量化为数字整数 → 原始二进制流无损、无压缩、无封装、无编码压缩所有音乐 / 视频音频解码后最终都会输出为PCM送给声卡播放四大关键参数必懂1. 采样率 sample rate每秒采集多少次声波幅值8000Hz座机电话44100HzCD 标准48000Hz视频 / 影视 / 设备默认96k/192kHiFi 高解析2. 位深 bit depth单个采样点占用比特决定动态范围、底噪16bitS16民用主流24bitS24专业录音、声卡32bit Float混音器、音频引擎内部运算3. 数据格式存储 / 排列最常用S16_LE16 位 有符号 小端Linux 声卡默认S24_LE / S32_LE24/32 位F32_LE32 位浮点4. 声道 channels1单声道2立体声左右65.1 环绕87.1 环绕字节计算单帧一次采样所有声道字节数每秒字节数PCM 常见类型LPCM 线性 PCM音频默认幅值线性分布WAV、FLAC 原始数据、HDMI 音频都是 LPCM。原始声波采样数据 PCM → LPCM 是 PCM 最常用子集 → WAV/FLAC 是封装格式里面装的是 LPCMLPCMLinear PCM线性 PCM✅消费 / 专业音频唯一在用的 PCM采样值线性均匀量化音量和数值成正比无压缩、无失真、无编码映射CD、声卡、ALSA、HDMI、视频原生音频 全部用 LPCM区别A/μ-law 是非线性 PCM电话语音用压缩动态日常口语音频里 PCM LPCMWAV微软 RIFF WAV容器格式封装结构WAV 文件头 LPCM 裸数据头里保存采样率 / 位深 / 声道 / 字节对齐等参数特点内部音频编码固定 LPCM无损、无压缩、体积大后缀.wavFLACFree 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 等LPCMLinear PCM 线性脉冲编码调制是PCM 的子集、最常用分支。核心音频振幅数值 和 音量 呈严格线性正比无非线性压缩、无失真。核心差异对比项PCM广义LPCM线性 PCM范围通用大类PCM 的特定子集量化方式可线性、可非线性纯线性均匀量化压缩部分类型带非线性压缩完全无压缩、无失真应用场景通信、语音、音频全覆盖音乐、声卡、视频、专业音频设备底层不通用声卡 / ALSA/HDMI 原生格式音频领域口语潜规则日常音频开发、Linux 音频、音视频开发中口头说的「PCM」 特指 LPCM裸音频流、ALSA 播放数据、WAV 内部数据、MKV/MP4 无损音轨全是LPCM只有电信语音场景才会区分 A-PCM / μ-PCM关键实战区别非线性 PCMA/μ-law人为压低大音量、放大小音量非线性牺牲音质压缩动态节省带宽只用于电话。LPCM原汁原味记录声波电压数值无损、线性、高动态是所有无损音频的原始基底FLAC/MP3/AAC 解码 → 统一输出 LPCM → 声卡播放PCM 裸数据排列LPCM最常用1单声道1ch16bit 示例时间 → [样本1(2B)] [样本2(2B)] [样本3(2B)] ...每个样本2 字节16bit依次排列2立体声2ch16bit 交错主流时间 → [L1(2B)][R1(2B)] [L2(2B)][R2(2B)] [L3(2B)][R3(2B)] ...3立体声平面格式planarFFmpeg 常用L 声道[L1][L2][L3]...连续一块 R 声道[R1][R2][R3]...连续一块Linux 音频栈里的 PCMALSA/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播放