本文へ移動
cccskills
無料GitHub で公開

audiocraft-audio-generation

Biblioteca PyTorch para geração de áudio incluindo text-to-music (MusicGen) e text-to-sound (AudioGen). Use quando precisar gerar música a partir de descrições de texto, criar efeitos sonoros ou realizar geração de música condicionada por melodia.

インストール方法を見る

含まれるファイル(3)

  • SKILL.md16.5 KB
  • references/advanced-usage.md16.6 KB
  • references/troubleshooting.md11.1 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

AudioCraft: Geração de Áudio

Guia abrangente para usar AudioCraft da Meta para geração text-to-music e text-to-audio com MusicGen, AudioGen e EnCodec.

Quando usar AudioCraft

Use AudioCraft quando:

  • Precisar gerar música a partir de descrições de texto
  • Criar efeitos sonoros e áudio ambiente
  • Construir aplicações de geração de música
  • Precisar de geração de música condicionada por melodia
  • Quiser saída de áudio estéreo
  • Necessitar de geração de música controlável com style transfer

Principais recursos:

  • MusicGen: Geração text-to-music com condicionamento de melodia
  • AudioGen: Geração de efeitos sonoros a partir de texto
  • EnCodec: Codec neural de áudio de alta fidelidade
  • Múltiplos tamanhos de modelo: Small (300M) a Large (3.3B)
  • Suporte estéreo: Geração completa de áudio estéreo
  • Condicionamento de estilo: MusicGen-Style para geração baseada em referência

Use alternativas em vez disso:

  • Stable Audio: Para geração de música comercial mais longa
  • Bark: Para text-to-speech com música/efeitos sonoros
  • Riffusion: Para geração de música baseada em spectrograma
  • OpenAI Jukebox: Para geração de áudio bruto com letras

Início rápido

Instalação

# Do PyPI
pip install audiocraft

# Do GitHub (versão mais recente)
pip install git+https://github.com/facebookresearch/audiocraft.git

# Ou use HuggingFace Transformers
pip install transformers torch torchaudio

Text-to-music básico (AudioCraft)

import torchaudio
from audiocraft.models import MusicGen

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

# Definir parâmetros de geração
model.set_generation_params(
    duration=8,  # segundos
    top_k=250,
    temperature=1.0
)

# Gerar a partir de texto
descriptions = ["happy upbeat electronic dance music with synths"]
wav = model.generate(descriptions)

# Salvar áudio
torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)

Usando HuggingFace Transformers

from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy

# Carregar modelo e processador
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda")

# Gerar música
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
)

# Salvar
sampling_rate = model.config.audio_encoder.sampling_rate
scipy.io.wavfile.write("output.wav", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())

Text-to-sound com AudioGen

from audiocraft.models import AudioGen

# Carregar AudioGen
model = AudioGen.get_pretrained('facebook/audiogen-medium')

model.set_generation_params(duration=5)

# Gerar efeitos sonoros
descriptions = ["dog barking in a park with birds chirping"]
wav = model.generate(descriptions)

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

Conceitos principais

Visão geral da arquitetura

AudioCraft Architecture:
┌──────────────────────────────────────────────────────────────┐
│                    Text Encoder (T5)                          │
│                         │                                     │
│                    Text Embeddings                            │
└────────────────────────┬─────────────────────────────────────┘
                         │
┌────────────────────────▼─────────────────────────────────────┐
│              Transformer Decoder (LM)                         │
│     Auto-regressively generates audio tokens                  │
│     Using efficient token interleaving patterns               │
└────────────────────────┬─────────────────────────────────────┘
                         │
┌────────────────────────▼─────────────────────────────────────┐
│                EnCodec Audio Decoder                          │
│        Converts tokens back to audio waveform                 │
└──────────────────────────────────────────────────────────────┘

Variantes de modelo

ModeloTamanhoDescriçãoCaso de uso
musicgen-small300MText-to-musicGeração rápida
musicgen-medium1.5BText-to-musicEquilibrado
musicgen-large3.3BText-to-musicMelhor qualidade
musicgen-melody1.5BTexto + melodiaCondicionamento de melodia
musicgen-melody-large3.3BTexto + melodiaMelhor melodia
musicgen-stereo-*VariaSaída estéreoGeração estéreo
musicgen-style1.5BStyle transferBaseado em referência
audiogen-medium1.5BText-to-soundEfeitos sonoros

