ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

[具身智能-633]:语音 PCM 超通俗精讲(嵌入式 / 树莓派 / RK3588 专用)

2026/8/9 12:57:07 拓冰建站 浏览量
[具身智能-633]:语音 PCM 超通俗精讲(嵌入式 / 树莓派 / RK3588 专用)

一、什么是 PCM

PCM = 脉冲编码调制语音从麦克风进来:模拟声波→ ADC 采样 → 变成一个个数字采样点 → 连续排列就是 PCM

它是所有语音格式的原始底层裸数据,WAV/MP3/OPUS 本质都是包裹或压缩后的 PCM。

二、语音 PCM 四个核心参数(必记)

语音工程固定标配

  1. 采样率16000Hz(人声标准),其次 8000Hz
  2. 位深16bit(2 字节 / 采样点)
  3. 声道单声道 Mono
  4. 字节序小端序 Little-Endian(ARM 树莓派 / RK 全是小端)

标准语音 PCM 规格:

16k 16bit 单声道 小端 PCM

三、算一笔关键账(工程必用)

1. 一个采样点大小

16bit =2 字节

2. 每秒字节数

16000×2Byte=32000 字节/秒

  • 1 秒语音 PCM =32KB
  • 1 分钟:1920000 字节 ≈ 1875KB

四、PCM 长什么样

没有文件头、没有标识、纯二进制流水

plaintext

[2字节采样点1][2字节采样点2][2字节采样点3]...

特点:

  • 只有原始波形数据
  • 不存采样率、位深、声道
  • 必须代码里手动约定参数才能解析

五、PCM 和 WAV 的区别

  • PCM:纯裸流,无头部,播放器打不开,只能程序解析
  • WAV44 字节文件头 + 后面跟着 PCM去掉 WAV 前 44 字节,剩下就是标准 PCM。

六、PCM 常见存储 / 文件后缀

  • .pcm.raw.bin都是语音裸 PCM

七、Python 读写 PCM 代码示例

1. 录音存为纯 PCM

python

运行

import pyaudio FORMAT = pyaudio.paInt16 CHANNELS = 1 RATE = 16000 CHUNK = 1024 RECORD_SECONDS = 5 p = pyaudio.PyAudio() stream = p.open(format=FORMAT, channels=CHANNELS, rate=RATE, input=True, frames_per_buffer=CHUNK) print("录制PCM中...") frames = [] for _ in range(int(RATE / CHUNK * RECORD_SECONDS)): data = stream.read(CHUNK) frames.append(data) # 写入纯PCM,无任何头 with open("voice_16k_16bit_mono.pcm", "wb") as f: f.write(b"".join(frames)) stream.stop_stream() stream.close() p.terminate() print("PCM保存完成")

2. 读取 PCM 转波形 / 音量

python

运行

import numpy as np # 固定参数,必须和录制时一致 RATE = 16000 CHANNELS = 1 SAMPLE_WIDTH = 2 with open("voice_16k_16bit_mono.pcm", "rb") as f: pcm_data = f.read() # 转成int16波形数组 waveform = np.frombuffer(pcm_data, dtype=np.int16) print("采样点总数:", len(waveform)) print("平均音量:", np.abs(waveform).mean())

八、开发板应用场景

树莓派 4B/5、RK3568/RK3588:

  • 音频采集 → 直接输出16k 16bit 单声道 PCM
  • 送入 VAD 静音检测、语音识别模型、降噪算法
  • 网络传输前先拿 PCM 再编码 OPUS/AMR
  • 本地缓存存 PCM 效率最高、CPU 开销最小

九、快速总结

  1. PCM 是语音最原始裸数据
  2. 工业语音统一标准:16k 16bit 单声道小端
  3. 无文件头,靠代码约定参数
  4. WAV = 头 + PCM;PCM 是去掉头的裸流
  5. 语音 AI、嵌入式开发优先用 PCM