Phase 06 - Lesson 13

Codecs de Audio Neurais — EnCodec, SNAC, Mimi, DAC e a Divisao Semantica-Acustica

This lesson includes a graded coding exercise that runs in your browser, unlocked with lifetime access.

A geracao de audio em 2026 e quase toda baseada em tokens. EnCodec, SNAC, Mimi e DAC transformam formas de onda continuas em sequencias discretas que um transformer consegue prever. A divisao entre tokens semanticos e acusticos — primeiro codebook como semantico, o resto como acustico — e a mudanca arquitetural mais importante desde o Transformer para audio.

Tipo: Aprender Linguagens: Python Pre-requisitos: Fase 6 · 02 (Espectrogramas), Fase 10 · 11 (Quantizacao), Fase 5 · 19 (Tokenizacao de Subpalavras) Tempo: ~60 minutos

O Problema

Modelos de linguagem trabalham com tokens discretos. Audio e continuo. Se voce quer um modelo no estilo LLM para fala / musica — MusicGen, Moshi, Sesame CSM, VibeVoice, Orpheus — voce precisa primeiro de um codec de audio neural: um encoder aprendido que discretiza o audio em um pequeno vocabulario de tokens, e um decoder correspondente que reconstroi a forma de onda.

Duas familias surgiram:

  1. Codecs focados em reconstrucao — EnCodec, DAC. Otimizam a qualidade perceptual do audio. Os tokens sao "acusticos" — capturam tudo, incluindo identidade do locutor, timbre, ruido de fundo.
  2. Codecs focados em semantica — Mimi (Kyutai), SpeechTokenizer. Forcam o primeiro codebook a codificar conteudo linguistico / fonetico (muitas vezes por destilacao a partir do WavLM). Os codebooks seguintes sao detalhe acustico.

A descoberta de 2024-2026: um codec puramente de reconstrucao gera fala borrada quando voce tenta gerar a partir de texto. O LLM sobre tokens do codec tem que aprender tanto a estrutura da linguagem QUANTO a estrutura acustica no mesmo codebook, o que nao escala. Separa-las — codebook semantico 0, codebooks acusticos 1-N — e o que faz o Moshi e o Sesame CSM funcionarem.

O Conceito

Cenario de quatro codecs: EnCodec, DAC, SNAC (multi-escala), Mimi (semantico+acustico)

O truque central: Quantizacao Vetorial Residual (RVQ)

Em vez de um unico codebook gigante (que precisaria de milhoes de codigos para boa qualidade), todos os codecs de audio modernos usam RVQ: uma cascata de codebooks pequenos. O primeiro codebook quantiza a saida do encoder; o segundo quantiza o residuo; e assim por diante. Cada codebook tem 1024 codigos. 8 codebooks = vocabulario efetivo de 1024^8 = 10^24.

No momento da inferencia, o decoder soma todos os codigos escolhidos por frame para reconstruir.

Os quatro codecs que importam em 2026

EnCodec (Meta, 2022). A linha de base. Encoder-decoder sobre a forma de onda, gargalo RVQ. 24 kHz, ate 32 codebooks possiveis, padrao de 4 codebooks @ 1.5 kbps. Usa a arquitetura 1D conv + transformer + 1D conv. Usado pelo MusicGen.

DAC (Descript, 2023). RVQ com codebooks normalizados por L2, funcoes de ativacao periodicas, perdas aprimoradas. A maior fidelidade de reconstrucao de qualquer codec aberto — as vezes indistinguivel da fala original com 12 codebooks. Banda completa de 44.1 kHz.

SNAC (Hubert Siuzdak, 2024). RVQ multi-escala — os codebooks grossos operam a uma taxa de frames menor que os finos. Modela o audio de forma hierarquica: um "esboco" grosso a ~12 Hz mais detalhe a 50 Hz. Usado pelo Orpheus-3B porque a estrutura hierarquica se encaixa bem na geracao baseada em LM.

Mimi (Kyutai, 2024). O divisor de aguas de 2026. Taxa de frames de 12.5 Hz (extremamente baixa), 8 codebooks @ 4.4 kbps. O codebook 0 e destilado do WavLM — treinado para prever as features de conteudo de fala do WavLM. Os codebooks 1-7 sao residuos acusticos. Essa divisao alimenta o Moshi (Licao 15) e o Sesame CSM.

Taxas de frames importam para modelagem de linguagem

Taxa de frames menor = sequencia mais curta = LM mais rapido.

Codec Taxa de frames 1 s = N frames Bom para
EnCodec-24k 75 Hz 75 musica, audio geral
DAC-44.1k 86 Hz 86 musica de alta fidelidade
SNAC-24k (grosso) ~12 Hz 12 eficiente para AR-LM
Mimi 12.5 Hz 12.5 fala em streaming

A 12.5 Hz, uma fala de 10 segundos tem apenas 125 frames de codec — um transformer consegue preve-los facilmente.

Tokens semanticos vs acusticos

frame_t → [semantic_token_t, acoustic_token_0_t, acoustic_token_1_t, ..., acoustic_token_6_t]
  • Token semantico (codebook 0 no Mimi). Codifica o que foi dito — fonemas, palavras, conteudo. Destilado do WavLM via uma perda auxiliar de predicao.
  • Tokens acusticos (codebooks 1-7). Codificam timbre, identidade do locutor, prosodia, ruido de fundo, detalhe fino.

Um LM autoregressivo preve primeiro o token semantico (condicionado ao texto), depois preve os tokens acusticos (condicionados ao semantico + referencia do locutor). Essa fatoracao e o motivo de o TTS moderno conseguir clonar vozes em zero-shot: o modelo semantico cuida do conteudo; o modelo acustico cuida do timbre.

