作曲できる人工知能「magenta」を使って自動作曲してみる(mac)

作曲できる人工知能「magenta」を使って自動作曲してみる(mac)

自動作曲とは?

最近いろいろなところで人工知能が使われるようになってきていて、作曲もできるそうです。
そこで、作曲できる人工知能「magenta」を使って自動作曲してみました。

環境構築やってみよう

必要となるものは下記の3つです。
・TensorFlow:機械学習ライブラリ
・magenta:音楽などをTensorFlowを使って機械学習するライブラリ
・bazel:ビルドツール

これらを下記のマシンに投入します。

<環境>
・MacBook Pro (13-inch, Mid 2012)
 ・CPU:2.9 GHz Intel Core i7
 ・メモリ:16 GB 1600 MHz DDR3
 ・OS:mac OS Sierra

<インストール>

TensorFlow

公式サイトを参照してインストールしました。

インストールコマンドはこちら。
pip install tensorflow
仮想環境に入る
source ~/tensorflow/bin/activate
仮想環境から出る
deactivate

magenta

インストールコマンドはこちら。
git clone https://github.com/tensorflow/magenta.git

bazel

インストールコマンドはこちら。
brew install bazel
こちらを実行すると
bazel: Java 1.8 is required to install this formula.
JavaRequirement unsatisfied!

と言われたので下記コマンドを実行してから再度bazelのインストールコマンドを実行しました。
brew cask install caskroom/versions/java8

動作確認

インストールが終わったら、各バージョンを確認してみます。
pip show tensorflow
Name: tensorflow
Version: 1.4.0

ファイル確認 ~/magenta/magenta/version.py
__version__ = ‘0.3.2’

bazel version
Build label: 0.8.0-homebrew

それから、magentaのフォルダに移動してテストコマンドを実行し、うまくインストールできたか確認します。
cd magenta
bazel test //magenta/...

おお、なんと、エラーがいっぱい出ました…。
エラー内容を見てみると、「ライブラリ足りんよ」とのことでしたので、その後はひたすら「足りん」と言われたライブラリを突っ込みました。

pip install librosa
pip install bokeh
pip install IPython
pip install pandas
pip install mir_eval
pip install intervaltree

どうにか無事テストが終了。
これでmagentaを使用できる準備が整いました。

機械学習してもらおう

まずは、機械学習をしてもらう必要があります。
今回は学習元としてこちらの楽曲を使用しました。
おてなみはいけん

なつのうたげ

こちらの楽曲のメロディ部分だけを抜き出したMIDIファイルを使用して、magentaに機械学習を行なってもらいます。

まずは、magentaに用意されているスクリプト「convert_dir_to_note_sequences」を使用して、MIDIファイルをノートシーケンスファイルに変換します。
※ここでは機械学習用に「~/automidi/」というフォルダを作成しました。ご自身の環境に読み替えて実行ください。

MIDI_DIRECTORY=~/automidi/learn
SEQUENCES_TFRECORD=~/automidi/notesequences.tfrecord
bazel run //magenta/scripts:convert_dir_to_note_sequences -- \
--input_dir=$MIDI_DIRECTORY \
--output_file=$SEQUENCES_TFRECORD \
--recursive

それから、「melody_rnn_create_dataset」を使用して、ノートシーケンスから「eval_melodies.tfrecord」と「training_melodies.tfrecord」を作成してもらいます。

bazel run //magenta/models/melody_rnn:melody_rnn_create_dataset -- \
--config=basic_rnn \
--input=~/automidi/notesequences.tfrecord \
--output_dir=~/automidi/basic/melody_rnn/sequence_examples \
--eval_ratio=0.10

configには「Basic RNN(標準)」「Lookback RNN(直近の小節を参照する)」「Attention RNN(過去に注意を向ける)」の3種類があるそうです。
※詳しい説明はGoogle Magentaが新たに公開した2つの作曲ニューラルネットワーク(Lookback RNN,Attention RNN)

「output_dir」で指定したフォルダに、「eval_melodies.tfrecord」と「training_melodies.tfrecord」のファイルが出来上がります。
では、「training_melodies.tfrecord」を使用して、実際に学習してもらいましょう。

bazel run //magenta/models/melody_rnn:melody_rnn_train -- \
--config=basic_rnn \
--run_dir=~/automidi/basic/melody_rnn/ \
--sequence_example_file=~/automidi/basic/melody_rnn/sequence_examples/training_melodies.tfrecord \
--hparams="batch_size=64,rnn_layer_sizes=[64,64]" \
--num_training_steps=20000

basic_rnnを回数「20000回」で、地味に5時間くらいかかりました。
もう少し減らしても大丈夫でしょうか…。
高性能GPUがあればもっと速くできるようです。

自動作曲してもらおう

いよいよ自動作曲を行います。
自動作曲のコマンドを実行します。

bazel run //magenta/models/melody_rnn:melody_rnn_generate -- \
--config=basic_rnn \
--run_dir=~/automidi/basic/melody_rnn/ \
--output_dir=~/automidi/basic/melody_rnn/generated \
--num_outputs=5 \
--num_steps=512 \
--hparams="batch_size=64,rnn_layer_sizes=[64,64]" \
--primer_melody="[60]"

「output_dir」で指定したフォルダにMIDIファイルが出来上がります。
これで自動作曲は完成となります。

自動作曲してもらった結果

それぞれ2000回ずつ学習してもらい、自動作曲してもらいました。

Basic RNN


サンプル曲のところどころをぶつ切りにしたような感じになりました。
あんまり曲っぽくない感じがします。

Lookback RNN


Basicよりは曲っぽい。なんだか不思議な感じです。

Attention RNN


こちらもBasicよりは曲っぽい。繰り返し多用な感じの曲になりました。

もっとたくさん学習させると面白い結果が得られそうです。
これからいろいろ実験してみたいと思います。

参考にさせていただいたページ

どうもありがとうございます!!
ニューラルネットワークで作曲をする! Magentaを動かす
TensorFlow製音楽生成プロジェクト「Magenta」を開発環境の設定から曲生成までやってみる。
Mac OS XにTensorflowをインストールして、Hello worldまでやってみる
Installing TensorFlow on macOS
Magentaの「bazel test //magenta/…」でエラーが出た時のチェックリスト
Magentaによるメロディ生成 (3) MIDIデータ生成
人工知能に津軽三味線の自動作曲をさせてみた