MAGNeT入門:特徴・サンプル・実用設定まで最短で理解するガイド

AI音楽

MAGNeTはMetaが公開した短尺の音楽生成に最適化されたモデルで、MusicGenの後継・改良版に位置づけられています。テンポ・質感・楽器感がより自然で、破綻しにくいのが特徴です。この記事では、MAGNeTを最短ルートで動かし、特徴を理解し、実務で使うためのポイントをまとめました。

Magnet | Open Laboratory

MAGNeTとは何か

MAGNeTは、従来のMusicGenより軽量かつ高速で、数秒〜十数秒の高品質フレーズを安定して生成できます。 Lo-fi、アコースティック、シンセ、映画音楽風などジャンル指定にも強く、動画やアプリ素材に向くのが特徴です。

さらに MAGNeT はモデル構造上、 ・リズムの乱れ ・楽器の破綻 ・急なノイズ が起きにくく、MusicGenより扱いやすいケースが多くあります。

MAGNeTはAudioCraftの一部として配布されています。詳しくはこちらをご参照ください。

すぐ使える最小サンプル

以下は、MAGNeT を最短で動かすための最小サンプルです。 ここでは facebook/magnet-medium-30secs という「中サイズ・最大30秒生成可能」のモデルを使用します。

from audiocraft.models import MAGNeT  # MAGNeTモデル本体
import torchaudio  # 音声保存用

# 30秒版MAGNeTモデルをロード
model = MAGNeT.get_pretrained("facebook/magnet-medium-30secs")  

# 生成したい音楽のプロンプト
prompt = "A relaxing ambient synth pad with soft textures."

# モデルから音声Tensorを生成(list[Tensor]で返る)
wav = model.generate([prompt])

# モデルのサンプリングレート(32000Hz)を取得
sr = model.sample_rate

# 1chTensorをCPUに移し、モデルのサンプリングレートで保存
torchaudio.save("magnet.wav", wav[0].cpu(), sr)  

print("magnet.wav を生成しました。")

プロンプト指定は英語で行います。日本語プロンプトでの動作報告もありますが、公式では案内がなく、英語指定が無難です。 audiocraft/docs/MAGNET.md at main · facebookresearch/audiocraft · GitHub

Gradioで動かす最小デモ

MAGNeTはMusicGenと同じく、Gradioを使うと簡単にGUI化できます。

import gradio
from audiocraft.models import MAGNeT

# 30秒版MAGNeTモデルを指定して読み込み
model = MAGNeT.get_pretrained("facebook/magnet-medium-30secs")

def generate_music(prompt: str):
    # プロンプトを指定しモノラル音声を取得
    wav = model.generate([prompt])[0]

    # モデルのサンプリングレート(32000Hz)を取得
    sr = model.sample_rate

    # 出力TensorをGradio用に1次元numpy配列に変換
    wav = wav.squeeze().detach().cpu().numpy()

    return (sr, wav)

# Gradioインターフェースを作成して起動
gradio.Interface(
    fn=generate_music,
    inputs=gradio.Textbox(label="Music prompt"),
    outputs=gradio.Audio(label="Generated Audio"),
    title="MAGNeT Demo"
).launch()

MusicGenでは公式によるGradioを使ったコードがあります。MAGNeTはMusicGenとAPIがほぼ共通のため、既存のMusicGenコードをMAGNeTに置き換えるだけで多くの場合動作します。

MAGNeTの音質・音量・durationの基本仕様

MAGNeT の生成音源は 32kHz で、仕様上明記されていませんがモノラル出力になるようです。

音量は適度に調整されますが、複数素材を扱う場合は、後工程の扱いやすさのために改めて正規化 (Normalize) をおすすめします。

wav = wav / np.max(np.abs(wav)) * 0.99

duration は “最大長” として扱われ、前後に無音が入ることがあります。 そのため短いループ素材として使う場合は、軽いフェードイン/フェードアウト処理が安全です。

実用でよく使うMAGNeTオプション

