見出し画像

【AI音楽生成】MusicGen+ All-in-one WebUIを試す/アニメ用BGMの生成

  • AI画像生成&AI音声合成を使ったショートアニメを作っている。

  • 前回は、キャラクター音声には生成AIを使ったが、BGMは既成のフリー音源をお借りしていた。今回は、MetaのMusicGenによるAI音楽生成が使えるか試してみた。

  • 冒頭の動画のBGMが試作物。まず15秒で生成し、さらに30秒まで拡張生成した。使用したWebUIと、その手順について以下にメモ。

「MusicGen+ All-in-one Webui」を使う

  • MusicGenについては、例によってCamenduruさんがWebUIのGoogle Colabを複数まとめてくれている。

  • それぞれ試したが、こちらのMusicGen+ All-in-one Webuiの使い勝手がいい感じだった。生成楽曲の長さだけでなく、プロンプトのかけ方、メロディー・インプットのモード、Top-kなどのパラメータまで指定できる。

MusicGen+ All-in-one Webui
  • Durationは生成する楽曲の秒数。Overlapについては後述。Seedは他の生成AIと同じで、固定すると同じ楽曲が生成される。Wikiタブに各項目について丁寧な説明がある。

  • Prompt Segmentsは30秒以上の楽曲を生成する場合に使用。例えば60秒の楽曲を生成する場合、Prompt Segmentsを2に設定すると、前半と後半で別のプロンプトを適用できる(MusicGenは30秒単位で楽曲生成する仕組み)。

  • なおWebUIを起動後、生成ボタンをクリックしてからモデルのダウンロードが始まるので、初回の生成には時間がかかる。

プロンプト

  • WebUIのサンプルにある通り、ジャンル("80s driving pop song", "EDM track")、曲調("strong emotions", "cheerful")、テンポ("slow bpm", "bpm: 130")、楽器("with acoustic guitars", "with syncopated drums")などを指示するのが基本。

  • 画像生成ほどの細かいプロンプティングは必要ない(できない)と思われる。ただし、上述のページに簡単なプロンプトガイドがあったので、一部を訳出して紹介する。

プロンプトの例と説明

* 4/4 100bpm 320kbps 48khz motown groove
* 3/4 105bpm 320kbps 48khz piano only baroque
* 110bpm 64kbps 16khz lofi hiphop summer smooth


120bpm - 拍数(beat per minute)。一般的なダンスミュージックは120。ほとんどのバラードは90~100。本当にスローな曲は70~85。140以上は、レイブ、テクノ、ダブ向けのもの。

320kbps 48khz - これらはレコーディングの品質を保ち、ヒスを減らし、通常は音域を広げる。これらの数値はMP3録音としてはかなり高いが、生のオーディオ録音の数値には及ばない。また、LOFI(ロファイ・ヒップホップなど)にはこのプロンプトを使わない。 22kbpsにすると、電話やメガホンを通して曲を聴いているような音質になるはず。

4/4, 3/4, 5/4, 2/4, etc -- ちゃんと説明するには、音楽理論に踏み込まなければならない。ただ、アメリカのポップ・ソングの大多数は4/4拍子だと知っておいてほしい。スロージャムやワルツは3/4(バラードなど)。5/4やその他は、ラテン系の影響を受けたアメリカ人以外の聴衆のためのもの。13/8、11/8、10/7などの"奇妙な"ナンバーはジャズ向けだろう。

https://github.com/camenduru/MusicGen-colab#readme
  • 今回はオーソドックスに「A cheerful country song with piano」というプロンプトで生成。

Sample機能による楽曲の延長

  • MusicGen+WebUIでは一度に最長300秒の音楽まで連続生成できるが、長い楽曲の生成を繰り返すのは時間と負荷がかかる。

  • まず15~30秒程度の秒数でいくつか生成し、その中で良さそうなものをピックアップして必要な秒数まで延長するのが現実的っぽい。

  • 楽曲の延長には、MusicGen+WebUIのSampleモードを使う。

Input Audio ModeをSampleに設定
  • "melody"モードは入力した楽曲をベースに編曲するが、"Sample"モードにすると入力した楽曲の続き(15秒の曲をサンプルにした場合は残りの15秒)を拡張的に生成してくれる。

  • このとき、GenerationタブのOverlapというパラメータの秒数を調整し、サンプルの楽曲をどのくらい参照するのかをコントロールできる。

  • 今回は、先ほど生成した15秒の楽曲をサンプルとして、+15秒拡張してみた。

  • 「Overlap 5秒」ではサンプル曲のラスト5秒のみ参照して生成。付け足した後半15秒は楽曲のトーンが前半と少し変わっていく。

  • 「Overlap 10秒」ではサンプルのラスト10秒を参照して生成。付け足した後半15秒も前半との類似性が強く維持される。今回はこれを採用した。

Largeモデルも試す

  • 今回はmelodyモデルを使ったが、WebUIではMusicGenの他の3つの学習済みモデルも選択できる。

Settingsタブからモデルを指定
  • small(300M)、 medium(1.5B)、large(3.3B)の3モデルはtext to music(プロンプトに基づく音楽生成)のみに対応する。

  • melody(1.5B)はmediumと同じパラメータ数だが、text to musicに加えてmelody to musicに対応するのが違い(上述のmelodyモード)。

  • Metaによる元論文によると、「アウトプットの主観的評価なら1.5Bモデル(melody/medium)が最適である。一方、プロンプトに対する理解度は3.3Bモデル(large)の方が高い」と説明されている。

  • 生成楽曲の評価が高いならmelody(1.5B)を使っていればいいかな、と思ったが一応Large(3.3B)も試してみた。

  • プロンプトを揃えて、1.5Bモデル(Melody)と3.3Bモデル(Large)を簡単に比較。素人感想だが、試した範囲では3.3Bモデル(Large)のほうが「凝った曲が生成される」印象を受けた。使い分ける余地がありそう。