Интеграция MusicGen (Meta) для генерации музыки

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1Все 1566 услуг
Интеграция MusicGen (Meta) для генерации музыки
Простой
~2-3 дня
Часто задаваемые вопросы

Направления AI-разработки

Этапы разработки AI-решения

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    901
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1119
  • image_logo-advance_0.webp
    Разработка логотипа компании B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    853

Интеграция MusicGen (Meta) для генерации музыки

MusicGen от Meta — open-source модель с MIT-совместимой лицензией для коммерческого использования. Генерирует инструментальную музыку до 30 секунд (или дольше через chunking) по текстовому описанию или с учётом мелодии-референса.

Установка и базовое использование

from audiocraft.models import MusicGen
import torchaudio
import torch
import io

# Размеры: small (300M params), medium (1.5B), large (3.3B), melody
model = MusicGen.get_pretrained("facebook/musicgen-large")

model.set_generation_params(
    duration=30,         # секунды
    temperature=1.0,     # разнообразие (0.5–1.5)
    top_k=250,
    cfg_coef=3.0         # adherence to text prompt (1–10)
)

def generate_music(
    description: str,
    duration: int = 30,
    cfg_coef: float = 3.0
) -> bytes:
    model.set_generation_params(duration=duration, cfg_coef=cfg_coef)

    wav = model.generate(
        descriptions=[description],
        progress=True
    )

    buf = io.BytesIO()
    torchaudio.save(buf, wav[0].cpu(), sample_rate=32000, format="mp3")
    return buf.getvalue()

MusicGen Melody — генерация по мотивам

melody_model = MusicGen.get_pretrained("facebook/musicgen-melody")

def generate_variation(reference_audio: bytes, style_description: str) -> bytes:
    melody_wav, sr = torchaudio.load(io.BytesIO(reference_audio))

    melody_model.set_generation_params(duration=30)
    wav = melody_model.generate_with_chroma(
        descriptions=[style_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()

Промпты по жанрам

MUSICGEN_STYLE_PROMPTS = {
    "corporate": "uplifting corporate background, piano, strings, positive mood, no drums",
    "lofi": "lofi hip hop, relaxing, vinyl crackle, mellow piano, slow beat",
    "epic": "epic orchestral, cinematic, strings, brass, powerful drums, intense",
    "ambient": "ambient electronic, atmospheric, pads, soft synths, meditative",
    "jazz": "smooth jazz, saxophone, double bass, brushed drums, relaxed",
    "acoustic": "acoustic guitar, warm, folk style, fingerpicking, natural reverb",
}

Длинные треки через chunking

def generate_long_music(description: str, total_duration: int = 120) -> bytes:
    """Генерируем музыку длиннее 30 секунд через перекрывающиеся чанки"""
    chunk_duration = 30
    overlap = 5
    chunks = []

    # Первый чанк
    model.set_generation_params(duration=chunk_duration)
    wav = model.generate([description]).cpu()
    chunks.append(wav[0])

    # Последующие чанки с conditioned на предыдущем
    while sum(w.shape[-1] for w in chunks) / 32000 < total_duration - overlap:
        continuation = model.generate_continuation(
            chunks[-1][:, :, -int(overlap * 32000):],
            prompt_sample_rate=32000,
            descriptions=[description]
        )
        chunks.append(continuation[0].cpu())

    # Конкатенируем с crossfade
    full_wav = torch.cat(chunks, dim=-1)[:, :int(total_duration * 32000)]

    buf = io.BytesIO()
    torchaudio.save(buf, full_wav, sample_rate=32000, format="mp3")
    return buf.getvalue()

MusicGen large на A100 генерирует 30 сек за ~20 сек реального времени. На RTX 3090 — ~45 сек. MIT лицензия позволяет коммерческое использование без роялти. Сроки деплоя REST API — 1 день.