{/ Эта страница автоматически передается из навыков SKILL.md с помощью сайта/scripts/generate-skill-docs.py. Редактируйте исходный SKILL.md, а не эту страницу. /}

Генерация аудио Audiocraft

AudioCraft: преобразование текста в музыку MusicGen, преобразование текста в звук AudioGen.

Метаданные навыки

Источник Встроенный (устанавливается по умолчанию)
Путь навыки/млопсы/модели/аудиоремесло
Версия 1.0.0
Автор Исследование оркестра
Лицензия Массачусетский технологический институт
Зависимости аудиокрафт, факел>=2.0.0, трансформеры>=4.30.0
Платформы Linux, MacOS
Теги «Мультимодальный», «Генерация аудио», «Преобразование текста в музыку», «Преобразование текста в аудио», «MusicGen»

Справочник: полный SKILL.md:::информация

Ниже приведено полное описание навыков, которые Hermes загружает при его активации. Агент увидит эту инструкцию, когда навыки активны.

AudioCraft: Генерация аудио

Исчерпывающее руководство по использованию AudioCraft от Meta для генерации музыки и аудио из текста с помощью MusicGen, AudioGen и EnCodec.

Когда использовать AudioCraft

Используйте AudioCraft когда: - Нужно включить музыку по текстовым описаниям - Создавать звуковые эффекты и окружающий аудиофон. - Создать приложения для генерации музыки - Нужна генерация музыки с условиями по мелодии - Требуется стереоаудио на выходе - Нужна управляемая генерация музыки с переносом стиля.

Ключевые возможности: - MusicGen: генерация музыки из текста с условиями по мелодии. - AudioGen: генерация звуковых эффектов из текста. - EnCodec: высококачественный нейронный аудиокодек - Несколько размеров моделей: от маленького (300M) до большого (3,3B). - Поддержка стерео: полноценная генерация стерео-аудио - Условие по стилю: MusicGen-Style для генерации на основе референса

Вместо этого викор альтернативы: - Стабильный звук: для более длительной коммерческой генерации музыки. - Bark: для синтеза речи с музыкой/звуковыми эффектами. - Riffusion: для генерации музыки на основе спектрограммы - OpenAI Jukebox: для генерации сырого аудио с текстами песен.

Быстрый старт

Установка

# Из PyPI
pip install audiocraft

# Из GitHub (последняя версия)
pip install git+https://github.com/facebookresearch/audiocraft.git

# Или используйте HuggingFace Transformers
pip install transformers torch torchaudio

Базовая генерация музыки из текста (AudioCraft)

import torchaudio
from audiocraft.models import MusicGen

# Загрузка модели
model = MusicGen.get_pretrained('facebook/musicgen-small')

# Установка параметров генерации
model.set_generation_params(
    duration=8,  # секунды
    top_k=250,
    temperature=1.0
)

# Генерация из текста
descriptions = ["happy upbeat electronic dance music with synths"]
wav = model.generate(descriptions)

# Сохранение аудио
torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)

Использование HuggingFace Transformers

from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy

# Загрузка модели и процессора
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda")

# Генерация музыки
inputs = processor(
    text=["80s pop track with bassy drums and synth"],
    padding=True,
    return_tensors="pt"
).to("cuda")

audio_values = model.generate(
    **inputs,
    do_sample=True,
    guidance_scale=3,
    max_new_tokens=256
)

# Сохранение
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("output.wav", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())

Генерация звука с AudioGen

from audiocraft.models import AudioGen

# Загрузка AudioGen
model = AudioGen.get_pretrained('facebook/audiogen-medium')

model.set_generation_params(duration=5)

# Генерация звуковых эффектов
descriptions = ["dog barking in a park with birds chirping"]
wav = model.generate(descriptions)

torchaudio.save("sound.wav", wav[0].cpu(), sample_rate=16000)

Основные концепции

Обзор конструкции