Parâmetros de geração

ParâmetroPadrãoDescrição
duration8.0Comprimento em segundos (1-120)
top_k250Amostragem top-k
top_p0.0Amostragem nucleus (0 = desabilitado)
temperature1.0Temperatura de amostragem
cfg_coef3.0Orientação sem classificador

Uso de MusicGen

Geração text-to-music

from audiocraft.models import MusicGen
import torchaudio

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

# Configurar geração
model.set_generation_params(
    duration=30,          # Até 30 segundos
    top_k=250,            # Diversidade de amostragem
    top_p=0.0,            # 0 = usar apenas top_k
    temperature=1.0,      # Criatividade (maior = mais variado)
    cfg_coef=3.0          # Aderência ao texto (maior = mais rigoroso)
)

# Gerar múltiplas amostras
descriptions = [
    "epic orchestral soundtrack with strings and brass",
    "chill lo-fi hip hop beat with jazzy piano",
    "energetic rock song with electric guitar"
]

# Gerar (retorna [batch, channels, samples])
wav = model.generate(descriptions)

# Salvar cada uma
for i, audio in enumerate(wav):
    torchaudio.save(f"music_{i}.wav", audio.cpu(), sample_rate=32000)

Geração condicionada por melodia

from audiocraft.models import MusicGen
import torchaudio

# Carregar modelo de melodia
model = MusicGen.get_pretrained('facebook/musicgen-melody')
model.set_generation_params(duration=30)

# Carregar áudio de melodia
melody, sr = torchaudio.load("melody.wav")

# Gerar com condicionamento de melodia
descriptions = ["acoustic guitar folk song"]
wav = model.generate_with_chroma(descriptions, melody, sr)

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

Geração estéreo

from audiocraft.models import MusicGen

# Carregar modelo estéreo
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)

# forma wav: [batch, 2, samples] para estéreo
print(f"Stereo shape: {wav.shape}")  # [1, 2, 480000]
torchaudio.save("stereo.wav", wav[0].cpu(), sample_rate=32000)

Continuação de áudio

from transformers import AutoProcessor, MusicgenForConditionalGeneration

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

# Carregar áudio para continuar
import torchaudio
audio, sr = torchaudio.load("intro.wav")

# Processar com texto e áudio
inputs = processor(
    audio=audio.squeeze().numpy(),
    sampling_rate=sr,
    text=["continue with a epic chorus"],
    padding=True,
    return_tensors="pt"
)

# Gerar continuação
audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=512)

Uso de MusicGen-Style

Geração condicionada por estilo

from audiocraft.models import MusicGen

# Carregar modelo de estilo
model = MusicGen.get_pretrained('facebook/musicgen-style')

# Configurar geração com estilo
model.set_generation_params(
    duration=30,
    cfg_coef=3.0,
    cfg_coef_beta=5.0  # Influência de estilo
)

# Configurar condicionador de estilo
model.set_style_conditioner_params(
    eval_q=3,          # RVQ quantizers (1-6)
    excerpt_length=3.0  # Comprimento do trecho de estilo
)

# Carregar referência de estilo
style_audio, sr = torchaudio.load("reference_style.wav")

# Gerar com texto + estilo
descriptions = ["upbeat dance track"]
wav = model.generate_with_style(descriptions, style_audio, sr)

Geração apenas de estilo (sem texto)

# Gerar com estilo correspondente sem prompt de texto
model.set_generation_params(
    duration=30,
    cfg_coef=3.0,
    cfg_coef_beta=None  # Desabilitar CFG duplo para estilo apenas
)

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

Uso de AudioGen

Geração de efeitos sonoros

from audiocraft.models import AudioGen
import torchaudio

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

# Gerar vários sons
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)

Uso de EnCodec

Compressão de áudio

from audiocraft.models import CompressionModel
import torch
import torchaudio

# Carregar EnCodec
model = CompressionModel.get_pretrained('facebook/encodec_32khz')

# Carregar áudio
wav, sr = torchaudio.load("audio.wav")

# Garantir taxa de amostragem correta
if sr != 32000:
    resampler = torchaudio.transforms.Resample(sr, 32000)
    wav = resampler(wav)

# Codificar em tokens
with torch.no_grad():
    encoded = model.encode(wav.unsqueeze(0))
    codes = encoded[0]  # Códigos de áudio