MAGNeTはシンプルな構造のため、少数のパラメータだけ覚えれば十分です。

duration(曲の最大長)

wav = model.generate([prompt], duration=12.0)

8〜15秒がもっとも安定します。20秒以上にすると構造が薄くなりやすい傾向があります。

top_k / top_p(生成の安定と多様性)

wav = model.generate([prompt], top_k=250, top_p=0.95)

派手さを出したい場合はtop_kを上げ、安定性を重視するなら下げます。

cfg_coef(プロンプトへの忠実度)

wav = model.generate([prompt], cfg_coef=3.0)

値を大きくすればプロンプトへの忠実度が増します。 ただし4以上は破綻しやすくなるため注意が必要です。

バリエーション生成(複数生成)

wavs = model.generate([prompt] * 3)

同じプロンプトでバッチ処理を行います。GPUメモリに余裕があれば、短い素材を複数作る、「ガチャ」の用途では便利です。返り値はlistを順に取り出せばOK。

GPUメモリに余裕がない場合は、Pythonでループを組むと良いでしょう。

MAGNeTの評判と使いどころ

ユーザーコミュニティでも 「短いフレーズを高品質に作れる」 という評価もあります。 実際に使っても、MusicGenに比べ立ち上がりの自然さ・楽器バランス・破綻の少なさが見られます。

商用利用が実質NGのため、使いどころとしてはコンテンツ企画段階での仮素材の生成が考えられます。

FAQ

Q. 長尺(30秒以上)の生成は得意ですか?
いいえ。MAGNeTは短尺特化で、長尺では破綻しやすいです。

Q. MusicGenとの使い分けは?
短尺・安定性 → MAGNeT 長さ・構成の複雑さ → MusicGen

Q. 出力は高音質ですか?
最大で 32kHz です。編集上必要ならDAWやSoXで 44.1/48kHz へ後処理してください。

Q. 商用利用はできますか?
本モデルの重みは CC-BY-NC 4.0(非商用) で配布されており、 この重みを使って生成した音源も非商用用途に限定されます。

そのため、生成音源の商用利用(有料コンテンツ、製品組み込み、商用アプリでの使用など)は 原則できません

実運用前には、必ず最新版のライセンス条項を確認してください。

AudioCraft: MAGNeT vs MusicGen / AudioGen

MAGNeTはAudioCraftの要素として提供されており、MusicGenやAudioGenでも音源の生成は可能です。

MAGNeTは、短いフレーズを高速・安定して生成したい用途に最適です。ノン-オートレグレッシブ方式により生成レイテンシが大幅に改善されており、プロトタイピング用途や動画・アプリ用BGMの仮素材として有力です。

MusicGenは、構成・展開・ステレオなど音楽としての完成度を重視する用途に適しています。イントロ・サビ・展開がある音楽やステレオ感のあるBGM作成に向いています。

AudioGenは、音楽ではなく効果音・環境音の生成に特化しています。ゲームやUI、サウンドデザイン用途ではこちらの選択肢も検討すべきです。

⏳まとめると: • 短尺・素早く・仮素材でOK → MAGNeT • 構成ある音楽・ステレオ・完成形 → MusicGen • 効果音や環境音 → AudioGen

まとめ

MAGNeTは、短尺音楽を素早く・破綻なく生成できる非商用モデルです。

12秒前後のフレーズがもっとも安定し、Lo-fi・アンビエント・シンセ系の雰囲気作りに強みがあります。 動画BGMやアプリ用の仮素材、作曲のアイデアスケッチなど、短い音の雰囲気を試したい場面で特に便利です。

生成オプションは duration / top_k / cfg_coef の3つを押さえれば十分で、 複数パターンを高速に試せることが実務での最大のメリットです。

なお、モデル重みは CC-BY-NC 4.0(非商用) のため、生成した音源を商用コンテンツとして使うことはできません。 商用用途については別記事をご参照ください。

タイトルとURLをコピーしました