Разработка систем AI-генерации музыки и аудио
AI-музыкальная генерация автоматизирует создание фоновой музыки, джинглов, звуковых эффектов для контента, игр, рекламы. Заменяет лицензирование стоковой музыки и студийную запись в случаях с базовыми требованиями.
Сравнение платформ
| Платформа | API | Тип | Управляемость | Лицензия |
|---|---|---|---|---|
| Suno v4 | REST (limited) | Song + vocals | Текстовый промпт | Varies by plan |
| Udio | REST | Song + vocals | Высокая | Commercial |
| MusicGen (Meta) | Self-hosted | Инструментальная | Высокая | MIT/CC |
| AudioCraft | Self-hosted | Музыка + SFX | Высокая | MIT |
| Stable Audio | REST/self | Инструментальная | Высокая | Commercial |
AudioCraft / MusicGen — self-hosted
from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
import torch
class MusicGenerator:
def __init__(self, model_size: str = "medium"):
# Размеры: small (300M), medium (1.5B), large (3.3B), melody
self.model = MusicGen.get_pretrained(f"facebook/musicgen-{model_size}")
self.model.set_generation_params(
duration=30, # секунды (max 30 для standard, до 120 через chunking)
temperature=1.0, # 0.5–1.5
top_k=250,
top_p=0.0,
cfg_coef=3.0 # adherence to prompt
)
def generate(
self,
description: str,
duration: int = 30,
temperature: float = 1.0
) -> bytes:
self.model.set_generation_params(duration=duration, temperature=temperature)
wav = self.model.generate(
descriptions=[description],
progress=True
)
import io
import torchaudio
buf = io.BytesIO()
torchaudio.save(buf, wav[0].cpu(), sample_rate=32000, format="mp3")
return buf.getvalue()
def generate_with_melody(
self,
description: str,
melody_audio: bytes,
duration: int = 30
) -> bytes:
"""Генерируем музыку по мотивам референсной мелодии"""
import io
import torchaudio
melody_wav, sr = torchaudio.load(io.BytesIO(melody_audio))
model = MusicGen.get_pretrained("facebook/musicgen-melody")
model.set_generation_params(duration=duration)
wav = model.generate_with_chroma(
descriptions=[description],
melody_wavs=melody_wav.unsqueeze(0),
melody_sample_rate=sr,
progress=True
)
buf = io.BytesIO()
torchaudio.save(buf, wav[0].cpu(), sample_rate=32000, format="mp3")
return buf.getvalue()
Генерация звуковых эффектов (AudioGen)
from audiocraft.models import AudioGen
sfx_model = AudioGen.get_pretrained("facebook/audiogen-medium")
sfx_model.set_generation_params(duration=5)
def generate_sound_effect(description: str, duration: float = 3.0) -> bytes:
sfx_model.set_generation_params(duration=duration)
wav = sfx_model.generate(descriptions=[description])
import io, torchaudio
buf = io.BytesIO()
torchaudio.save(buf, wav[0].cpu(), sample_rate=16000, format="wav")
return buf.getvalue()
# Примеры: "forest ambience with birds", "robot beeping", "door creaking"
Применения по контексту
| Применение | Рекомендуемая платформа | Параметры |
|---|---|---|
| Фоновая музыка для видео | MusicGen medium/large | "ambient, {настроение}, {темп}" |
| Джингл для рекламы | Suno/Udio (с вокалом) | Конкретный бренд промпт |
| Звуки для игры | AudioGen | Конкретные описания SFX |
| Музыка под настроение сцены | MusicGen melody | Референс + описание |
| Интро/аутро подкаста | Stable Audio | "podcast intro, {жанр}, 15 seconds" |
FastAPI сервис
from fastapi import FastAPI
from pydantic import BaseModel
app = FastAPI()
music_gen = MusicGenerator("medium")
class MusicRequest(BaseModel):
description: str
duration: int = 30
temperature: float = 1.0
@app.post("/generate/music")
async def generate_music(req: MusicRequest):
audio = music_gen.generate(req.description, req.duration, req.temperature)
return Response(content=audio, media_type="audio/mpeg")
Сроки: self-hosted MusicGen API — 1–2 дня. Платформа с несколькими моделями, очередью и CDN-хранилищем — 2–3 недели.







