mcpField
A
audiocraft-audio-generation

audiocraft-audio-generation

github.com/kalarislabsクリエイティブ・メディア7345 回インストール4 日前に更新
リポジトリ

audiocraft-audio-generation について

音声生成ワークフローを構築する開発者向けに、MetaのAudioCraftでテキストから音楽や音声を生成する方法を解説します。MusicGen、AudioGen、EnCodecを扱い、メロディーやスタイルによる条件付けも紹介します。

主な機能

  1. 01MusicGenによるテキストからの音楽生成
  2. 02AudioGenによるテキストからの音声生成
  3. 03メロディー条件付き生成
  4. 04参照音源に基づくスタイル生成
  5. 05EnCodecによる音声圧縮

活用シーン

  1. 01テキスト記述から音楽を作成
  2. 02効果音や環境音の生成
  3. 03音楽生成アプリの構築

インストール

コマンドをコピーしてターミナルで実行します。

$npx skills add https://github.com/kalarislabs/research-agent-skills --skill audiocraft-audio-generation

インストール後、Claude Code で/audiocraft-audio-generationを入力して読み込まれたか確認します。

同梱ファイル

SKILL.md と一緒にインストールされる参考資料やスクリプト。

references/
advanced-usage.md
musicgen-style-usage.md
musicgen-usage.md
troubleshooting.md

詳細

AudioCraft:オーディオ生成

MusicGen、AudioGen、EnCodecを使用した、MetaのAudioCraftによるテキストから音楽・オーディオを生成するための包括的なガイドです。

AudioCraftを使用する場面

AudioCraftを使用する場面:

  • テキストの説明から音楽を生成したい場合
  • 効果音や環境音を作成する場合
  • 音楽生成アプリケーションを構築する場合
  • メロディー条件付きの音楽生成が必要な場合
  • ステレオオーディオを出力したい場合
  • スタイル転送による制御可能な音楽生成が必要な場合

主な機能:

  • MusicGen:メロディー条件付けに対応したテキストから音楽への生成
  • AudioGen:テキストから効果音への生成
  • EnCodec:高忠実度のニューラルオーディオコーデック
  • 複数のモデルサイズ:Small(300M)からLarge(3.3B)まで
  • ステレオ対応:完全なステレオオーディオ生成
  • スタイル条件付け:参照ベースの生成に対応したMusicGen-Style

代わりに以下を使用する場面:

  • Stable Audio:より長い商用音楽を生成する場合
  • Bark:音楽・効果音を含むテキスト読み上げの場合
  • Riffusion:スペクトログラムベースの音楽生成の場合
  • OpenAI Jukebox:歌詞付きの生オーディオ生成の場合

クイックスタート

インストール
# From PyPI
pip install audiocraft

# From GitHub (latest)
pip install git+https://github.com/facebookresearch/audiocraft.git

# Or use HuggingFace Transformers
pip install transformers torch torchaudio
基本的なテキストから音楽への生成(AudioCraft)
import torchaudio
from audiocraft.models import MusicGen

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

# Set generation parameters
model.set_generation_params(
    duration=8,  # seconds
    top_k=250,
    temperature=1.0
)

# Generate from text
descriptions = ["happy upbeat electronic dance music with synths"]
wav = model.generate(descriptions)

# Save audio
torchaudio.save("output.wav", wav[0].cpu(), sample_rate=32000)
HuggingFace Transformersの使用
from transformers import AutoProcessor, MusicgenForConditionalGeneration
import scipy

# Load model and processor
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda")

# Generate music
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
)

# Save
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

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

model.set_generation_params(duration=5)

# Generate sound effects
descriptions = ["dog barking in a park with birds chirping"]
wav = model.generate(descriptions)

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

基本概念

アーキテクチャの概要
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                 │
└──────────────────────────────────────────────────────────────┘
モデルのバリエーション
モデルサイズ説明用途
musicgen-small300Mテキストから音楽高速な生成
musicgen-medium1.5Bテキストから音楽バランス型
musicgen-large3.3Bテキストから音楽最高品質
musicgen-melody1.5Bテキスト+メロディーメロディー条件付け
musicgen-melody-large3.3Bテキスト+メロディー最高のメロディー生成
musicgen-stereo-*さまざまステレオ出力ステレオ生成
musicgen-style1.5Bスタイル転送参照ベース
audiogen-medium1.5Bテキストからサウンド効果音
生成パラメーター
パラメーターデフォルト説明
duration8.0長さ(秒)(1~120)
top_k250Top-kサンプリング
top_p0.0Nucleusサンプリング(0 = 無効)
temperature1.0サンプリング温度
cfg_coef3.0分類器フリーガイダンス

