2、音频编解码基础:PCM原理、采样率与位深度、常见编码格式对比与选型
好,咱们进入第二章。音频编解码,说白了就是声音的「数字身份证」怎么生成、怎么压缩、怎么还原。我在智能音箱项目里踩过不少坑,今天把这些经验掰开揉碎讲给你听。
2.1 PCM原理:声音是怎么变成0和1的?
PCM,全称脉冲编码调制。名字听着唬人,其实原理特简单——就是把连续的声音波形,每隔一小段时间「咔嚓」拍一张快照,再把快照的高度用数字记下来。
这个过程分三步:
- 采样:每隔固定时间取一个点
- 量化:把采样点的电压值归到最近的整数等级
- 编码:把整数等级转成二进制
举个例子。你对着麦克风说「你好」,声波是连续的。采样器每1/44100秒切一刀,得到一串离散的电压值。量化器把这些电压值四舍五入到65536个等级之一。编码器再把等级号转成16位二进制。搞定。
核心公式:
数据速率(bps)= 采样率(Hz)× 位深度(bit)× 声道数
比如CD音质:44100 × 16 × 2 = 1,411,200 bps ≈ 1.4 Mbps
我在项目里遇到过一个问题:麦克风采集的PCM数据直接传给WiFi模块,结果声音断断续续。后来发现是I2S总线的时钟没配好,采样率对不上。嗯,硬件层面的时钟同步,往往是第一个坑。
2.2 采样率与位深度:选错了会怎样?
采样率决定你能录多高的频率。根据奈奎斯特定理,采样率至少要是信号最高频率的两倍。人耳能听到20Hz-20kHz,所以44.1kHz成了CD标准。电话只用8kHz,因为人声主要能量在300Hz-3.4kHz。
位深度决定动态范围。每增加1位,信噪比提升约6dB。16位能到96dB,24位能到144dB。你想想看,一个安静房间的背景噪声大概30dB,摇滚演唱会能到120dB。16位其实够用,但做音频处理时,中间计算用24位或32位浮点,能避免累积误差。
| 应用场景 | 采样率 | 位深度 | 声道 | 原始码率 |
|---|---|---|---|---|
| 电话语音 | 8 kHz | 8 bit | 1 | 64 kbps |
| CD音质 | 44.1 kHz | 16 bit | 2 | 1.4 Mbps |
| DVD/高清 | 48 kHz | 16/24 bit | 2-6 | 1.5-6.9 Mbps |
| 高解析音频 | 96/192 kHz | 24 bit | 2 | 4.6-18.4 Mbps |
我的建议:智能音箱做语音唤醒,用16kHz/16bit就够了。做音乐播放,至少支持44.1kHz/16bit。别盲目上192kHz,WiFi传输和DSP处理都扛不住。
2.3 常见编码格式对比:MP3、AAC、Opus
原始PCM数据太大,必须压缩。压缩分两种:无损(FLAC、ALAC)和有损(MP3、AAC、Opus)。智能音箱场景,网络带宽有限,有损压缩是主流。
MP3:老当益壮,但别迷信320kbps
MP3诞生于90年代,用了心理声学模型,把听不到的声音成分扔掉。128kbps是「可接受」的下限,320kbps接近透明。但它的编码器太老了,同样码率下,AAC和Opus都比它强。
我曾经在项目里用MP3 128kbps做音乐流,用户投诉「高频有金属声」。查了半天,是MP3的预回声处理太糙,换AAC 96kbps反而更干净。嗯,别迷信老牌格式。
AAC:苹果和YouTube都在用,均衡之选
AAC是MP3的继任者,编码效率更高。同样的透明音质,AAC比MP3低30%的码率。它支持更多采样率(8-96kHz)和声道数(最多48个)。智能音箱里,AAC是主流选择。
但要注意:AAC有多个变种。LC-AAC是低复杂度版,适合嵌入式。HE-AAC(aacPlus)加了SBR技术,低码率下表现好,但编码延迟大。做实时通话别用HE-AAC,延迟会让你抓狂。
Opus:开源新贵,实时通信的王者
Opus是IETF标准,完全开源,免专利费。它融合了SILK(语音)和CELT(音乐)两种编码器,码率范围从6kbps到510kbps。最厉害的是,它的算法延迟最低只有5ms,非常适合VoIP和实时对讲。
我做过一个测试:用Opus 64kbps和AAC 128kbps做AB对比,盲听下大部分人分不出区别。而且Opus在丢包10%的情况下还能保持可懂度,AAC丢包5%就开始噼里啪啦了。
| 特性 | MP3 | AAC | Opus |
|---|---|---|---|
| 诞生年份 | 1993 | 1997 | 2012 |
| 专利 | 有(已过期) | 有(需授权) | 无(开源) |
| 码率范围 | 32-320 kbps | 8-529 kbps | 6-510 kbps |
| 算法延迟 | ~100 ms | ~60 ms | 5-60 ms |
| 透明音质码率 | ~256 kbps | ~128 kbps | ~96 kbps |
| 嵌入式支持 | 好 | 好 | 中等(需优化) |
2.4 选型指南:智能音箱到底该用哪个?
没有银弹。选型要看具体场景:
- 音乐流媒体播放:首选AAC 128-256kbps。生态好,几乎所有平台都支持。MP3作为降级备选。
- 语音助手/实时对讲:Opus 16-32kbps。低延迟、抗丢包,用户体验好。我曾经把AAC换成Opus,对讲延迟从200ms降到40ms,用户反馈「终于能正常聊天了」。
- 本地录音/回放:用PCM或FLAC。不经过压缩,方便后续语音识别处理。
- 多房间同步播放:AAC或Opus都可以,但要注意解码延迟的一致性。不同芯片的解码器实现不同,可能导致不同步。
避坑指南:我曾经在选型时只看码率,没考虑解码器的内存占用。某款低端芯片跑AAC解码需要80KB RAM,而Opus只需要40KB。结果AAC解码时内存溢出,系统重启。所以选型时一定要看芯片的SRAM和Flash余量。
最后说一句:编解码只是音频链路的一环。采样率转换、音量归一化、动态范围压缩,这些预处理同样影响最终听感。下一章咱们聊音频链路怎么搭,从麦克风采集到扬声器输出,一条龙讲清楚。