Phase 06: Speech & Audio

Codec âm thanh thần kinh EnCodec, SNAC, Mimi, DAC và sự chia rẽ ngữ nghĩa-những âm thanh

2026 audio generation gần như là tất cả các token. EnCodec, SNAC, Mimi và DAC biến hình dạng sóng liên tục thành chuỗi riêng biệt mà một biến thể có thể dự đoán.

Type: Learn

Languages: Python

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

Time: ~60 minutes

Vấn đề

Các mô hình ngôn ngữ hoạt động trên các mã thông báo riêng biệt. Âm thanh là liên tục. Nếu bạn muốn một mô hình LLM kiểu cho ngôn ngữ / âm nhạc MusicGen, Moshi, Sesame CSM, VibeVoice, Orpheus bạn cần một neural audio codec: một bộ mã hóa học tập phân loại âm thanh thành một từ vựng nhỏ của các token, và một bộ mã hóa phù hợp tái tạo hình dạng sóng.

Hai gia đình đã xuất hiện:

  1. Reconstruction-first codecs EnCodec, DAC. Tối ưu hóa chất lượng âm thanh nhận thức. Các token là "những âm thanh" chúng ghi lại mọi thứ bao gồm danh tính loa, timbre, tiếng ồn nền.
  2. Semantic-first codecs Mimi (Kyutai), SpeechTokenizer. Bắt đầu sách mã đầu tiên mã hóa nội dung ngôn ngữ / âm thanh (thường bằng cách chưng cất từ WavLM).

Những thông tin sâu sắc về năm 2024-2026: a pure reconstruction codec gives you blurry speech when you try to generate from text.Các mã codec của LLM phải học cả cấu trúc ngôn ngữ và cấu trúc âm thanh trong cùng một codebook, không có quy mô.

Khái niệm

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

Tránh cốt lõi: Quantization Vektor còn lại (RVQ)

Thay vì một cuốn sách mã lớn (có thể cần hàng triệu mã để có chất lượng tốt), tất cả các codec âm thanh hiện đại sử dụng RVQ: một loạt các codebook nhỏ. codebook đầu tiên định lượng sản xuất encoder; thứ hai định lượng dư thừa; vv Mỗi codebook là 1024 codebook. 8 codebook = từ vựng hiệu quả của 1024 ^ 8 = 10^24.

Vào thời điểm suy luận, bộ giải mã tổng hợp tất cả các mã được chọn cho mỗi khung để tái cấu trúc.

Bốn codec quan trọng vào năm 2026

EnCodec (Meta, 2022).Hình cơ bản. Mã mã hóa-bẻ khóa trên dạng sóng, nút nút rơm RVQ. 24 kHz, 32 sổ mã có thể, mặc định 4 sổ mã @ 1.5 kbps. Sử dụng 1D conv + transformer + 1D convThiết kế, được sử dụng bởi MusicGen.

DAC (Descript, 2023).RVQ với sổ mã L2-tự chuẩn hóa, chức năng kích hoạt định kỳ, lỗ hổng cải thiện. Độ trung thực tái tạo cao nhất của bất kỳ codec mở nào đôi khi không thể phân biệt với ngôn ngữ gốc với 12 sổ mã. 44.1 kHz băng thông đầy đủ.

SNAC (Hubert Siuzdak, 2024).RVQ nhiều quy mô các sổ mã thô hoạt động với tốc độ khung thấp hơn so với các sổ cái tốt. Nó hiệu quả mô hình âm thanh theo cấp bậc: một "phác thảo" thô ở ~ 12 Hz cộng với chi tiết ở 50 Hz. Được sử dụng bởi Orpheus-3B vì cấu trúc bậc bậc được lập bản đồ tốt cho thế hệ dựa trên LM.

Mimi (Kyutai, 2024).Game-changer 2026: tốc độ khung hình 12,5 Hz ( cực thấp), 8 codebook @ 4.4 kbps. Codebook 0 là distilled from WavLM được đào tạo để dự đoán các tính năng nội dung nói chuyện của WavLM. Các codebook 1-7 là dư lượng âm thanh.

Tốc độ khung hình quan trọng cho mô hình hóa ngôn ngữ

