#1.はじめに
Tensorflowを用いて自動作曲するAI「Magenta」がGoogleのプロジェクトチームによって作成されてGithub上に公開されています(参照:こちら)。
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
下記コマンドで再起動をします。
$ reboot
ターミナルに下記コマンドを入力すれば、Magentaのコンテナが起動します。
$ docker run -it -p 6006:6006 -v /tmp/magenta:/magenta-data tensorflow/magenta
#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)の音です。
実行すると、/tmp/magentaディレクトリに出力されます。
通常のMIDI形式の音楽ファイルですので、標準のMIDIプレイヤーなどで再生することができます。
実際に作曲されたメロディを聞いてみたところ、ちょっとイマイチな印象でした…。
#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
実行すると、/tmp/magentaディレクトリに出力されます。
##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を有効にします。
実行すると、/tmp/magentaディレクトリに出力されます。
#5.終わりに
和音作曲の方が曲っぽくなっていました。
ただし、音楽的に美しいかと言われると、、うーん…という感じがします。
Googleプロジェクトでも今後よりよくしていくとのコメントがありますので、期待は大です!
参考にした資料
まるわかり! AI開発 最前線2018 (日経BPムック)