在你贴出的代码中,PCM 是一种音频数据格式,全称是:
Pulse-Code Modulation(脉冲编码调制)
🎧 什么是 PCM?
PCM 是最原始、最纯净的音频数据格式,表示从麦克风录制的未经压缩的数字音频。简单来说,它是一种:
-
不带压缩的
-
连续采样的
-
高质量的
-
可直接被数字音频系统处理的
音频数据格式。
📦 在代码中体现在哪?
你在代码中看到多处使用了 PCM 相关设置,例如:
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
表示音频数据使用的是 16位 PCM 编码。
又比如:
audio.addProperty("format", "pcm");
audio.addProperty("codec", "raw");
这些 JSON 是传给火山语音识别接口的,用来告诉服务端:“我发过来的音频是 PCM 格式的”。
🔄 PCM 与 MP3、WAV 的区别
格式 | 是否压缩 | 常见用途 | 大小 |
---|---|---|---|
PCM | ❌ 无压缩 | 原始音频采样、语音识别、音频处理 | 大(最原始) |
MP3 | ✅ 有压缩(有损) | 音乐、传输 | 小 |
WAV | ❌ / ✅ | 容器格式,通常封装 PCM | 中等 |
🎯 为什么语音识别要用 PCM?
语音识别服务(如火山引擎的 ASR)通常要求传入的音频是 PCM 格式,因为:
-
质量更高,没有压缩损失;
-
结构简单,利于算法提取特征;
-
易于处理,没有解码复杂性。
🔧 举例:录音数据传输流程
-
麦克风采集的是模拟信号;
-
AudioRecord
采样后会生成 PCM 数据; -
PCM 数据作为 byte[] 被封装成 WebSocket 消息;
-
服务端(火山语音识别接口)接收并解码处理,识别语音内容。
✅ 总结:
-
PCM = Pulse-Code Modulation,是一种无压缩的数字音频格式;
-
代码中使用 PCM 是为了和语音识别系统兼容;
-
你用
AudioRecord
获取的音频数据就是 PCM 格式; -
PCM 是语音识别中最常用和推荐的输入格式。