신경망 오디오 코덱 — EnCodec, SNAC, Mimi, DAC

2026년 오디오 생성(audio generation)은 거의 모두 토큰(token) 위에서 동작합니다. EnCodec, SNAC, Mimi, DAC는 연속(continuous) 파형(waveform)을 트랜스포머(Transformer)가 예측할 수 있는 이산(discrete) 시퀀스로 바꿉니다. 의미(semantic) 토큰과 음향(acoustic) 토큰을 나누는 분할(semantic-vs-acoustic token split), 즉 첫 코드북(codebook)은 의미 토큰으로, 나머지는 음향 토큰으로 분리하는 구조는 오디오 분야에서 트랜스포머 이후 가장 중요한 아키텍처 변화(architecture shift)입니다.

유형: Learn 언어: Python 선수 강의: Phase 6 · 02 (Spectrograms), Phase 10 · 11 (Quantization), Phase 5 · 19 (Subword Tokenization) 예상 시간: 약 60분

학습 목표

  • 신경망 오디오 코덱(neural audio codec)이 연속 파형을 이산 토큰으로 바꾸는 이유를 설명합니다.
  • 잔차 벡터 양자화(Residual Vector Quantization; RVQ)의 캐스케이드(cascade) 구조를 이해합니다.
  • 복원 우선(reconstruction-first) 코덱과 의미 우선(semantic-first) 코덱을 구분합니다.
  • Mimi의 의미/음향 코드북 분할이 Moshi 같은 모델(model)을 가능하게 하는 이유를 설명합니다.

문제

언어 모델(language model)은 이산 토큰 위에서 동작합니다. 오디오는 연속 신호(continuous signal)입니다. 음성이나 음악을 위한 LLM 형태의 모델, 예를 들어 MusicGen, Moshi, Sesame CSM, VibeVoice, Orpheus를 만들려면 먼저 신경망 오디오 코덱(neural audio codec) 이 필요합니다. 신경망 오디오 코덱은 오디오를 작은 어휘(vocabulary)의 토큰으로 이산화(discretize)하는 학습된 인코더(encoder)와, 이를 다시 파형으로 복원하는 짝이 되는 디코더(decoder)로 구성됩니다.

두 가지 계열이 등장했습니다.

  1. 복원 우선 코덱(reconstruction-first codecs). EnCodec, DAC처럼 지각적 오디오 품질(perceptual audio quality)을 최적화합니다. 토큰은 "음향(acoustic)"입니다. 화자 정체성(speaker identity), 음색(timbre), 배경 잡음(background noise)을 포함해 모든 것을 담습니다.
  2. 의미 우선 코덱(semantic-first codecs). Mimi(Kyutai), SpeechTokenizer처럼 첫 코드북이 언어적(linguistic) / 음운적(phonetic) 내용을 인코딩(encode)하도록 강제합니다. WavLM에서 증류(distill)하는 경우가 많습니다. 그 뒤의 코드북은 음향 디테일을 담습니다.

2024-2026년의 핵심 통찰은 다음과 같습니다. 순수한 복원 코덱(pure reconstruction codec)으로 텍스트에서 음성을 생성하려고 하면 음성이 흐릿해집니다. 코덱 토큰 위에서 동작하는 LLM이 언어 구조(language structure)와 음향 구조(acoustic structure)를 같은 코드북에서 모두 학습해야 하는데, 이 방식은 규모(scale) 면에서 잘 확장되지 않습니다. 의미 코드북 0과 음향 코드북 1-N으로 분리하는 것이 바로 Moshi와 Sesame CSM이 작동하는 비결입니다.

사전 테스트

2문제 · 이 강의를 시작하기 전에 얼마나 알고 있는지 확인해보세요

1.현대 오디오 생성 모델이 원시 파형(raw waveform) 샘플을 직접 다루지 않고 신경망 오디오 코덱(neural audio codec)을 필요로 하는 이유는 무엇인가요?

2.잔차 벡터 양자화(Residual Vector Quantization; RVQ)에서 각 후속 코드북(codebook)은 무엇을 양자화하나요?

0/2 답변 완료

개념

