【おまけ1】音楽合成(txt2music)
講義目録:即戦力化 ディープラーニング実習
はじめに
本記事では、「テキストから音楽を生成する」という実習を体験します。
モデルには、Meta社の MusicGen を用いた事前学習済みモデル facebook/musicgen-small
を使います。
このモデルは、音楽のジャンルや楽器構成などを「英語の文章(プロンプト)」で指定することで、数秒の音楽を自動生成してくれるものです。
Google Colab 上で完結できるので、手軽に試してみましょう。
実習の目的
- テキストから音楽(WAV形式)を生成する方法を学ぶ
- Hugging Face での音楽モデルの使い方を体験する
- 音楽AIの仕組みや応用可能性に触れる
Google Colabへのリンク
実習のコード(Google Colab)
以下のコードを Google Colab 上で実行することで、テキストから音楽を生成し、再生まで体験できます。
# 1. 必要なライブラリをインストール
!pip uninstall -y torch torchvision torchaudio accelerate transformers torchao scipy
!TORCH_CUDA_ARCH_LIST="8.6" pip install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cu118
!pip install torchao
!pip install transformers accelerate scipy
ここまで実行したら、セッション再起動を促すポップアップが出ます。
You must restart the runtime in order to use newly installed versions.
指示に従い、 ランタイムー>セッションを再起動する を選択し、次のセルを実行してください。
なお、ランタイムのタイプがCPUの場合、ポップアップは出ませんが、同様にランタイムー>セッションを再起動するを実行してください。
# 2. モデルとプロセッサの読み込み
from transformers import MusicgenForConditionalGeneration, AutoProcessor
import torch
processor = AutoProcessor.from_pretrained("facebook/musicgen-small")
model = MusicgenForConditionalGeneration.from_pretrained("facebook/musicgen-small")
model.to("cuda" if torch.cuda.is_available() else "cpu")
# 3. 入力テキストの指定
from scipy.io.wavfile import write
prompt = "A relaxing jazz tune with piano and saxophone."
# 4. テキスト処理と音楽生成
inputs = processor(text=[prompt], return_tensors="pt").to(model.device)
audio_values = model.generate(**inputs, max_new_tokens=1024)
# 5. 音楽をWAVファイルとして保存し再生
sampling_rate = model.config.audio_encoder.sampling_rate
write("generated_music.wav", rate=sampling_rate, data=audio_values[0, 0].cpu().numpy())
from IPython.display import Audio
Audio("generated_music.wav")
✅ 実行後、「generated_music.wav」が生成され、Colab上でそのまま再生できます。
補足
音楽AIの仕組みは、テキスト生成とよく似ています。
たとえば、MusicGenのようなモデルは「テキストから音を出力する」ために以下のような処理を行っています。
🎼 1. モデルの仕組み:Transformerベースの音楽生成
-
入力:テキストによる「説明(プロンプト)」
例:「A relaxing jazz tune with piano and saxophone.」 - 処理:Transformerベースの言語モデルが、テキストをベクトルに変換し、時間軸に沿った音響トークン列を生成
- 出力:音響トークン列を、音波(WAV形式など)へとデコード(ボコーダー処理)
音を“言葉として”扱う、いわば「音の言語化」ともいえる手法です。
🧠 2. テキスト→音楽はなぜ難しいのか?
- テキストは構造を持つ言語だが、音楽は構造+時間性を持つ表現
- 感情やジャンル(ジャズ、クラシック、EDMなど)の解釈があいまい
- 特定の「楽器構成」「テンポ」「リズム」を理解して音に反映する必要がある
つまり、言葉の意味だけでなく、「音楽として自然か」どうかの学習も必要となる点が難しさです。
音楽AIの応用例と将来性
生成された音楽は、以下のような分野に活用されつつあります。
🎮 1. ゲームやメディアのBGM自動生成
- インディーゲームやYouTube動画のBGMにおいて、著作権フリーの音源として使用
- シーンに合わせた雰囲気の音楽を、プロンプトで即座に作成可能
🧘 2. リラックス・睡眠・瞑想音源のカスタム生成
- 「瞑想用の音」「α波を含むヒーリング音」など、個人の好みに応じて生成可能
- サブスクリプションサービスやアプリでも活用例が増加
🎼 3. 作曲支援・メロディスケッチ
- 作曲家が「曲の雰囲気」や「楽器の構成」をテキストで指示し、ベース素材として活用
- DAW(作曲ソフト)との連携も進み、プロトタイプ作成の効率化に貢献
📻 4. 音声広告・ジングルの自動生成
- 数秒〜十数秒の「短い印象的な音」を即時に作成し、広告やラジオ用の音源として利用
次回予告
次回はおまけ2と称し、テキストをAIに読んでもらう音声合成の実習を行います。
なお、おまけのため、飛ばしてもらって構いません。
本編予告(次回予告)
本編に戻って、次回【第7週】からは、CNN編へと突入です。
主に自然言語を扱うRNNから、主に画像を扱うCNNの実習を行います。