“Codec”是 coder(编码)和 decoder(解码)的合体,指一整套“压缩—还原”的机器:编码那端把声音挤压成更省空间的表示,解码那端再把它尽可能还原出来。
在大模型时代,音频和文本一样,常被切成片段并编码成离散 token 的序列。用来量化的“音频词典”叫码本(codebook),好比厨房里的香料盒——一格格离散的小向量,各有编号。不同于文本通常只用一部大词典,神经音频编码往往在同一时间步(音频单元)上配几层码本,由粗到细逐层量化(术语叫 RVQ,Residual Vector Quantization)。压缩时,机器会在这些码本里各挑一个最合适的条目,用它们的编号索引分层“记住”这一瞬的声音;还原时,再把编号对应的向量取出相加,层层把味道补全。
早年的 TTS 常用“梅尔频谱草稿”(连续值“乐谱”)→ 传统神经声码器(vocoder)直接还原波形(根据乐谱演奏);而 LLM-native 神经编解码器路线,多为“语义 token → 声学 token → 解码波形”,两类token都是离散 token,只是粒度不同、分工不同。
RVQ 多层token编码是LLM延展到音频的一个关键创新。没有它,token就会爆炸。分层的本性是化繁为简,分而治之。这是输入信号的表示(representation) 创新,从而得以把离散化进行到底。
“几层”量化呢?没有一个放之四海而皆准的固定数,它其实是个随码率、延迟与质量目标一起调的旋钮。拿 Google 的 SoundStream 为例:它用残差量化把同一时间步上的表示一层层细化,论文里既给了常用的 4、8、16 层配置,也做过极端实验,把量化层数加到 80 层,证明即便很多层也能稳定训练;同一目标码率下,用更少层但更大的码本,或用更多层但每层码本更小,都是可以互相折换的设计选择。
Meta 的 EnCodec 走的是“多码本、可变带宽”的路线:24 kHz 的模型最多用到 32 个码本(也就是 32 层 RVQ),48 kHz 的版本最多 16 个,每个码本通常 1024 个条目;训练时随机挑选若干层参与量化,从而一套权重覆盖 1.5/3/6/12/24 kbps 等不同带宽。这样一来,工程上就能按需“开几层就几层”,在质量和实时性之间找平衡。
别把“层数”跟“层级类别”混为一谈。OpenAI 的 Jukebox 采用的是三类时间尺度的量化(VQ-VAE):顶层类最稀、底层类最密,用来承载从段落结构到音色细节的不同粒度信息;这说的是“横向按时间分三层类别”,而不是同一时间步上堆多少层残差量化器。
把这些放在一条直观的尺子上看:实时语音、低延迟的场景,常见是 4–16 层一类的配置;音乐或高保真场景,24 kHz 下用到二三十层也不罕见。最终取几层,不是教条,而要综合平衡,要看你要的码率、能接受的延迟,以及耳朵对质感的要求。
“神经 codec”的入口是神经“编码器”,把原始波形揉成紧凑的隐向量;接着量化器从各层码本里一层层选条目,这就是逐层查词典的过程(粗笔先定轮廓,细笔再添质感);出口是神经“解码器”,把这些离散条目还原成为可听波形。整条链条端到端训练,目标是在保真的前提下用尽量少的编号,把人耳在意的东西讲清楚:音色、韵律、吐字,甚至房间里那点余韵。最终得到的是一条稳定、可逆、码率可调的离散序列。
在这套体系里,“音频 token”指的就是那些编号本身。每隔十几到几十毫秒,量化器从各层码本里选出最接近的一组编号来描述这个片段;时间一长,便得到一串可读可写的“声学文本”。这和传统的梅尔频谱不同:梅尔是连续数值的“照片”,更适合给传统神经声码器(vocoder)直接还原;音频 token 是离散的“词串”,既能高保真解码回波形,也能像文字一样被 GPT 风格的自回归大模型接龙、改写与对齐。
一句话收束:codec 是整台“压缩—还原”的机器;码本只是机器里装“离散基元向量”的香料盒,真正作为 token 的是它们的编号;神经 codec 则把这台机器用神经网络重铸,让它学会用一串离散 token 讲清楚一段声音,并在需要时把这串 token 唱回成真的语音或音乐。说白了就是,音频处理基本上可以沿用文本大模型那一套已经验证极为有效的压缩与还原技术,这就是音频技术在大模型时代得以再起飞的奥秘。