neural audio codecs — four variations on RVQ, one semantic/acoustic split EnCodec (Meta, 2022) acoustic RVQ baseline wav → conv+transformer+conv → RVQ (4-32 codebooks) → decoder → wav 75 Hz · 24 kHz · used by MusicGen PESQ 3.2 @ 6 kbps DAC (Descript, 2023) reconstruction king EnCodec + L2-norm codebooks periodic activations improved losses 44.1 kHz full-band · PESQ 3.5 @ 6 kbps SNAC (Siuzdak 2024) multi-scale RVQ coarse codes @ 12 Hz medium @ 25 Hz fine @ 50 Hz hierarchical → AR-LM friendly used by Orpheus-3B Mimi (Kyutai 2024) semantic + acoustic split codebook 0 — WavLM distilled (semantic) codebooks 1-7 — acoustic 12.5 Hz · 4.4 kbps · powers Moshi used by Sesame CSM why this matters for language modeling over audio 10 s speech × 12.5 Hz × 8 codebooks = 1000 tokens → trivial transformer context factorize: LM predicts semantic codebook 0 first (text-aligned), then acoustic codebooks 1-7 result: zero-shot voice cloning (semantic = content, acoustic conditioned on reference) pick by the problem music generation → EnCodec-24k · MusicGen, AudioLDM highest fidelity → DAC-44.1k · audio restoration, editing AR LM over speech → SNAC or Mimi · TTS, codec LM full-duplex streaming → Mimi only · Moshi, Sesame CSM

핵심 기술: 잔차 벡터 양자화(Residual Vector Quantization; RVQ)

좋은 품질을 얻기 위해 하나의 거대한 코드북을 만들면 수백만 개의 코드(code)가 필요합니다. 그래서 현대 오디오 코덱은 모두 RVQ를 사용합니다. RVQ는 작은 코드북들을 캐스케이드로 쌓은 구조입니다. 첫 코드북이 인코더 출력(encoder output)을 양자화(quantize)하고, 두 번째 코드북이 그 잔차(residual)를 양자화하며, 이런 식으로 이어집니다. 각 코드북은 1024개의 코드를 가집니다. 코드북이 8개라면 유효 어휘 크기(effective vocabulary)는 1024^8 = 10^24 수준입니다.

추론(inference) 시점에는 디코더가 각 프레임(frame)마다 선택된 모든 코드를 합산해 신호를 복원합니다.

2026년에 중요한 네 가지 코덱

EnCodec (Meta, 2022). 기준선(baseline)입니다. 파형 위에서 동작하는 인코더-디코더와 RVQ 병목(bottleneck)을 사용합니다. 24 kHz이고, 최대 32개의 코드북을 사용할 수 있으며 기본값은 1.5 kbps에서 4개 코드북입니다. 1D conv + transformer + 1D conv 아키텍처를 사용합니다. MusicGen에서 쓰입니다.

DAC (Descript, 2023). L2 정규화된 코드북(L2-normalized codebooks), 주기적 활성 함수(periodic activation functions), 개선된 손실(improved losses)을 사용하는 RVQ 코덱입니다. 공개된 코덱 중 복원 충실도(reconstruction fidelity)가 가장 높습니다. 12개의 코드북을 사용하면 원래 음성과 구분하기 어려울 때도 있습니다. 44.1 kHz 풀밴드(full-band)를 지원합니다.

SNAC (Hubert Siuzdak, 2024). 다중 스케일(multi-scale) RVQ입니다. 거친(coarse) 코드북은 더 낮은 프레임 레이트(frame rate)에서 동작하고, 세밀한(fine) 코드북은 더 높은 프레임 레이트에서 동작합니다. 사실상 오디오를 계층적(hierarchical)으로 모델링(modeling)합니다. 약 12 Hz의 거친 "스케치(sketch)"와 50 Hz의 세부 정보를 함께 둡니다. Orpheus-3B에서 사용되며, 이 계층 구조가 언어 모델 기반 생성(LM-based generation)과 잘 맞기 때문입니다.

Mimi (Kyutai, 2024). 2026년의 판도를 바꾼 코덱(game-changer)입니다. 프레임 레이트가 12.5 Hz로 매우 낮고, 4.4 kbps에서 8개의 코드북을 사용합니다. 코드북 0은 WavLM에서 증류됩니다. WavLM의 음성 콘텐츠(speech-content) 특징을 예측하도록 학습됩니다. 코드북 1-7은 음향 잔차입니다. 이 분할이 Moshi(Lesson 15)와 Sesame CSM을 구동합니다.

언어 모델링에서 프레임 레이트가 중요한 이유