Архитектура AudioCraft:
┌──────────────────────────────────────────────────────────────┐
│                    Текстовый энкодер (T5)                     │
│                         │                                     │
│                    Текстовые эмбеддинги                       │
└────────────────────────┬─────────────────────────────────────┘
                         │
┌────────────────────────▼─────────────────────────────────────┐
│              Трансформерный декодер (LM)                      │
│     Авторегрессивно генерирует аудио-токены                   │
│     Используя эффективные паттерны чередования токенов        │
└────────────────────────┬─────────────────────────────────────┘
                         │
┌────────────────────────▼─────────────────────────────────────┐
│                Аудиодекодер EnCodec                           │
│        Преобразует токены обратно в аудиосигнал               │
└──────────────────────────────────────────────────────────────┘

Варианты моделей

Модель Размер Описание Сценарий использования
музыкальный-маленький 300М Текст-в-музыку Быстрая генерация
musicgen-medium 1,5Б Текст-в-музыку Сбалансированный
музыкальный-большой 3.3Б Текст-в-музыку Лучшее качество
музыкальная мелодия 1,5Б Текст + мелодия Условие по мелодии
musicgen-мелодия-большая 3.3Б Текст + мелодия Лучшая мелодия
musicgen-стерео-* Разный Стереовод Стереогенерация
музыкальный стиль 1,5Б Перенос стиля На основе референса
аудиоген-медиум 1,5Б Текст-в-звук Звуковые эффекты

Параметры генерации

Параметр По умолчанию Описание
продолжительность 8.0 Продолжительность в секундах (1-120)
top_k 250 Топ-к сэмплирование
top_p 0,0 Nucleus сэмплирование (0 = отключено)
температура 1.0 Температурный сэмплирования
cfg_coef 3.0 Коэффициент бесклассового руководства

Использование MusicGen

Генерация музыки из текста

from audiocraft.models import MusicGen
import torchaudio

model = MusicGen.get_pretrained('facebook/musicgen-medium')

# Настройка генерации
model.set_generation_params(
    duration=30,          # До 30 секунд
    top_k=250,            # Разнообразие сэмплирования
    top_p=0.0,            # 0 = использовать только top_k
    temperature=1.0,      # Креативность (выше = разнообразнее)
    cfg_coef=3.0          # Приверженность тексту (выше = строже)
)

# Генерация нескольких образцов
descriptions = [
    "epic orchestral soundtrack with strings and brass",
    "chill lo-fi hip hop beat with jazzy piano",
    "energetic rock song with electric guitar"
]

# Генерация (возвращает [batch, channels, samples])
wav = model.generate(descriptions)

# Сохранение каждого
for i, audio in enumerate(wav):
    torchaudio.save(f"music_{i}.wav", audio.cpu(), sample_rate=32000)

Генерация с условием по мелодии

from audiocraft.models import MusicGen
import torchaudio

# Загрузка модели для мелодии
model = MusicGen.get_pretrained('facebook/musicgen-melody')
model.set_generation_params(duration=30)

# Загрузка аудио с мелодией
melody, sr = torchaudio.load("melody.wav")

# Генерация с условием по мелодии
descriptions = ["acoustic guitar folk song"]
wav = model.generate_with_chroma(descriptions, melody, sr)

torchaudio.save("melody_conditioned.wav", wav[0].cpu(), sample_rate=32000)

Стереогенерация

from audiocraft.models import MusicGen

# Загрузка стереомодели
model = MusicGen.get_pretrained('facebook/musicgen-stereo-medium')
model.set_generation_params(duration=15)

descriptions = ["ambient electronic music with wide stereo panning"]
wav = model.generate(descriptions)

# Форма wav: [batch, 2, samples] для стерео
print(f"Стереоформа: {wav.shape}")  # [1, 2, 480000]
torchaudio.save("stereo.wav", wav[0].cpu(), sample_rate=32000)

Продолжение аудио

from transformers import AutoProcessor, MusicgenForConditionalGeneration