Qualidade de reconstrucao em 2026 (bits por segundo, menor bitrate e melhor)

Codec Bitrate PESQ ViSQOL
Opus-20kbps 20 kbps 4.0 4.3
EnCodec-6kbps 6 kbps 3.2 3.8
DAC-6kbps 6 kbps 3.5 4.0
SNAC-3kbps 3 kbps 3.3 3.8
Mimi-4.4kbps 4.4 kbps 3.1 3.7

Codecs tradicionais como o Opus ainda vencem por bit em qualidade perceptual. Codecs neurais vencem em tokens discretos (que o Opus nao produz) e em qualidade para modelos generativos (o que o LM consegue fazer com esses tokens).

Construa

Passo 1: codificar com EnCodec

from encodec import EncodecModel
import torch

model = EncodecModel.encodec_model_24khz()
model.set_target_bandwidth(6.0)  # kbps

wav = torch.randn(1, 1, 24000)
with torch.no_grad():
    encoded = model.encode(wav)
codes, scale = encoded[0]
# codes: (1, n_codebooks, n_frames), dtype=int64

n_codebooks=8 a 6 kbps. Cada codigo vai de 0 a 1023 (10 bits).

Passo 2: decodificar e medir a reconstrucao

with torch.no_grad():
    wav_recon = model.decode([(codes, scale)])

from torchaudio.functional import compute_deltas
import torch.nn.functional as F

mse = F.mse_loss(wav_recon[:, :, :wav.shape[-1]], wav).item()

Passo 3: a divisao semantica-acustica (estilo Mimi)

from moshi.models import loaders
mimi = loaders.get_mimi()

with torch.no_grad():
    codes = mimi.encode(wav)  # shape (1, 8, frames@12.5Hz)

semantic = codes[:, 0]
acoustic = codes[:, 1:]

O codebook semantico 0 esta alinhado ao WavLM. Voce pode treinar um transformer de texto-para-semantico — vocabulario muito menor do que ir direto para audio. Depois, um decoder separado de acustico-para-forma-de-onda se condiciona a uma referencia do locutor.

Passo 4: por que o LM autoregressivo sobre tokens do codec funciona

Para um clipe de fala de 10 s a 12.5 Hz × 8 codebooks do Mimi:

N_tokens = 10 * 12.5 * 8 = 1000 tokens

1000 tokens e um contexto trivial para um transformer. Um transformer de 256M de parametros consegue gerar 10 segundos de fala em milissegundos em uma GPU moderna.

Use

Mapeie o problema → codec:

Tarefa Codec
Geracao geral de musica EnCodec-24k
Reconstrucao de maxima fidelidade DAC-44.1k
LM autoregressivo sobre fala (TTS) SNAC ou Mimi
Fala full-duplex em streaming Mimi (12.5 Hz)
Biblioteca de efeitos sonoros com texto EnCodec + condicao T5
Edicao de audio de grao fino DAC + inpainting

Regra geral: se voce esta construindo um modelo generativo, comece com Mimi ou SNAC. Se voce esta construindo um pipeline de compressao, use Opus.

Armadilhas

  • Codebooks demais. Adicionar codebooks aumenta a fidelidade linearmente, mas tambem aumenta o comprimento da sequencia do LM linearmente. Pare em 8-12.
  • Incompatibilidade de taxa de frames. Treinar o LM em Mimi a 12.5 Hz e depois fazer fine-tuning em EnCodec a 50 Hz falha silenciosamente.
  • Supor que todos os codebooks sao iguais. No Mimi, o codebook 0 carrega o conteudo; perde-lo destroi a inteligibilidade. Perder o codebook 7 e quase imperceptivel.
  • Usar a qualidade de reconstrucao como unica metrica. Um codec pode ter otima reconstrucao mas ser inutil para geracao baseada em LM se a estrutura semantica for ruim.

Entregue

Salve como outputs/skill-codec-picker.md. Escolha um codec para uma dada tarefa de geracao ou compressao.

Exercicios

  1. Facil. Rode code/main.py. Ele implementa um quantizador escalar + residual de brinquedo e mede o erro de reconstrucao conforme voce adiciona codebooks.
  2. Medio. Instale encodec e compare 1, 4, 8, 32 codebooks em um clipe de fala separado para teste. Plote PESQ ou MSE vs bitrate.
  3. Dificil. Carregue o Mimi. Codifique um clipe. Substitua o codebook 0 por inteiros aleatorios; decodifique. Depois substitua o codebook 7 da mesma forma. Compare as duas corrupcoes — a corrupcao do codebook 0 deve destruir a inteligibilidade; a corrupcao do codebook 7 quase nao deve mudar nada.

Termos-chave

Termo O que as pessoas dizem O que realmente significa
RVQ Quantizacao residual Cascata de codebooks pequenos; cada um quantiza o residuo anterior.
Taxa de frames Velocidade do codec Quantos frames-token por segundo. Menor = LM mais rapido.
Codebook semantico Codebook 0 (Mimi) Codebook destilado de features SSL; codifica conteudo.
Codebooks acusticos Todo o resto Timbre, prosodia, ruido, detalhe fino.
PESQ / ViSQOL Qualidade perceptual Metricas objetivas que se correlacionam com o MOS.
EnCodec Codec da Meta A linha de base RVQ; usado pelo MusicGen.
Mimi Codec da Kyutai Taxa de frames de 12.5 Hz; divisao semantica-acustica; alimenta o Moshi.

Leitura Complementar

0 lifetime access. Curriculum based on AI Engineering from Scratch by Rohit Ghumare (MIT, used under attribution).