Розробка систем 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 — розміщено самостійно
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 |
| Джингл для реклами 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 тижні.







