前回記事の続編、というかおまけ。前回は単純に出だしの単音だけ与えてメロディを生成させてみたが、今回はコード進行の制約を与えるモデルを試用してみる。
使用するモデル
今回は、Melody RNN ではなく、Improv RNN を用いる。
このモデルは、伴奏のコード進行をモチーフとして与えると、そのコード進行に合わせたメロディを生成する。プロアマ問わず、コード進行をいわば補助輪として楽曲制作するケースは非常に多いだろうから、生成モデルとしてはおそらくこちらの方が実用価値が高いと思われる。
生成用コマンドの例
DockerからMagenta起動後、以下のようなimprov_rnn_generate
コマンドを投入する(詳細は公式ページを参照)。
improv_rnn_generate \ --config=chord_pitches_improv \ --bundle_file=/magenta-models/chord_pitches_improv.mag \ --output_dir=/tmp/improv_rnn/generated \ --num_outputs=10 \ --primer_melody="[60]" \ --backing_chords="C G Am F C G Am F" \ --render_chords
コマンド・オプションについては、前回見たmelody_rnn_generate
コマンドのそれとほぼ同じであるが、本コマンド特有のものとしては、
- backing_chords: モチーフとして与えるコード進行はこれである。デフォルトでは1小節ステップでコード進行を文字列として記述する(ステップの長さは変えられるが詳細は割愛)。本例では、C/G/Am/F のコード進行を2回繰り返して合計8小節となる。
- render_chords: 上記 backing_chords で与えた伴奏コードが生成結果のMIDIデータ(SMF)に追加される(後述)。
生成MIDIデータの中身
生成結果のSMFは、メロディと伴奏コード進行の2トラックから構成される。このうちの後者は、ユーザがコマンド・オプションから与えたコード進行そのものである。生成ファイルの一つをDominoで開いてみると、以下のようなMIDIデータが観察される。
想定される使い方
音楽的に心地よく美しいとされるコード進行は概ね決まっており、またコード進行それ自体には著作権はないため、そのようなモチーフをどこかから参照してMagentaに与えてみればよい。たとえば、下記サイトは参照先の一つである。
すると、それなりのメロディ候補を無数に生成してくれる。あとは取捨選択の上で、ループ素材なども駆使してリズムに工夫を重ねれば、比較的短時間で一曲制作できてしまうのではないか。
先進的なコード進行ヘルパーとしては、Waveform の Pattern Generator などが代表例だが、そのような高級ツールが手元になくとも、Magentaで相当程度ニーズは満たされると思う。