processor = AutoProcessor.from_pretrained("facebook/musicgen-medium")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-medium")

# Загрузка аудио для продолжения
import torchaudio
audio, sr = torchaudio.load("intro.wav")

# Обработка с текстом и аудио
inputs = processor(
    audio=audio.squeeze().numpy(),
    sampling_rate=sr,
    text=["continue with a epic chorus"],
    padding=True,
    return_tensors="pt"
)

# Генерация продолжения
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=512)

Использование MusicGen-Style

Генерация с условием по стилю

from audiocraft.models import MusicGen

# Загрузка модели стиля
model = MusicGen.get_pretrained('facebook/musicgen-style')

# Настройка генерации со стилем
model.set_generation_params(
    duration=30,
    cfg_coef=3.0,
    cfg_coef_beta=5.0  # Влияние стиля
)

# Настройка кондиционера стиля
model.set_style_conditioner_params(
    eval_q=3,          # RVQ квантователи (1-6)
    excerpt_length=3.0  # Длина фрагмента стиля
)

# Загрузка референса стиля
style_audio, sr = torchaudio.load("reference_style.wav")

# Генерация с текстом + стилем
descriptions = ["upbeat dance track"]
wav = model.generate_with_style(descriptions, style_audio, sr)

Генерация только по стилю (без текста)

# Генерация соответствующего стиля без текстового запроса
model.set_generation_params(
    duration=30,
    cfg_coef=3.0,
    cfg_coef_beta=None  # Отключить двойной CFG для только стиля
)

wav = model.generate_with_style([None], style_audio, sr)

Использование AudioGen

Генерация звуковых эффектов

from audiocraft.models import AudioGen
import torchaudio

model = AudioGen.get_pretrained('facebook/audiogen-medium')
model.set_generation_params(duration=10)

# Генерация различных звуков
descriptions = [
    "thunderstorm with heavy rain and lightning",
    "busy city traffic with car horns",
    "ocean waves crashing on rocks",
    "crackling campfire in forest"
]

wav = model.generate(descriptions)

for i, audio in enumerate(wav):
    torchaudio.save(f"sound_{i}.wav", audio.cpu(), sample_rate=16000)

Использование EnCodec

Сжатие аудио

from audiocraft.models import CompressionModel
import torch
import torchaudio

# Загрузка EnCodec
model = CompressionModel.get_pretrained('facebook/encodec_32khz')

# Загрузка аудио
wav, sr = torchaudio.load("audio.wav")

# Проверка правильной частоты дискретизации
if sr!= 32000:
    resampler = torchaudio.transforms.Resample(sr, 32000)
    wav = resampler(wav)

# Кодирование в токены
with torch.no_grad():
    encoded = model.encode(wav.unsqueeze(0))
    codes = encoded[0]  # Аудиокоды

# Декодирование обратно в аудио
with torch.no_grad():
    decoded = model.decode(codes)

torchaudio.save("reconstructed.wav", decoded[0].cpu(), sample_rate=32000)

Типовые рабочие процессы

Рабочий процесс 1: Конвейер генерации музыки

import torch
import torchaudio
from audiocraft.models import MusicGen

class MusicGenerator:
    def __init__(self, model_name="facebook/musicgen-medium"):
        self.model = MusicGen.get_pretrained(model_name)
        self.sample_rate = 32000

    def generate(self, prompt, duration=30, temperature=1.0, cfg=3.0):
        self.model.set_generation_params(
            duration=duration,
            top_k=250,
            temperature=temperature,
            cfg_coef=cfg
        )

        with torch.no_grad():
            wav = self.model.generate([prompt])

        return wav[0].cpu()

    def generate_batch(self, prompts, duration=30):
        self.model.set_generation_params(duration=duration)

        with torch.no_grad():
            wav = self.model.generate(prompts)

        return wav.cpu()

    def save(self, audio, path):
        torchaudio.save(path, audio, sample_rate=self.sample_rate)

