即戦力化　ディープラーニング実習（音楽合成）

# 【おまけ１】音楽合成（txt2music）

講義目録：<a href="https://qiita.com/takenakayoichi/items/3b7435f4b155a181e39f">即戦力化　ディープラーニング実習 </a>

## はじめに

本記事では、「テキストから音楽を生成する」という実習を体験します。  
モデルには、Meta社の MusicGen を用いた事前学習済みモデル [`facebook/musicgen-small`](https://huggingface.co/facebook/musicgen-small) を使います。

このモデルは、音楽のジャンルや楽器構成などを「英語の文章（プロンプト）」で指定することで、数秒の音楽を自動生成してくれるものです。  
Google Colab 上で完結できるので、手軽に試してみましょう。

---

## 実習の目的

- テキストから音楽（WAV形式）を生成する方法を学ぶ  
- Hugging Face での音楽モデルの使い方を体験する  
- 音楽AIの仕組みや応用可能性に触れる


**Google Colabへのリンク**
- [音楽合成のcolab](https://colab.research.google.com/drive/1dy-HkBR_ATzJLWt7RTDpcpN1RvT3WG2o#scrollTo=CmXfk3QibDZz)

---

## 実習のコード（Google Colab）

以下のコードを Google Colab 上で実行することで、テキストから音楽を生成し、再生まで体験できます。

```python
# 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の場合、ポップアップは出ませんが、同様に**ランタイムー＞セッションを再起動**するを実行してください。

```python
# 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. 音声広告・ジングルの自動生成

- 数秒〜十数秒の「短い印象的な音」を即時に作成し、広告やラジオ用の音源として利用

---

## 次回予告

次回はおまけ２と称し、テキストをAIに読んでもらう**音声合成**の実習を行います。

なお、おまけのため、飛ばしてもらって構いません。

## 本編予告（次回予告）

本編に戻って、次回【第7週】からは、CNN編へと突入です。

主に自然言語を扱うRNNから、主に画像を扱うCNNの実習を行います。