SNAC项目介绍
SNAC(Multi-Scale Neural Audio Codec)是一个创新的音频压缩项目,它能够以低比特率将音频压缩为离散代码。该项目的主要目标是为音乐和音效生成提供高效的音频编码解决方案。
项目概述
SNAC采用了类似于SoundStream、EnCodec和DAC的分层令牌编码方法,但引入了一个简单而巧妙的改进:粗糙令牌的采样频率更低,覆盖更广的时间跨度。这种方法使得SNAC能够在保持音频质量的同时,实现更高的压缩率。
本项目中介绍的模型能够将44 kHz的音频压缩到2.6 kbps的比特率,使用了4个RVQ层级,令牌率分别为14、29、57和115 Hz。这种多层级的设计使得SNAC能够更好地捕捉音频的不同时间尺度特征。
预训练模型
SNAC项目提供了多个预训练模型,以适应不同的应用场景:
- snac_24khz:适用于语音,采样率24 kHz,比特率0.98 kbps。
- snac_32khz:适用于音乐和音效,采样率32 kHz,比特率1.9 kbps。
- snac_44khz(本文介绍的模型):适用于音乐和音效,采样率44 kHz,比特率2.6 kbps。
这些模型目前仅支持单声道音频处理。
使用方法
SNAC的使用非常简单。用户可以通过pip安装SNAC包:
pip install snac
然后,可以使用Python代码轻松实现音频的编码和解码:
import torch
from snac import SNAC
model = SNAC.from_pretrained("hubertsiuzdak/snac_44khz").eval().cuda()
audio = torch.randn(1, 1, 44100).cuda() # B, 1, T
with torch.inference_mode():
codes = model.encode(audio)
audio_hat = model.decode(codes)
用户还可以在一次调用中同时完成编码和重建:
with torch.inference_mode():
audio_hat, codes = model(audio)
项目特点
- 低比特率:SNAC能够在极低的比特率下实现高质量的音频压缩。
- 多尺度编码:通过使用不同时间分辨率的令牌序列,SNAC能够更好地捕捉音频的时间结构。
- 灵活性:提供多个预训练模型,适应不同的应用场景和音频类型。
- 易用性:简单的API设计,使得开发者能够轻松集成SNAC到他们的项目中。
结语
SNAC项目为音频压缩和生成领域带来了新的可能性。通过其创新的多尺度编码方法,SNAC在低比特率下实现了高质量的音频压缩,为音乐和音效生成提供了强大的工具。随着项目的进一步发展,我们可以期待看到更多基于SNAC的有趣应用出现。