Tốc độ khung hình thấp hơn = chuỗi ngắn hơn = LM nhanh hơn.

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, một phát biểu 10 giây chỉ là 125 khung codec một bộ biến thể có thể dễ dàng dự đoán chúng.

Các token ngữ nghĩa so với âm thanh

frame_t → [semantic_token_t, acoustic_token_0_t, acoustic_token_1_t, ..., acoustic_token_6_t]
  • Semantic token (codebook 0 in Mimi).Mã hóa những gì đã được nói âm, từ, nội dung.
  • Acoustic tokens (codebooks 1-7).Định nghĩa âm thanh, danh tính loa, âm nhạc, tiếng ồn nền, chi tiết tinh tế.

Một LM AR dự đoán đầu tiên token ngữ nghĩa (được điều chỉnh trên văn bản), sau đó dự đoán token âm thanh (được điều chỉnh trên tham chiếu ngữ nghĩa + loa).

2026 chất lượng tái tạo (bit/s, tốc độ bit thấp hơn là tốt hơn)

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

Các codec truyền thống như Opus vẫn thắng từng bit về chất lượng nhận thức.discrete tokens(mà Opus không sản xuất) và generative-model quality(làm gì LM có thể làm với những token).

Hãy xây dựng nó

Bước 1: mã hóa bằng 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=8với tốc độ 6 kbps. Mỗi mã là 0-1023 (10 bit).

Bước 2: giải mã và đo tái tạo

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

Bước 3: chia cắt âm nghĩa-tâm âm (tình hình 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:]

Bộ mã ngữ nghĩa 0 được sắp xếp với WavLM. Bạn có thể đào tạo một bộ biến đổi văn bản sang ngữ nghĩa từ vựng nhỏ hơn nhiều so với đi trực tiếp sang âm thanh. Sau đó một điều kiện giải mã dạng âm thanh riêng biệt cho dạng sóng trên một tham chiếu loa.

Bước 4: tại sao AR LM trên mã codec hoạt động

Đối với một clip phát biểu 10 giây tại 12.5 Hz của Mimi × 8 codebook:

N_tokens = 10 * 12.5 * 8 = 1000 tokens

1000 token là một bối cảnh tầm thường cho một bộ biến đổi. Một bộ biến đổi tham số 256M có thể tạo ra 10 giây nói chuyện trong vài millisecond trên một GPU hiện đại.

Sử dụng nó

Vấn đề bản đồ → 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

Quy tắc: if you're building a generative model, start with Mimi or SNAC. If you're building a compression pipeline, use Opus.

Những bẫy

  • Too many codebooks.Thêm codebook tăng độ trung thực theo đường thẳng nhưng chiều dài chuỗi LM cũng theo đường thẳng.
  • Frame-rate mismatch.LM đào tạo trên 12,5 Hz Mimi sau đó điều chỉnh tinh tế trên 50 Hz EnCodec thất bại lặng lẽ.
  • Assuming all codebooks equal.Trong Mimi, codebook 0 mang nội dung; mất nó phá hủy khả năng hiểu biết.
  • Using reconstruction quality as the only metric.Một codec có thể có sự tái tạo tuyệt vời nhưng không thể sử dụng cho thế hệ dựa trên LM nếu cấu trúc ngữ nghĩa không tốt.

Chuyển nó

Cứ như outputs/skill-codec-picker.mdChọn một codec cho một nhiệm vụ tạo hoặc nén nhất định.

Các bài tập

  1. Easy.Đi chạycode/main.pyNó thực hiện một bộ định lượng đồ chơi scalar + dư và đo lỗi tái tạo khi bạn thêm sách mã.
  2. Medium.Thiết lập encodecvà so sánh 1, 4, 8, 32 codebook trên một clip bài phát biểu kéo dài.
  3. Hard.Load Mimi. Encode một clip. Thay thế codebook 0 bằng số nguyên số ngẫu nhiên; decode. Sau đó thay thế codebook 7 tương tự. So sánh hai sự tham nhũng codebook 0 tham nhũng nên phá hủy khả năng hiểu biết; codebook 7 tham nhũng hầu như không thay đổi bất cứ điều gì.

Các điều khoản chính

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.

Đọc thêm

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.