Phase 06: Speech & Audio

Codecs audio neuraux EnCodec, SNAC, Mimi, DAC et la séparation sémantique-acoustique

La génération audio 2026 est presque tous des jetons. EnCodec, SNAC, Mimi et DAC transforment les formes d'onde continues en séquences discrètes que un transformateur peut prédire.

Type: Learn

Languages: Python

Prerequisites: Phase 6 · 02 (Spectrograms), Phase 10 · 11 (Quantization), Phase 5 · 19 (Subword Tokenization)

Time: ~60 minutes

Le problème

Les modèles de langage fonctionnent sur des jetons distincts. L'audio est continu. Si vous voulez un modèle de style LLM pour la parole / la musique MusicGen, Moshi, Sesame CSM, VibeVoice, Orpheus vous avez d'abord besoin d'un neural audio codec: un codeur apprenant qui discrète l'audio en un petit vocabulaire de jetons, et un décodeur correspondant qui reconstruit la forme d'onde.

Deux familles sont apparues:

  1. Reconstruction-first codecs EnCodec, DAC. Optimiser la qualité audio perceptuelle. Les jetons sont "acoustiques" ils capturent tout, y compris l'identité du haut-parleur, le timbre, le bruit de fond.
  2. Semantic-first codecs Mimi (Kyutai), SpeechTokenizer. Forcez le premier codebook à encoder le contenu linguistique / phonétique (souvent en distillant de WavLM).

Les perspectives de 2024 à 2026: a pure reconstruction codec gives you blurry speech when you try to generate from text.Le LLM sur les jetons codec doit apprendre à la fois la structure du langage ET la structure acoustique dans le même codebook, ce qui n'est pas à l'échelle.

Le concept

!Four codec landscape: EnCodec, DAC, SNAC (multi-scale), Mimi (semantic+acoustic)

Le truc principal: quantification des vecteurs résiduels (RVQ)

Au lieu d'un seul codec (qui nécessiterait des millions de codes pour une bonne qualité), tous les codecs audio modernes utilisent RVQLe premier codebook quantifie la sortie du codeur; le second quantifie le résiduel; etc. Chaque codebook est constitué de 1024 codes.

Au moment de l'inférence, le décodeur additionne tous les codes choisis par cadre pour la reconstruction.

Les quatre codecs qui comptent en 2026

EnCodec (Meta, 2022).Le code de base. Encoder-décoder sur la forme d'onde, RVQ goulet d'étranglement. 24 kHz, 32 livres de code possibles, 4 livres de code par défaut @ 1,5 kbps. Utilisations 1D conv + transformer + 1D convL'architecture, utilisée par MusicGen.

DAC (Descript, 2023).RVQ avec des codebooks normalisés L2, des fonctions d'activation périodiques, des pertes améliorées. La plus haute fidélité de reconstruction de tout codec ouvert parfois indistinguible de la parole originale avec 12 codebooks. 44,1 kHz à bande complète.

SNAC (Hubert Siuzdak, 2024).Les rouges de code fonctionnent à un rythme d'image inférieur à ceux fins. Modélise efficacement l'audio hiérarchiquement: un "boutonnement" grossier à ~ 12 Hz plus un détail à 50 Hz. Utilisé par Orpheus-3B parce que la structure hiérarchique correspond bien à la génération basée sur LM.

Mimi (Kyutai, 2024).Le changateur de jeu 2026: 12,5 Hz de fréquence d'images (extrêmement bas), 8 livres de code @ 4,4 kbps.distilled from WavLMLes livres de code 1-7 sont des résidus acoustiques. Cette division permet de prédire les caractéristiques du contenu de la parole de WavLM.

Les taux de cadres sont importants pour la modélisation des langages

La fréquence de l'image inférieure = séquence plus courte = LM plus rapide.

CodecFrame rate1 s = N framesGood for
EnCodec-24k75 Hz75music, general audio
DAC-44.1k86 Hz86high-fidelity music
SNAC-24k (coarse)~12 Hz12AR-LM efficient
Mimi12.5 Hz12.5streaming speech

À 12,5 Hz, une déclaration de 10 secondes est seulement 125 cadres de codec un transformateur peut facilement les prédire.

Les jetons sémantiques et les jetons acoustiques

frame_t → [semantic_token_t, acoustic_token_0_t, acoustic_token_1_t, ..., acoustic_token_6_t]
  • Semantic token (codebook 0 in Mimi).Il encode ce qui a été dit phonèmes, mots, contenu. Destilé à partir de WavLM via une perte de prédiction auxiliaire.
  • Acoustic tokens (codebooks 1-7).Timbre de code, identité du haut-parleur, prosodie, bruit de fond, détails fins.

Un LM AR prédit d'abord le jeton sémantique (conditionné sur le texte), puis prédit les jetons acoustiques (conditionnés sur la référence sémantique + haut-parleur). Cette factualisation est la raison pour laquelle le TTS moderne peut cloner des voix à tir zéro: le modèle sémantique gère le contenu; le modèle acoustique gère le timbre.

2026 qualité de reconstruction (bits par seconde, plus faible bitrate est mieux)

CodecBitratePESQViSQOL
Opus-20kbps20 kbps4.04.3
EnCodec-6kbps6 kbps3.23.8
DAC-6kbps6 kbps3.54.0
SNAC-3kbps3 kbps3.33.8
Mimi-4.4kbps4.4 kbps3.13.7

Les codecs traditionnels comme Opus gagnent toujours par bit en matière de qualité perceptuelle.discrete tokens(qui n'est pas produit par Opus) et generative-model quality(ce que le LM peut faire avec ces jetons).

Faites-le

Étape 1: encoder avec EnCodec

pythonfrom 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=8Chaque code est de 0 à 1023 (10 bits).

Étape 2: Décoder et mesurer la reconstruction

pythonwith 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()

Étape 3: la fraction sémantique-acoustique (à la manière de Mimi)

pythonfrom 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:]

Le codebook sémantique 0 est aligné avec WavLM. Vous pouvez former un transformateur texte-sémantique un vocabulaire beaucoup plus petit que de passer directement à l'audio.

Étape 4: pourquoi AR LM sur les jetons codec fonctionne

Pour un clip de 10 secondes à 12,5 Hz × 8 codes de Mimi:

N_tokens = 10 * 12.5 * 8 = 1000 tokens

1000 jetons est un contexte trivial pour un transformateur. Un transformateur de 256M-paramètre peut générer 10 secondes de parole en millisecondes sur un GPU moderne.

Utilisez-le

Problème de carte → codec:

TaskCodec
General music generationEnCodec-24k
Highest-fidelity reconstructionDAC-44.1k
AR LM over speech (TTS)SNAC or Mimi
Streaming full-duplex speechMimi (12.5 Hz)
Sound-effect library with textEnCodec + T5 condition
Fine-grained audio editingDAC + inpainting

Règle générale: if you're building a generative model, start with Mimi or SNAC. If you're building a compression pipeline, use Opus.

Les pièges

  • Too many codebooks.L'ajout de livres de code augmente la fidélité linéairement mais la longueur de la séquence LM également linéairement.
  • Frame-rate mismatch.L'entraînement LM à 12,5 Hz Mimi puis l'ajustement fin à 50 Hz EnCodec échoue silencieusement.
  • Assuming all codebooks equal.Dans Mimi, le codebook 0 contient du contenu; le perdre détruit l'intelligibilité.
  • Using reconstruction quality as the only metric.Un codec peut avoir une grande reconstruction mais être inutile pour la génération basée sur LM si la structure sémantique est mauvaise.

La faire partir

  • Je ne sais pas .outputs/skill-codec-picker.mdChoisissez un codec pour une tâche générative ou de compression donnée.

Exercices

  1. Easy.On court .code/main.pyIl implémentera un quantificateur de jouets scalaire + résiduel et mesurera l'erreur de reconstruction lorsque vous ajoutez des livres de code.
  2. Medium.Installezencodecet comparer 1, 4, 8, 32 livres de code sur un clip de discours prolongé.
  3. Hard.Charger Mimi. Encodez un clip. Remplacez le codebook 0 par des entiers aléatoires; décodez. Puis remplacez le codebook 7 de la même manière. Comparer les deux corruptions codebook 0 corruption devrait détruire l'intelligibilité; codebook 7 corruption devrait à peine changer quoi que ce soit.

Les termes clés

TermWhat people sayWhat it actually means
RVQResidual quantizationCascade of small codebooks; each quantizes the previous residual.
Frame rateCodec speedHow many token-frames per second. Lower = faster LM.
Semantic codebookCodebook 0 (Mimi)Codebook distilled from SSL features; encodes content.
Acoustic codebooksEverything elseTimbre, prosody, noise, fine detail.
PESQ / ViSQOLPerceptual qualityObjective metrics correlating with MOS.
EnCodecMeta codecThe RVQ baseline; used by MusicGen.
MimiKyutai codec12.5 Hz frame rate; semantic-acoustic split; powers Moshi.

Pour en savoir plus

This free lesson is part of the AI Engineering from Scratch curriculum. Read the full explanation, run the lesson code, and verify the result in the interactive reader or from the repository source.

Browse the complete course catalog or open this lesson on GitHub.