프레임 레이트가 낮을수록 시퀀스 길이가 짧아지고 언어 모델이 빨라집니다.

코덱프레임 레이트1초 = N 프레임적합한 용도
EnCodec-24k75 Hz75음악, 일반 오디오
DAC-44.1k86 Hz86고음질 음악
SNAC-24k (coarse)약 12 Hz12AR-LM 효율
Mimi12.5 Hz12.5스트리밍 음성

12.5 Hz에서는 10초짜리 발화(utterance)가 125개의 코덱 프레임에 불과합니다. 트랜스포머가 쉽게 예측할 수 있는 길이입니다.

의미 토큰 대 음향 토큰(semantic vs acoustic tokens)

frame_t -> [semantic_token_t, acoustic_token_0_t, acoustic_token_1_t, ..., acoustic_token_6_t]
  • 의미 토큰(semantic token, Mimi의 코드북 0). 무엇을 말했는지, 즉 음소(phoneme), 단어(word), 내용(content)을 인코딩합니다. 보조 예측 손실(auxiliary prediction loss)을 통해 WavLM에서 증류됩니다.
  • 음향 토큰(acoustic tokens, 코드북 1-7). 음색, 화자 정체성, 운율(prosody), 배경 잡음, 세부 디테일을 인코딩합니다.

자기회귀(autoregressive; AR) 언어 모델은 먼저 의미 토큰을 텍스트에 조건화해 예측한 뒤, 의미 토큰과 화자 참조(speaker reference)에 조건화해 음향 토큰을 예측합니다. 이러한 분해(factorization) 덕분에 현대 TTS는 영점샷(zero-shot) 음성 복제(voice cloning)를 할 수 있습니다. 의미 모델은 내용을 다루고, 음향 모델은 음색을 다룹니다.

2026년 복원 품질(초당 비트 수, 비트 전송률(bitrate)이 낮을수록 좋음)

코덱비트 전송률PESQViSQOL
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

Opus 같은 전통 코덱은 여전히 비트당 지각 품질에서 우위를 점합니다. 신경망 코덱이 우위에 있는 영역은 이산 토큰을 만들어 낸다는 점, 그리고 그 토큰을 사용했을 때의 생성 모델 품질(generative-model quality) 입니다. Opus는 이러한 토큰을 만들지 않습니다.

직접 만들기

Step 1: 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

6 kbps에서는 n_codebooks=8입니다. 각 코드 값은 0-1023(10-bit) 범위입니다.

Step 2: 디코딩하고 복원 품질 측정하기

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

Step 3: 의미-음향 분할 (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:]

의미 코드북 0은 WavLM과 정렬(WavLM-aligned)됩니다. 텍스트-투-의미(text-to-semantic) 트랜스포머를 학습할 수 있으며, 이는 직접 오디오로 가는 경우(direct-to-audio)보다 어휘 크기가 훨씬 작습니다. 그다음 별도의 음향-투-파형(acoustic-to-waveform) 디코더가 화자 참조에 조건화되어 동작합니다.

Step 4: 코덱 토큰 위의 AR 언어 모델이 작동하는 이유

Mimi의 12.5 Hz × 8 코드북으로 10초짜리 음성 클립을 표현하면 다음과 같습니다.

N_tokens = 10 * 12.5 * 8 = 1000 tokens

1000개 토큰은 트랜스포머에게 매우 작은 컨텍스트(context)입니다. 256M 파라미터(parameter)짜리 트랜스포머도 현대 GPU에서 10초짜리 음성을 밀리초 단위로 생성할 수 있습니다.

사용하기

문제를 코덱과 짝지어 봅니다.

작업코덱
일반 음악 생성EnCodec-24k
최고 충실도 복원DAC-44.1k
음성(TTS) 위의 AR 언어 모델SNAC 또는 Mimi
스트리밍 풀듀플렉스(full-duplex) 음성Mimi (12.5 Hz)
텍스트 조건의 효과음 라이브러리EnCodec + T5 condition
정밀한 오디오 편집(audio editing)DAC + inpainting

경험칙(rule of thumb): 생성 모델을 만든다면 Mimi 또는 SNAC에서 시작합니다. 압축 파이프라인(compression pipeline)을 만든다면 Opus를 씁니다.