# Decodificar de volta para áudio
with torch.no_grad():
    decoded = model.decode(codes)

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

Workflows comuns

Workflow 1: Pipeline de geração de música

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)

# Uso
generator = MusicGenerator()
audio = generator.generate(
    "epic cinematic orchestral music",
    duration=30,
    temperature=1.0
)
generator.save(audio, "epic_music.wav")

Workflow 2: Processamento em lote de design sonoro

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

def batch_generate_sounds(sound_specs, output_dir):
    """
    Gerar múltiplos sons a partir de especificações.

    Args:
        sound_specs: lista de {"name": str, "description": str, "duration": float}
        output_dir: caminho do diretório de saída
    """
    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

# Uso
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/")

Workflow 3: Demo 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])

    # Salvar em arquivo temporário
    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="Music Description", placeholder="upbeat electronic dance music"),
        gr.Slider(1, 30, value=8, label="Duration (seconds)"),
        gr.Slider(0.5, 2.0, value=1.0, label="Temperature"),
        gr.Slider(1.0, 10.0, value=3.0, label="CFG Coefficient")
    ],
    outputs=gr.Audio(label="Generated Music"),
    title="MusicGen Demo"
)

demo.launch()

Otimização de performance

Otimização de memória

# Usar modelo menor
model = MusicGen.get_pretrained('facebook/musicgen-small')

# Limpar cache entre gerações
torch.cuda.empty_cache()

# Gerar durações mais curtas
model.set_generation_params(duration=10)  # Em vez de 30

# Usar precisão half
model = model.half()

Eficiência de processamento em lote

# Processar múltiplos prompts de uma vez (mais eficiente)
descriptions = ["prompt1", "prompt2", "prompt3", "prompt4"]
wav = model.generate(descriptions)  # Lote único

# Em vez de
for desc in descriptions:
    wav = model.generate([desc])  # Múltiplos lotes (mais lento)

Requisitos de memória GPU

ModeloFP32 VRAMFP16 VRAM
musicgen-small~4GB~2GB
musicgen-medium~8GB~4GB
musicgen-large~16GB~8GB

Problemas comuns

ProblemaSolução
CUDA OOMUse modelo menor, reduza duração
Qualidade ruimAumente cfg_coef, melhore prompts
Geração muito curtaVerifique configuração de duração máxima
Artefatos de áudioTente diferentes temperaturas
Estéreo não funcionaUse variante de modelo estéreo

Referências

Recursos

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Especialista em construir experiências 3D para a web - Three.js, React Three Fiber, Spline, WebGL e cenas 3D interativas. Cobre configuradores de produtos, portfólios 3D, websites imersivos e adição de profundidade às experiências web. Use quando: website 3D, three.js, WebGL, react three fiber, experiência 3D.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Quando o usuário quer planejar, projetar ou implementar um teste A/B ou experimento. Também use quando o usuário menciona "teste A/B", "split test", "experimento", "testar essa mudança", "copy variante", "teste multivariado" ou "hipótese". Para implementação de rastreamento, veja analytics-tracking.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Auditar e melhorar a acessibilidade web seguindo as diretrizes WCAG 2.1. Use quando solicitado para "melhorar acessibilidade", "auditoria a11y", "conformidade WCAG", "suporte a leitor de tela", "navegação por teclado" ou "tornar acessível".

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Testes e benchmarking de agentes LLM incluindo testes comportamentais, avaliação de capacidades, métricas de confiabilidade e monitoramento em produção—onde até os melhores agentes alcançam menos de 50% em benchmarks do mundo real. Use quando: testes de agentes, avaliação de agentes, benchmark de agentes, confiabilidade de agentes, teste de agentes.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Criar, gerenciar e orquestrar agentes de IA usando o CLI AI Maestro. Use quando o usuário pedir para "criar agente", "listar agentes", "deletar agente", "hibernar agente", "despertar agente", "instalar plugin", "mostrar agente", "reiniciar agente" ou qualquer tarefa de gerenciamento do ciclo de vida do agente.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

Gerencie múltiplos agentes CLI locais via sessões tmux (iniciar/parar/monitorar/atribuir) com agendamento compatível com cron.

日本語の概要は準備中です。原文の説明を表示しています。

artubss/SKILLS-CLAUDE-CODE112026年5月17日 更新

artubss のスキルをすべて見る

このスキルの問題を報告する