# Использование
generator = MusicGenerator()
audio = generator.generate(
    "epic cinematic orchestral music",
    duration=30,
    temperature=1.0
)
generator.save(audio, "epic_music.wav")

Рабочий процесс 2: Пакетная обработка звукового дизайна

import json
from pathlib import Path
from audiocraft.models import AudioGen
import torchaudio

def batch_generate_sounds(sound_specs, output_dir):
    """
    Генерирует несколько звуков по спецификациям.

    Args:
        sound_specs: список {"name": str, "description": str, "duration": float}
        output_dir: путь к выходной директории
    """
    model = AudioGen.get_pretrained('facebook/audiogen-medium')
    output_dir = Path(output_dir)
    output_dir.mkdir(exist_ok=True)

    results = []

    for spec in sound_specs:
        model.set_generation_params(duration=spec.get("duration", 5))

        wav = model.generate([spec["description"]])

        output_path = output_dir / f"{spec['name']}.wav"
        torchaudio.save(str(output_path), wav[0].cpu(), sample_rate=16000)

        results.append({
            "name": spec["name"],
            "path": str(output_path),
            "description": spec["description"]
        })

    return results

# Использование
sounds = [
    {"name": "explosion", "description": "massive explosion with debris", "duration": 3},
    {"name": "footsteps", "description": "footsteps on wooden floor", "duration": 5},
    {"name": "door", "description": "wooden door creaking and closing", "duration": 2}
]

results = batch_generate_sounds(sounds, "sound_effects/")

Рабочий процесс 3: Демо-версия Gradio

import gradio as gr
import torch
import torchaudio
from audiocraft.models import MusicGen

model = MusicGen.get_pretrained('facebook/musicgen-small')

def generate_music(prompt, duration, temperature, cfg_coef):
    model.set_generation_params(
        duration=duration,
        temperature=temperature,
        cfg_coef=cfg_coef
    )

    with torch.no_grad():
        wav = model.generate([prompt])

    # Сохранение во временный файл
    path = "temp_output.wav"
    torchaudio.save(path, wav[0].cpu(), sample_rate=32000)
    return path

demo = gr.Interface(
    fn=generate_music,
    inputs=[
        gr.Textbox(label="Описание музыки", placeholder="upbeat electronic dance music"),
        gr.Slider(1, 30, value=8, label="Длительность (секунды)"),
        gr.Slider(0.5, 2.0, value=1.0, label="Температура"),
        gr.Slider(1.0, 10.0, value=3.0, label="Коэффициент CFG")
    ],
    outputs=gr.Audio(label="Сгенерированная музыка"),
    title="MusicGen Demo"
)

demo.launch()

Оптимизация производительности

Оптимизация памяти

# Используйте меньшую модель
model = MusicGen.get_pretrained('facebook/musicgen-small')

# Очищайте кэш между генерациями
torch.cuda.empty_cache()

# Генерируйте более короткие длительности
model.set_generation_params(duration=10)  # Вместо 30

# Используйте половинную точность
model = model.half()

Эффективность пакетной обработки

# Обрабатывайте несколько запросов одновременно (эффективнее)
descriptions = ["prompt1", "prompt2", "prompt3", "prompt4"]
wav = model.generate(descriptions)  # Один батч

# Вместо
for desc in descriptions:
    wav = model.generate([desc])  # Множество батчей (медленнее)

Требования к памяти GPU

Модель Видеопамять FP32 Видеопамять FP16
musicgen-маленький ~4 ГБ ~2 ГБ
музыкальная среда ~8 ГБ ~4 ГБ
музыкальныйген-большой ~16 ГБ ~8 ГБ

Частные проблемы

Проблема Решение
КУДА ООМ Используйте меньшую модель, уменьшите длительность
Плохое качество Увеличьте значение cfg_coef, улучшив запрос
Слишком короткая генерация Контроль продолжительности продолжительности
Артефакты аудио начните другую температуру
Стерео не работает Используйте вариант стереомодели

Ссылки

Ресурсы