흔한 함정

  • 코드북을 너무 많이 두는 경우(Too many codebooks). 코드북을 추가하면 충실도(fidelity)도 선형으로 올라가지만 언어 모델의 시퀀스 길이도 선형으로 늘어납니다. 8-12개에서 멈춥니다.
  • 프레임 레이트 불일치(Frame-rate mismatch). 12.5 Hz Mimi로 학습한 언어 모델을 50 Hz EnCodec으로 미세 조정(fine-tune)하면 조용히 실패합니다.
  • 모든 코드북이 같다고 가정하기. Mimi에서 코드북 0은 내용을 담습니다. 이를 잃으면 가청도(intelligibility)가 무너집니다. 반면 코드북 7을 잃는 것은 거의 티가 나지 않습니다.
  • 복원 품질만 지표로 사용하기. 코덱의 복원 품질이 훌륭해도 의미 구조가 나쁘면 언어 모델 기반 생성에는 쓸모가 없습니다.

산출물 만들기

outputs/skill-codec-picker.md로 저장합니다. 주어진 생성 작업이나 압축 작업에 맞는 코덱을 골라 주는 스킬(skill)입니다.

연습문제

  1. 쉬움. code/main.py를 실행합니다. 토이(toy) 스칼라 + 잔차 양자화기(scalar + residual quantizer)를 구현하고 코드북을 추가할수록 복원 오차가 어떻게 줄어드는지 측정합니다.
  2. 중간. encodec을 설치하고 별도의 테스트용 음성 클립에서 1, 4, 8, 32개의 코드북을 비교합니다. 비트 전송률 대비 PESQ 또는 MSE를 그래프로 그립니다.
  3. 어려움. Mimi를 불러옵니다. 클립을 인코딩합니다. 코드북 0을 무작위 정수로 바꾸고 디코딩합니다. 그런 다음 코드북 7도 같은 방식으로 바꿉니다. 두 가지 손상(corruption)을 비교합니다. 코드북 0 손상은 가청도를 파괴해야 하고, 코드북 7 손상은 거의 차이가 없어야 합니다.

핵심 용어

용어흔한 설명실제 의미
RVQ잔차 양자화(Residual quantization)작은 코드북을 캐스케이드로 쌓은 구조입니다. 각 코드북은 이전 잔차를 양자화합니다.
프레임 레이트(Frame rate)코덱 속도초당 토큰 프레임 수입니다. 낮을수록 언어 모델이 빨라집니다.
의미 코드북(Semantic codebook)Mimi의 코드북 0SSL 특징에서 증류한 코드북이며 내용을 인코딩합니다.
음향 코드북(Acoustic codebooks)나머지 전부음색, 운율, 잡음, 세부 디테일을 담습니다.
PESQ / ViSQOL지각 품질MOS와 상관관계가 있는 객관 지표(objective metric)입니다.
EnCodecMeta 코덱RVQ 기준선이며 MusicGen에서 사용됩니다.
MimiKyutai 코덱12.5 Hz 프레임 레이트, 의미-음향 분할을 갖고 있으며 Moshi를 구동합니다.

더 읽을거리

실습 코드

이 강의의 실습 코드 1개

main
Code

산출물

이 강의에서 생성된 프롬프트, 스킬, 코드 산출물 1개

codec-picker

Pick a neural audio codec (EnCodec / DAC / SNAC / Mimi) for a given generative or compression task.

Skill

확인 문제

3문제 · 모두 맞추면 완료 표시가 가능합니다

1.한 팀이 Mimi로 음성을 인코딩한 뒤 코드북 0의 토큰을 무작위로 손상시키고 디코딩합니다. 두 번째 실험에서는 코드북 7을 같은 방식으로 손상시킵니다. 어떤 차이를 관찰해야 하나요?

2.코덱 토큰 위에 자기회귀 언어 모델(AR language model)을 구축할 때, Mimi의 12.5 Hz 프레임 레이트(frame rate)가 EnCodec의 75 Hz보다 유리한 이유는 무엇인가요?

3.DAC 같은 순수 복원 코덱(pure reconstruction codec)이 Mimi보다 높은 PESQ를 달성하는데도, Moshi 같은 텍스트-투-스피치 시스템은 Mimi를 사용합니다. 이 선택을 설명하는 이유는 무엇인가요?

0/3 답변 완료

추가 문제 풀기

AI가 강의 내용을 바탕으로 새로운 문제를 생성합니다