1
/
5

Magentaを使ったAI作曲を試してみる。


こんにちは。
エス・エー・エス株式会社
DXサービス部の海田(かいだ)です。

先日、家族で久しぶりに図書館に出かけました。

そこで見つけたのがこの本。

(2023/01/25追記 書籍名「Magentaで開発 AI作曲」(オーム社) 斎藤喜寛 (著) ありがとうございました! https://www.ohmsha.co.jp/book/9784274227318/)

AI作曲!!

昨今AIの目覚ましい技術発展はあらゆる分野に浸透しておりますが、作曲の分野でもその力を発揮しているようです。内容をパラパラ見ていたら、なんだか面白そうだし、ちょっと出来そうカモ!そしてTechBlogのネタになりそう(笑)と思って借りてみました。

ということで、今回はこの本を読んでやってみたことを書いていきたいと思います!

1.自動作曲ってこんな感じ

この本の最初にこんなことが書かれています。

「わずか数十秒で曲を生み出すAI作曲」

そして、それが(曲の完成度は別として)本当に嘘でないことが次のコマンドで分かります。

melody_rnn_generate ^
--config=basic_rnn ^
--bundle_file=koguma-env\rnn\basic_rnn.mag ^
--output_dir=koguma-env\output ^
--num_outputs=3 ^
--num_steps=64 ^
--qpm=120.0 ^
--primer_melody="[60]"

上記については、後ほど詳しく解説しますが、簡単に言うと、

「ド」から始まる、テンポが「120」、長さ「4小節」の曲を「3曲」作る。

というコマンドになっています。

実際に聞いてみましょう。(単音自動生成1~3をそれぞれクリックしてみてください。音が出るので職場の方はご注意ください・・)

いかがでしょうか?少し幼稚な感じもしなくもないですが、いわゆる「ノリ」的なものも含まれていて、最初に与えた音程情報が「ド」という1音だけにもかかわらずここまで世界を広げてくれるのにはびっくりします。ちなみに、私の環境では3曲を生成するのに15秒くらいでした。

2.準備作業

自動作曲を進めるのに必要な環境構築について簡単に書いておきます。基本的には本の説明に沿って行けば大丈夫でした。

1.Windows端末を準備

2.pythonをインストール、python仮想環境を作る(koguma_envが仮想環境名です)

python -m venv koguma_env

3.仮想環境を有効化

<koguma_envディレクトリ上で>
Scripts¥activate

4.TensorFlowとMagentaのインストール

<koguma_envディレクトリ上で>
pip install tensorflow
pip install magenta

ちなみに私はpythonもAI関連も手を動かしてやってみるのは初めてです。「tensorflow」というのは「機械学習を実践するためのライブラリ」であり、「magenta」というのは「音楽を自動生成するための機械学習ライブラリ」というもののようです。

準備作業としては以上です。本の中では、WindowsでもMacでも利用できるように丁寧に説明されています。絶対パスと相対パスの話とか、ちょっとITやっている方なら普通に知っているようなことから優しく解説されているので、とてもいいなと思いました。

magentaというのは「音楽を自動生成するための機械学習ライブラリ」ですが、実際には以下のように何種類かのAI作曲モデルがあるようです。

1.Melody RNN (単音のシンプルなメロディー作曲)
2.Drums RNN(ドラム演奏パートの作曲)
3.Music VAE(3パートのバンド演奏作曲)
4.Improv RNN(コード進行に沿ったアドリブメロディーの作曲)
5.Polyphony RNN(バッハ風合唱曲の作曲)
6.Pianoroll RNN(現代音楽のような複雑な和音の作曲)
7.Performance RNN(高度なピアノ演奏の作曲)

今回はこのうち、Melody RNNImprov RNNを使ってみました。RNNというのは「Recurrent Neural Network」の略だそうです。一応リンク載せておきます。

リカレントニューラルネットワーク (RNN) とは
リカレントニューラルネットワーク (RNN) は、時系列データまたはシーケンシャルデータを用いた予測を行うディープラーニング モデルの一種です。ビデオやコード例を使用して始めてみましょう。
https://jp.mathworks.com/discovery/rnn.html

うーん、、難しいです(笑) 簡単に言うと、「過去の音符情報」が「そのあとの音符」に影響を与えながら楽曲が作られていく・・ということでしょうか。決してバラバラに進むのではなく、過去が影響しながら未来が作られていくということですね。メロディー生成にこの手法が用いられるのは、何となくわかる気がします。突拍子もない音符が次々現れたら歌いにくいですからね。

3.単音で鳴らしてみよう!

準備ができたので、まずはMelody RNNの学習モデルを用いてAI作曲を試してみます。これは最初の音を与えて、決められたテンポと長さで後に続くメロディーを作ってくれるモデルとなります。

①学習済みデータをダウンロードして
②曲を生成するコマンドを実行

これだけです。

①Melody RNNの学習済みデータは以下にあります。上記の各AI作曲モデルごとに複数存在します。

magenta/magenta/models/melody_rnn at main · magenta/magenta
Magenta: Music and Art Generation with Machine Intelligence - magenta/magenta/models/melody_rnn at main · magenta/magenta
https://github.com/magenta/magenta/tree/main/magenta/models/melody_rnn

上記の「Pre-trained」のところにある「basic_rnn」をDLしておきます。

そして、以下のコマンドを実施します。

【Python仮想環境上で実行 ()は注釈】

melody_rnn_generate ^ (単音のメロディーを作るときの命令文)
--config=basic_rnn ^  (学習データ。先ほどDLしたもの)
--bundle_file=koguma-env\rnn\basic_rnn.mag ^ (学習データの格納場所へのパス)
--output_dir=koguma-env\output ^ (出力先ディレクトリ)
--num_outputs=3 ^ (生成する曲数)
--num_steps=64 ^ (ステップ数 ※1)
--qpm=120.0 ^ (BPM いわゆるテンポ)
--primer_melody="[60]" (初期データ ※2)

(※1) ステップ数とは、生成する曲の長さのことです。難しいことは抜きにしていうと、16ステップで1小節です。64ステップとしているので、ここでは4小節ということになります。

(※2)初期データとは、最初に与える音情報のことです。具体的には、音の「高さ」と「長さ」の一定区間のデータです。これは以下の図を見るとわかりやすいです。

「60」は「ド(正確にはC3と言われる高さのド」の音を示しています。半音ずつ上がっていくにしたがって対応する数字ひとつづつ増えていきます。例えばここを「67」とすると、「ソ」から始まるという意味になります。( https://season-freeillust.com/About.html のかわいい鍵盤イラストを利用させていただきました。)

さて、コマンドを実施すると、出力ディレクトリ(--output_dirで指定したディレクトリ)配下に3つのファイルが出来上がります。これらは演奏情報を記録したMIDIファイル(.mid)と呼ばれるもので、WindowsMediaプレイヤーで再生すればピアノの音で確認できます。

そうしてできたものが、最初に聞いていただいた3曲となります。何度か実施すればそのたびに曲は出来上がりますが、すべて異なる表情を持つ曲となります。

4.初期値の設定の仕方

magentaを利用した機械学習による作曲は、あらかじめ決められたAI作曲タイプ(先ほど挙げた7パターン)と、テンポ、ステップ数に初期値--primer_melody)を与えてあげることで生成されます。

この初期値を先の例では「--primer_melody="[60]"」と記載しました。そしてこれは「ド」の音でした。この初期値は複数の音符の塊、つまりフレーズとして与えてあげることもできます。

ここから先はちょっと音楽的な話になってきます(笑)

例えば、「きらきら星」は、「ドー、ドー、ソー、ソー、ラー、ラー、ソー・・」ですね。

これを楽譜に表すと、以下のようになります。(最後にタイがついているのは気にしないでください・・)


きらきら星の初めは、四分音符のド、四分音符のド、四分音符のソ、四分音符のソ、四分音符のラ、四分音符のラ、ニ分音符のソ・・となっています。

これを初期値--primer_melody)として与えるには、以下のように記載します。

—-primer_melody="[60,-2,-2,-2,60,-2,-2,-2,67,-2,-2,-2,67,-2,-2,-2,69,-2,-2,-2,69,-2,-2,-2,67,-2,-2,-2,-2,-2,-2,-2,-2]"

primer_melodyは配列のように続けることができて、その一つ一つは16分音符となっているようです。

そして、前の音を伸ばすときは「-2」を、前の音を止めるときは「-1」を入れます。

「ドの4分音符」を表現するには、最初に「60,-2,-2,-2」とすればよいことがわかります。(これで16分音符4つ分の長さになります。)

ではこれを入れて作ってみます。全部で3曲作ります。

【きらきら星の初期フレーズを与えて続きを作る】

melody_rnn_generate ^
--config=basic_rnn ^
--bundle_file=koguma2-env\rnn\basic_rnn.mag ^
--output_dir=koguma2-env\output ^
--num_outputs=3 ^
--num_steps=64 ^
--qpm=120.0 ^
--primer_melody="[60,-2,-2,-2,60,-2,-2,-2,67,-2,-2,-2,67,-2,-2,-2,69,-2,-2,-2,69,-2,-2,-2,67,-2,-2,-2,-2,-2,-2,-2,-2]"

さて、できたので聞いてみます。(楽譜はMidiファイルを開くのにMuseScoreというソフトを利用して表示しています。ピアノ以外の音色を選んで演奏したり、mp3などのオーディオエクスポートもできるのでとても便利です。)

自動作成1曲目

自動作成2曲目

自動作成3曲目

ステップ数が少ないので、変化には乏しいかもしれませんが、同じ初期フレーズを与えていても、全く異なるフレーズへと発展していくのがわかります。面白いですね!でも一曲目はちょっとセンスないですね(笑)

5.感想とか

AI作曲という技術に触れることができたのはとてもよかったです。図書館とこの本に感謝です!もちろん作りこむとなると大変なのでしょうが、とりあえず本の通りやってみる分にはすんなりとできました。本の内容がとても分かりやすく、サンプルコードも本当にちゃんと動くので、やってて楽しかったです。

一方、magendaによるAI作曲は単音のメロディーやピアノには強そうですが、バンド演奏のような複数楽器を通した自動作曲はまだ難しいのかもしれないなと感じました。一応、3ピースバンド(ボーカル、ドラム、ベース)のAI作曲モデル(Music VAE)というのも用意されていますが、シンセやギターを加えて4パート、5パートなどのマルチパートにしたり、テンポを変更することは不可能です。メロディーライン、ベース、ギター、ピアノごとの、いわゆる「個々の楽器の素案(たたき)をスピーディーに大量に作り出す」ということにおいては、十分に活用できるものだなあと思いました。そしてそれは人間には絶対にできない技であることも、AI作曲の価値というか、特長かなと思います。

いずれはオーケストラAI作曲みたいに、何十種類の楽器(パート)を使い、抑揚なども完璧な自動作曲が実現する世界がくるんでしょうか。

ご興味ある方はぜひ、お試しください!
思いついたフレーズを入れるだけで、今日からあなたもAI作曲家です!(笑)
読んでくださってありがとうございました!

エス・エー・エス株式会社's job postings
30 Likes
30 Likes

Weekly ranking

Show other rankings
Invitation from エス・エー・エス株式会社
If this story triggered your interest, have a chat with the team?