Googleの作曲家AI「Magenta」を使って、バッハ調のメロディを自動作曲してみた

#1.はじめに

Tensorflowを用いて自動作曲するAI「Magenta」がGoogleのプロジェクトチームによって作成されてGithub上に公開されています（参照：[こちら](https://github.com/tensorflow/magenta)）。
Magentaを使ってAIに作曲をしてもらおうと思います。

#2.Magentaのインストール

Magentaを使用するには、Magenta本体と学習済みモデルが必要になります。
今回はMagentaプロジェクトが、コンテナ管理ソフト「Docker」向けに提供する設定済み環境を利用します。

##2-1.動作環境
ホストOSには「Ubuntu 16.04 LTS」を使用します。

##2-2.Ubuntu環境でMagentaのインストール
Ubuntu上でターミナルを開きます。
下記のコマンドでDockerをインストールします。
```$ sudo apt update```
```$ sudo apt install docker.io```
```$ sudo gpasswd -a [スーパーユーザー名] docker```
![スクリーンショット 2017-12-23 1.09.46.png](https://qiita-image-store.s3.amazonaws.com/0/222516/001b6611-50f1-9c69-3bd8-cdfc44d0c67d.png)
![スクリーンショット 2017-12-23 1.11.03.png](https://qiita-image-store.s3.amazonaws.com/0/222516/59a76904-51f4-17e1-8af5-3f2548f154fb.png)
![スクリーンショット 2017-12-23 1.13.22.png](https://qiita-image-store.s3.amazonaws.com/0/222516/1a8e1cfc-8f09-d9ce-6ce8-6ba53fa2190e.png)
下記コマンドで再起動をします。
```$ reboot```
![スクリーンショット 2017-12-23 1.14.09.png](https://qiita-image-store.s3.amazonaws.com/0/222516/e5c5ed73-20cd-7bdb-6c51-9cd1592cc785.png)

ターミナルに下記コマンドを入力すれば、Magentaのコンテナが起動します。
```$ docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta```
![スクリーンショット 2017-12-23 1.18.42.png](https://qiita-image-store.s3.amazonaws.com/0/222516/e0b347ed-7fd2-8b4b-2f0e-7fbf84264f8d.png)

#3.Magentaでメロディを作曲してみる

ターミナル上に下記コマンドを入力して、単音の旋律をMIDI形式で出力してみます。

```# melody_rnn_generate --config=lookback_rnn --bundle_file=/magenta-models/lookback_rnn.mag --output_dir=/magenta-data/ --num_outputs=5 --num_steps=128 --primer_melody="[60]"```

**--bundle_file**
ここでディープラーニングの学習済みモデルを指定しています。
**--output_dir**
音楽ファイルの出力先を指定しています。/megenta-data/には/tmp/magentaに割り当てていますので、出力ファイルは/tmp/magenta配下に出来上がります。
**--num_outputs**
出力する音楽ファイルの数を設定します。
**--num_steps**
出力する音楽ファイルの長さを指定します。
**--primer_melody**
出力する音楽の最初の音を指定します。数字はMIDI規格のノート番号に対応しており、60はド（C）の音です。
![スクリーンショット 2017-12-23 1.33.08.png](https://qiita-image-store.s3.amazonaws.com/0/222516/cbdc820c-06f6-618f-6a58-fa16029794e0.png)

実行すると、/tmp/magentaディレクトリに出力されます。
通常のMIDI形式の音楽ファイルですので、標準のMIDIプレイヤーなどで再生することができます。
![スクリーンショット 2017-12-23 1.37.08.png](https://qiita-image-store.s3.amazonaws.com/0/222516/15367a0d-81b0-b918-8d41-5922c987affd.png)

実際に作曲されたメロディを聞いてみたところ、ちょっとイマイチな印象でした…。


#4.Magentaでバッハ調のメロディを作曲してみる

先ほどは単音のメロディでしたが、次は和音を出力する学習済モデルを使用して作曲してみます。

##4-1.バッハ調のメロディを作曲する

ターミナル上に下記コマンドを入力して、和音の旋律をMIDI形式で出力してみます。

```# polyphony_rnn_generate --bundle_file=/magenta-models/polyphony_rnn.mag --output_dir=/magenta-data/ --num_outputs=5 --num_steps=128 --primer_pitches="[60, 64, 67]" --condition_on_primer=true --inject_primer_during_generation=false```

![スクリーンショット 2017-12-24 1.30.38.png](https://qiita-image-store.s3.amazonaws.com/0/222516/6e0116fb-5d5a-8388-0fe6-fd0260c60f26.png)
![スクリーンショット 2017-12-24 1.31.16.png](https://qiita-image-store.s3.amazonaws.com/0/222516/ad8f94ff-06f4-8df7-4f9a-c4241d106086.png)

実行すると、/tmp/magentaディレクトリに出力されます。

![スクリーンショット 2017-12-24 1.31.31.png](https://qiita-image-store.s3.amazonaws.com/0/222516/c2e51b91-f4b9-3410-9820-224f8cd05e02.png)


##4-2.「荒城の月」をバッハ調のメロディでアレンジ作曲してみる

「--inject_primer_during_generation」オプションを有効にすることで、指定したメロディ（今回は「荒城の月」）から始まるバッハ調の曲を作成します。
ターミナル上に下記コマンドを入力して、和音の旋律をMIDI形式で出力してみます。

```# polyphony_rnn_generate --bundle_file=/magenta-models/polyphony_rnn.mag --output_dir=/magenta-data/ --num_outputs=5 --num_steps=128 --primer_melody="[64, -2, -2, -2, 64, -2, -2, -2, 69, -2, -2, -2, 71, -2, -2, -2, 72, -2, -2, -2, 71, -2, -2, -2, 69, -2, -2, -2, -2, -2, -2, -2]" --condition_on_primer=false --inject_primer_during_generation=true```

**--primer_melody**
冒頭のメロディを指定します。
今回は「荒城の月」を冒頭のメロディとしています。
--condition_on_primerオプションは無効にして、冒頭にメロディを注入する--inject_primer_during_generationを有効にします。

![スクリーンショット 2017-12-24 1.33.57.png](https://qiita-image-store.s3.amazonaws.com/0/222516/08d70f86-d040-2fa0-a5ad-8160f36b083b.png)
![スクリーンショット 2017-12-24 1.34.31.png](https://qiita-image-store.s3.amazonaws.com/0/222516/26518ecf-0daf-6c98-8ae7-58abbb463627.png)
実行すると、/tmp/magentaディレクトリに出力されます。
![スクリーンショット 2017-12-24 1.36.31.png](https://qiita-image-store.s3.amazonaws.com/0/222516/ed998313-8a2d-f7fd-1192-064b28b1fd66.png)

#5.終わりに

和音作曲の方が曲っぽくなっていました。
ただし、音楽的に美しいかと言われると、、うーん…という感じがします。
Googleプロジェクトでも今後よりよくしていくとのコメントがありますので、期待は大です！

>参考にした資料
[まるわかり! AI開発 最前線2018 (日経BPムック)](https://www.amazon.co.jp/%E3%81%BE%E3%82%8B%E3%82%8F%E3%81%8B%E3%82%8A-AI%E9%96%8B%E7%99%BA-%E6%9C%80%E5%89%8D%E7%B7%9A2018-%E6%97%A5%E7%B5%8CBP%E3%83%A0%E3%83%83%E3%82%AF-ITpro/dp/4822258564)