MusicGenの使用方法

詳細、コード例、パラメーター表については、references/musicgen-usage.mdを参照してください。この手順が該当する場合に読み進めてください。

MusicGen-Styleの使用方法

詳細、コード例、パラメーター表については、references/musicgen-style-usage.mdを参照してください。この手順が該当する場合に読み進めてください。

AudioGenの使用方法

効果音の生成
from audiocraft.models import AudioGen
import torchaudio

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

# Generate various sounds
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

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

# Load audio
wav, sr = torchaudio.load("audio.wav")

# Ensure correct sample rate
if sr != 32000:
    resampler = torchaudio.transforms.Resample(sr, 32000)
    wav = resampler(wav)

# Encode to tokens
with torch.no_grad():
    encoded = model.encode(wav.unsqueeze(0))
    codes = encoded[0]  # Audio codes

# Decode back to audio
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)

# Usage
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):
    """
    Generate multiple sounds from specifications.

    Args:
        sound_specs: list of {"name": str, "description": str, "duration": float}
        output_dir: output directory path
    """
    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

# Usage
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])

    # Save to temp file
    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()

パフォーマンスの最適化

メモリーの最適化
# Use smaller model
model = MusicGen.get_pretrained('facebook/musicgen-small')

# Clear cache between generations
torch.cuda.empty_cache()

# Generate shorter durations
model.set_generation_params(duration=10)  # Instead of 30

# Use half precision
model = model.half()
バッチ処理の効率化
# Process multiple prompts at once (more efficient)
descriptions = ["prompt1", "prompt2", "prompt3", "prompt4"]
wav = model.generate(descriptions)  # Single batch

# Instead of
for desc in descriptions:
    wav = model.generate([desc])  # Multiple batches (slower)
GPUメモリー要件
モデルFP32 VRAMFP16 VRAM
musicgen-small~4GB~2GB
musicgen-medium~8GB~4GB
musicgen-large~16GB~8GB

よくある問題

問題解決策
CUDA OOM小さいモデルを使用するか、再生時間を短くしてください
品質が低いcfg_coefを大きくし、より良いプロンプトを使用してください
生成時間が短すぎる最大再生時間の設定を確認してください
オーディオにアーティファクトがあるtemperatureを変えてみてください
ステレオが機能しないステレオモデルのバリエーションを使用してください

参考資料

リソース

エージェントの作業手順

  1. 環境を確認します。 GPU メモリ、モデルのチェックポイントとライセンス、フレームワークのバージョン、入力形式を確認します。
  2. 入力を明確にします。 データまたはユーザーから形式、識別子、パラメーターを確認します。結果に影響する値は推測せず、質問します。
  3. まず小規模に実行します。 最初は単一のサンプルを低解像度または短い長さで推論します。
  4. 上記の手順と参考資料を使用して、タスク全体を実行します。
  5. 結果を検証します。 出力を定性的に、またタスクの指標を使って確認し、生成コンテンツに関するライセンス上の制限も確認します。
  6. 報告します。 実行した内容(バージョン、コマンド、パラメーター)、確認した内容、まだ不明な点を伝えます。
問題対応
大きな入力でメモリ不足が発生する解像度またはシーケンス長を小さくする、半精度を使う、または入力を分割します。
この手順に記載された関数、フラグ、エンドポイントがインストール済みのバージョンに存在しないインストール済みバージョンのドキュメント(help()、--help、公式ドキュメント)を確認して調整し、その旨をユーザーに伝えます。API を決してでっち上げないでください。
必須の入力、識別子、パラメーターが曖昧であるユーザーに質問するか、実行前に仮定を明示します。

誠実性に関するルール

  • 結果、パラメーター、識別子、引用、統計情報を決して捏造しないでください。実行または検証できない場合は、その旨を明確に伝えてください。
  • 商用利用または公開利用の前に、モデルとデータセットのライセンスを確認してください。
  • ここに記載されているバージョン固有の情報は古くなっている可能性があるものとして扱い、インストール済みバージョンの公式ドキュメントで確認してください。
  • 費用が発生する操作、共有 GPU またはクラウドのクォータを消費する操作、個人データまたは患者データを扱う操作、取り消せない操作を行う前に確認してください。

関連スキル

  • transformers:Hugging Face Transformers を使用して、Hub モデルの読み込み、パイプライン推論の実行、テキスト生成、NLP、ビジョン、オーディオ向けの Trainer によるファインチューニングを行います…

コメント