Логотип Data Secrets
Stable Audio

Stability AI выпустила открытую версию Stable Audio

06.06.2024

Stability AI представила Stable Audio Open — открытую версию одноимённой нейросети для генерации музыки и звуковых эффектов. Модель обучили на данных со стоков Free Music Archive и FreeSound. Несмотря на это, нейросеть нельзя использовать в коммерческой деятельности. Для этого требуется подписка на основную версию Stable Audio.

Stable Audio Open работает только в режиме Text-to-Audio и может генерировать аудиофайлы длинной до 47 секунд. Это могут быть как музыкальные композиции, так и звуки окружения, например, пение птиц. В блоге компании отмечают, что модель можно зафайнтюнить, загрузив готовые семплы. На их основе нейросеть будет генерировать контент.

Коммерческая версия Stable Audio поддерживает больше функций. К примеру, она может работать в режиме Audio-to-Audio, редактируя уже готовые треки. Кроме того, нейросеть может генерировать композиции длительностью до трёх минут, соблюдая принципы музыкальной композиции.

Stability AI опубликовала веса Stable Audio Open на платформе Hugging Face, там же доступен текст лицензии, с которой разработчики рекомендуют ознакомиться. Примеры работы модели можно найти на официальном сайте.

Вот код для инференса модели, который поможет попробовать Stable Audio Open уже сейчас:

import torch
import torchaudio
from einops import rearrange
from stable_audio_tools import get_pretrained_model
from stable_audio_tools.inference.generation import generate_diffusion_cond

device = "cuda" if torch.cuda.is_available() else "cpu"

# Загрузка модели
model, model_config = get_pretrained_model("stabilityai/stable-audio-open-1.0")
sample_rate = model_config["sample_rate"]
sample_size = model_config["sample_size"]

model = model.to(device)

# Задаем промпт и ограничения по времени
conditioning = [{
"prompt": "128 BPM tech house drum loop",
"seconds_start": 0,
"seconds_total": 30
}]

# Генерация
output = generate_diffusion_cond(
model,
steps=100,
cfg_scale=7,
conditioning=conditioning,
sample_size=sample_size,
sigma_min=0.3,
sigma_max=500,
sampler_type="dpmpp-3m-sde",
device=device
)

# Собираем инференс в единую аудио-последовательность
output = rearrange(output, "b d n -> d (b n)")

# Peak normalize, clip, convert to int16, and save to file
output = output.to(torch.float32).div(torch.max(torch.abs(output))).clamp(-1, 1).mul(32767).to(torch.int16).cpu()
torchaudio.save("output.wav", output, sample_rate)