Skip to content

LX588387/soniq

Repository files navigation

soniq

CI Python License: MIT Code style: ruff

低比特率神经音频编解码器 + 残差矢量量化 —— 把连续音频转成离散 token 的工具包。

soniq 是一套面向音频语言模型的核心基础设施:用一个 SEANet 风格的卷积 编码器把波形压到低帧率隐层,用**残差矢量量化(RVQ)**把每一帧离散成若干 码本索引(token),再用对称的解码器还原回波形。整条管线纯 PyTorch 实现, CPU 即可运行,WAV 读写只依赖标准库。

波形 ──SEANet编码器──▶ 隐层 [B, dim, F] ──RVQ──▶ token [B, Nq, F]
                                                      │
波形 ◀──SEANet解码器── 隐层 [B, dim, F] ◀──码本查表──┘

特性

  • 🎛 SEANet 编解码器:膨胀残差单元 + 步长卷积下采样,Snake 激活、权重归一化。
  • 🧩 残差矢量量化:分解低维码本、L2 归一化余弦最近邻、直通估计、可变层数。
  • 🪙 离散 tokenencode() 直接给出 [B, n_codebooks, frames] 的整数 token,喂给音频 LM。
  • 📉 可变比特率:训练期 quantizer dropout,推理期 n_quantizers 一键换带宽。
  • 🧮 比特率工具:帧率 / token 速率 / kbps 一行算清,码流可存 .npz
  • 🧰 零重型依赖:不需要 torchaudio / librosa,torch + numpy + einops 即可。
  • 🖥 命令行soniq encode / decode / reconstruct / info / presets

安装

pip install soniq          # 从 PyPI(发布后)
# 或从源码
git clone https://github.com/LX588387/soniq
cd soniq && pip install -e ".[dev]"

快速上手

import torch
from soniq import NeuralCodec

codec = NeuralCodec.from_preset("soniq-24khz-6kbps").eval()

wav = torch.randn(1, 1, 24000)          # 1 秒 24kHz 单声道
codes = codec.encode(wav)               # [1, 8, 75]  —— 每秒 600 个 token
recon = codec.decode(codes, length=wav.shape[-1])

print(codes.shape, f"{codec.bitrate/1000:.1f} kbps")

命令行:

soniq info --preset soniq-24khz-6kbps
soniq encode input.wav tokens.npz
soniq decode tokens.npz recon.wav

⚠️ 本仓库提供完整的模型结构与训练脚手架,但不随附训练好的权重(体积过大)。 直接用随机初始化的模型可以验证整条管线、张量形状与比特率换算;要得到高保真 重建,请参考 examples/04_train_toy.pydocs/usage.md 自行训练并用 --checkpoint 载入。

预设

预设 采样率 码本 比特率
soniq-24khz-6kbps 24 kHz 8 × 1024 6.0 kbps
soniq-24khz-3kbps 24 kHz 4 × 1024 3.0 kbps
soniq-16khz-3kbps 16 kHz 6 × 1024 3.0 kbps

文档

许可

MIT © Dai Yanan

About

低比特率神经音频编解码器 + 残差矢量量化:把连续音频转成离散 token,服务音频语言模型

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages