SNAC matches DAC in perceptual reconstruction quality for speech and music while having significantly lower token rate. It uses multi-scale residual vector quantization with downsampled residuals, depthwise convolutions, local attention, and noise blocks. Best general-purpose choice for speech enhancement and editing pipelines.

Paper: SNAC: Multi-Scale Neural Audio Codec GitHub: hubertsiuzdak/snac

Installation

pip install snac librosa numpy torch

Wrapper Class

import numpy as np
import torch
import librosa
from snac import SNAC

class SNAC_tools:
    def __init__(self):
        self.model = SNAC.from_pretrained("hubertsiuzdak/snac_24khz").eval().cuda()
        self.num_codebooks = 3
        self.device = next(self.model.parameters()).device

    def audio_to_codes(self, audio, sr):
        if sr is None or sr != 24000:
            audio = librosa.resample(audio, orig_sr=sr, target_sr=24000)
        audio = audio.astype(np.float32)
        audio = torch.from_numpy(audio).unsqueeze(0).unsqueeze(0).cuda()
        with torch.inference_mode():
            codes = self.model.encode(audio)
        return codes

    def codes_to_audio(self, codes):
        with torch.inference_mode():
            audio = self.model.decode(codes)
        return audio