2、音频编解码基础:PCM原理、采样率与位深度、常见编码格式对比与选型

好,咱们进入第二章。音频编解码,说白了就是声音的「数字身份证」怎么生成、怎么压缩、怎么还原。我在智能音箱项目里踩过不少坑,今天把这些经验掰开揉碎讲给你听。

2.1 PCM原理:声音是怎么变成0和1的?

PCM,全称脉冲编码调制。名字听着唬人,其实原理特简单——就是把连续的声音波形,每隔一小段时间「咔嚓」拍一张快照,再把快照的高度用数字记下来。

这个过程分三步:

  1. 采样:每隔固定时间取一个点
  2. 量化:把采样点的电压值归到最近的整数等级
  3. 编码:把整数等级转成二进制

举个例子。你对着麦克风说「你好」,声波是连续的。采样器每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余量。

最后说一句:编解码只是音频链路的一环。采样率转换、音量归一化、动态范围压缩,这些预处理同样影响最终听感。下一章咱们聊音频链路怎么搭,从麦克风采集到扬声器输出,一条龙讲清楚。