SKILL.md
SKILL.mdBrowse 3 files
3,759 tokens
16,233 bytes
Token encoding: o200k_base
Snapshot 24fd22b
1---2name: audiocraft-audio-generation3description: "AudioCraft: MusicGen text-to-music, AudioGen text-to-sound."4version: 1.0.05author: Orchestra Research6license: MIT7dependencies: [audiocraft, torch>=2.0.0, transformers>=4.30.0]8platforms: [linux, macos]9metadata:10 hermes:11 tags: [Multimodal, Audio Generation, Text-to-Music, Text-to-Audio, MusicGen]12 related_skills: [heartmula, songwriting-and-ai-music]13 14---15 16# AudioCraft: Audio Generation17 18Guide to using Meta's AudioCraft for text-to-music and text-to-audio generation with MusicGen, AudioGen, and EnCodec.19 20## When to use AudioCraft21 22**Use AudioCraft when:**23- Need to generate music from text descriptions24- Creating sound effects and environmental audio25- Building music generation applications26- Need melody-conditioned music generation27- Want stereo audio output28- Require controllable music generation with style transfer29 30**Key features:**31- **MusicGen**: Text-to-music generation with melody conditioning32- **AudioGen**: Text-to-sound effects generation33- **EnCodec**: High-fidelity neural audio codec34- **Multiple model sizes**: Small (300M) to Large (3.3B)35- **Stereo support**: Full stereo audio generation36- **Style conditioning**: MusicGen-Style for reference-based generation37 38**Use alternatives instead:**39- **Stable Audio**: For longer commercial music generation40- **Bark**: For text-to-speech with music/sound effects41- **Riffusion**: For spectogram-based music generation42- **OpenAI Jukebox**: For raw audio generation with lyrics43 44## Quick start45 46### Installation47 48```bash49# From PyPI50pip install audiocraft51 52# From GitHub (latest)53pip install git+https://github.com/facebookresearch/audiocraft.git54 55# Or use HuggingFace Transformers56pip install transformers torch torchaudio57```58 59### Basic text-to-music (AudioCraft)60 61```python62import torchaudio63from audiocraft.models import MusicGen64 65# Load model66model = MusicGen.get_pretrained('facebook/musicgen-small')67 68# Set generation parameters69model.set_generation_params(70 duration=8, # seconds71 top_k=250,72 temperature=1.073)74 75# Generate from text76descriptions = ["happy upbeat electronic dance music with synths"]77wav = model.generate(descriptions)78 79# Save audio80torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)81```82 83### Using HuggingFace Transformers84 85```python86from transformers import AutoProcessor, MusicgenForConditionalGeneration87import scipy88 89# Load model and processor90processor = AutoProcessor.from_pretrained("facebook/musicgen-small")91model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")92model.to("cuda")93 94# Generate music95inputs = processor(96 text=["80s pop track with bassy drums and synth"],97 padding=True,98 return_tensors="pt"99).to("cuda")100 101audio_values = model.generate(102 **inputs,103 do_sample=True,104 guidance_scale=3,105 max_new_tokens=256106)107 108# Save109sampling_rate = model.config.audio_encoder.sampling_rate110scipy.io.wavfile.write("output.wav", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())111```112 113### Text-to-sound with AudioGen114 115```python116from audiocraft.models import AudioGen117 118# Load AudioGen119model = AudioGen.get_pretrained('facebook/audiogen-medium')120 121model.set_generation_params(duration=5)122 123# Generate sound effects124descriptions = ["dog barking in a park with birds chirping"]125wav = model.generate(descriptions)126 127torchaudio.save("sound.wav", wav[0].cpu(), sample_rate=16000)128```129 130## Core concepts131 132### Architecture overview133 134```135AudioCraft Architecture:136┌──────────────────────────────────────────────────────────────┐137│ Text Encoder (T5) │138│ │ │139│ Text Embeddings │140└────────────────────────┬─────────────────────────────────────┘141 │142┌────────────────────────▼─────────────────────────────────────┐143│ Transformer Decoder (LM) │144│ Auto-regressively generates audio tokens │145│ Using efficient token interleaving patterns │146└────────────────────────┬─────────────────────────────────────┘147 │148┌────────────────────────▼─────────────────────────────────────┐149│ EnCodec Audio Decoder │150│ Converts tokens back to audio waveform │151└──────────────────────────────────────────────────────────────┘152```153 154### Model variants155 156| Model | Size | Description | Use Case |157|-------|------|-------------|----------|158| `musicgen-small` | 300M | Text-to-music | Quick generation |159| `musicgen-medium` | 1.5B | Text-to-music | Balanced |160| `musicgen-large` | 3.3B | Text-to-music | Best quality |161| `musicgen-melody` | 1.5B | Text + melody | Melody conditioning |162| `musicgen-melody-large` | 3.3B | Text + melody | Best melody |163| `musicgen-stereo-*` | Varies | Stereo output | Stereo generation |164| `musicgen-style` | 1.5B | Style transfer | Reference-based |165| `audiogen-medium` | 1.5B | Text-to-sound | Sound effects |166 167### Generation parameters168 169| Parameter | Default | Description |170|-----------|---------|-------------|171| `duration` | 8.0 | Length in seconds (1-120) |172| `top_k` | 250 | Top-k sampling |173| `top_p` | 0.0 | Nucleus sampling (0 = disabled) |174| `temperature` | 1.0 | Sampling temperature |175| `cfg_coef` | 3.0 | Classifier-free guidance |176 177## MusicGen usage178 179### Text-to-music generation180 181```python182from audiocraft.models import MusicGen183import torchaudio184 185model = MusicGen.get_pretrained('facebook/musicgen-medium')186 187# Configure generation188model.set_generation_params(189 duration=30, # Up to 30 seconds190 top_k=250, # Sampling diversity191 top_p=0.0, # 0 = use top_k only192 temperature=1.0, # Creativity (higher = more varied)193 cfg_coef=3.0 # Text adherence (higher = stricter)194)195 196# Generate multiple samples197descriptions = [198 "epic orchestral soundtrack with strings and brass",199 "chill lo-fi hip hop beat with jazzy piano",200 "energetic rock song with electric guitar"201]202 203# Generate (returns [batch, channels, samples])204wav = model.generate(descriptions)205 206# Save each207for i, audio in enumerate(wav):208 torchaudio.save(f"music_{i}.wav", audio.cpu(), sample_rate=32000)209```210 211### Melody-conditioned generation212 213```python214from audiocraft.models import MusicGen215import torchaudio216 217# Load melody model218model = MusicGen.get_pretrained('facebook/musicgen-melody')219model.set_generation_params(duration=30)220 221# Load melody audio222melody, sr = torchaudio.load("melody.wav")223 224# Generate with melody conditioning225descriptions = ["acoustic guitar folk song"]226wav = model.generate_with_chroma(descriptions, melody, sr)227 228torchaudio.save("melody_conditioned.wav", wav[0].cpu(), sample_rate=32000)229```230 231### Stereo generation232 233```python234from audiocraft.models import MusicGen235 236# Load stereo model237model = MusicGen.get_pretrained('facebook/musicgen-stereo-medium')238model.set_generation_params(duration=15)239 240descriptions = ["ambient electronic music with wide stereo panning"]241wav = model.generate(descriptions)242 243# wav shape: [batch, 2, samples] for stereo244print(f"Stereo shape: {wav.shape}") # [1, 2, 480000]245torchaudio.save("stereo.wav", wav[0].cpu(), sample_rate=32000)246```247 248### Audio continuation249 250```python251from transformers import AutoProcessor, MusicgenForConditionalGeneration252 253processor = AutoProcessor.from_pretrained("facebook/musicgen-medium")254model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-medium")255 256# Load audio to continue257import torchaudio258audio, sr = torchaudio.load("intro.wav")259 260# Process with text and audio261inputs = processor(262 audio=audio.squeeze().numpy(),263 sampling_rate=sr,264 text=["continue with a epic chorus"],265 padding=True,266 return_tensors="pt"267)268 269# Generate continuation270audio_values = model.generate(**inputs, do_sample=True, guidance_scale=3, max_new_tokens=512)271```272 273## MusicGen-Style usage274 275### Style-conditioned generation276 277```python278from audiocraft.models import MusicGen279 280# Load style model281model = MusicGen.get_pretrained('facebook/musicgen-style')282 283# Configure generation with style284model.set_generation_params(285 duration=30,286 cfg_coef=3.0,287 cfg_coef_beta=5.0 # Style influence288)289 290# Configure style conditioner291model.set_style_conditioner_params(292 eval_q=3, # RVQ quantizers (1-6)293 excerpt_length=3.0 # Style excerpt length294)295 296# Load style reference297style_audio, sr = torchaudio.load("reference_style.wav")298 299# Generate with text + style300descriptions = ["upbeat dance track"]301wav = model.generate_with_style(descriptions, style_audio, sr)302```303 304### Style-only generation (no text)305 306```python307# Generate matching style without text prompt308model.set_generation_params(309 duration=30,310 cfg_coef=3.0,311 cfg_coef_beta=None # Disable double CFG for style-only312)313 314wav = model.generate_with_style([None], style_audio, sr)315```316 317## AudioGen usage318 319### Sound effect generation320 321```python322from audiocraft.models import AudioGen323import torchaudio324 325model = AudioGen.get_pretrained('facebook/audiogen-medium')326model.set_generation_params(duration=10)327 328# Generate various sounds329descriptions = [330 "thunderstorm with heavy rain and lightning",331 "busy city traffic with car horns",332 "ocean waves crashing on rocks",333 "crackling campfire in forest"334]335 336wav = model.generate(descriptions)337 338for i, audio in enumerate(wav):339 torchaudio.save(f"sound_{i}.wav", audio.cpu(), sample_rate=16000)340```341 342## EnCodec usage343 344### Audio compression345 346```python347from audiocraft.models import CompressionModel348import torch349import torchaudio350 351# Load EnCodec352model = CompressionModel.get_pretrained('facebook/encodec_32khz')353 354# Load audio355wav, sr = torchaudio.load("audio.wav")356 357# Ensure correct sample rate358if sr != 32000:359 resampler = torchaudio.transforms.Resample(sr, 32000)360 wav = resampler(wav)361 362# Encode to tokens363with torch.no_grad():364 encoded = model.encode(wav.unsqueeze(0))365 codes = encoded[0] # Audio codes366 367# Decode back to audio368with torch.no_grad():369 decoded = model.decode(codes)370 371torchaudio.save("reconstructed.wav", decoded[0].cpu(), sample_rate=32000)372```373 374## Common workflows375 376### Workflow 1: Music generation pipeline377 378```python379import torch380import torchaudio381from audiocraft.models import MusicGen382 383class MusicGenerator:384 def __init__(self, model_name="facebook/musicgen-medium"):385 self.model = MusicGen.get_pretrained(model_name)386 self.sample_rate = 32000387 388 def generate(self, prompt, duration=30, temperature=1.0, cfg=3.0):389 self.model.set_generation_params(390 duration=duration,391 top_k=250,392 temperature=temperature,393 cfg_coef=cfg394 )395 396 with torch.no_grad():397 wav = self.model.generate([prompt])398 399 return wav[0].cpu()400 401 def generate_batch(self, prompts, duration=30):402 self.model.set_generation_params(duration=duration)403 404 with torch.no_grad():405 wav = self.model.generate(prompts)406 407 return wav.cpu()408 409 def save(self, audio, path):410 torchaudio.save(path, audio, sample_rate=self.sample_rate)411 412# Usage413generator = MusicGenerator()414audio = generator.generate(415 "epic cinematic orchestral music",416 duration=30,417 temperature=1.0418)419generator.save(audio, "epic_music.wav")420```421 422### Workflow 2: Sound design batch processing423 424```python425import json426from pathlib import Path427from audiocraft.models import AudioGen428import torchaudio429 430def batch_generate_sounds(sound_specs, output_dir):431 """432 Generate multiple sounds from specifications.433 434 Args:435 sound_specs: list of {"name": str, "description": str, "duration": float}436 output_dir: output directory path437 """438 model = AudioGen.get_pretrained('facebook/audiogen-medium')439 output_dir = Path(output_dir)440 output_dir.mkdir(exist_ok=True)441 442 results = []443 444 for spec in sound_specs:445 model.set_generation_params(duration=spec.get("duration", 5))446 447 wav = model.generate([spec["description"]])448 449 output_path = output_dir / f"{spec['name']}.wav"450 torchaudio.save(str(output_path), wav[0].cpu(), sample_rate=16000)451 452 results.append({453 "name": spec["name"],454 "path": str(output_path),455 "description": spec["description"]456 })457 458 return results459 460# Usage461sounds = [462 {"name": "explosion", "description": "massive explosion with debris", "duration": 3},463 {"name": "footsteps", "description": "footsteps on wooden floor", "duration": 5},464 {"name": "door", "description": "wooden door creaking and closing", "duration": 2}465]466 467results = batch_generate_sounds(sounds, "sound_effects/")468```469 470### Workflow 3: Gradio demo471 472```python473import gradio as gr474import torch475import torchaudio476from audiocraft.models import MusicGen477 478model = MusicGen.get_pretrained('facebook/musicgen-small')479 480def generate_music(prompt, duration, temperature, cfg_coef):481 model.set_generation_params(482 duration=duration,483 temperature=temperature,484 cfg_coef=cfg_coef485 )486 487 with torch.no_grad():488 wav = model.generate([prompt])489 490 # Save to temp file491 path = "temp_output.wav"492 torchaudio.save(path, wav[0].cpu(), sample_rate=32000)493 return path494 495demo = gr.Interface(496 fn=generate_music,497 inputs=[498 gr.Textbox(label="Music Description", placeholder="upbeat electronic dance music"),499 gr.Slider(1, 30, value=8, label="Duration (seconds)"),500 gr.Slider(0.5, 2.0, value=1.0, label="Temperature"),501 gr.Slider(1.0, 10.0, value=3.0, label="CFG Coefficient")502 ],503 outputs=gr.Audio(label="Generated Music"),504 title="MusicGen Demo"505)506 507demo.launch()508```509 510## Performance optimization511 512### Memory optimization513 514```python515# Use smaller model516model = MusicGen.get_pretrained('facebook/musicgen-small')517 518# Clear cache between generations519torch.cuda.empty_cache()520 521# Generate shorter durations522model.set_generation_params(duration=10) # Instead of 30523 524# Use half precision525model = model.half()526```527 528### Batch processing efficiency529 530```python531# Process multiple prompts at once (more efficient)532descriptions = ["prompt1", "prompt2", "prompt3", "prompt4"]533wav = model.generate(descriptions) # Single batch534 535# Instead of536for desc in descriptions:537 wav = model.generate([desc]) # Multiple batches (slower)538```539 540### GPU memory requirements541 542| Model | FP32 VRAM | FP16 VRAM |543|-------|-----------|-----------|544| musicgen-small | ~4GB | ~2GB |545| musicgen-medium | ~8GB | ~4GB |546| musicgen-large | ~16GB | ~8GB |547 548## Common issues549 550| Issue | Solution |551|-------|----------|552| CUDA OOM | Use smaller model, reduce duration |553| Poor quality | Increase cfg_coef, better prompts |554| Generation too short | Check max duration setting |555| Audio artifacts | Try different temperature |556| Stereo not working | Use stereo model variant |557 558## References559 560- **[Advanced Usage](references/advanced-usage.md)** - Training, fine-tuning, deployment561- **[Troubleshooting](references/troubleshooting.md)** - Common issues and solutions562 563## Resources564 565- **GitHub**: https://github.com/facebookresearch/audiocraft566- **Paper (MusicGen)**: https://arxiv.org/abs/2306.05284567- **Paper (AudioGen)**: https://arxiv.org/abs/2209.15352568- **HuggingFace**: https://huggingface.co/facebook/musicgen-small569- **Demo**: https://huggingface.co/spaces/facebook/MusicGen570 Discovery context
Discovered by repository scan. No exact path reference found in the snapshot’s root AGENTS.md.