AIを使用した初のDoodleはバッハの誕生日を祝うメロディー&ハーモニー生成器 | Bach Doodleを実現したCoconetの解説

本日のバッハの誕生日(334歳)を祝ったGoogleのDoodleは体験していただけたでしょうか?

https://www.google.com/doodles/celebrating-johann-sebastian-bach

自分で作成した2小節のメロディーにバッハの楽曲306曲を解析し学習させたAIが三声のハーモ二ー(合計四声)を追加して生成してくれます。

動画をご覧ください。

素晴らしいバッハ合唱曲風四声の楽曲が生成されています。
(動画の様に左上のボタンクリックでMIDIファイルにダウンロードできます)

使用されているモデルは、Coconetと呼ばれるものです。
CoconetはMagenta AI開発チームのAnna Huanによって開発されました。
メロディーの調和やゼロからの作曲など、幅広い音楽制作用途に使用できるモデルです。
本日のMagentaのブログ記事に詳細があります。
https://magenta.tensorflow.org/coconet

学習したデータはバッハの合唱曲で全てが四声の楽曲。
多種でありながらシンプルなメロディーである事(規則性もわかりやすい対位法)から機械学習として非常に良いモデルが出来上がっているとの事です。

もちろんTensorFlow.js(Javascriptでtensorflowをコントロール可能)を使用。
Webブラウザでの実装を実現しています。

Coconetについて解説

coconetで第九風メロディーをバッハ風四声曲として生成したデモをお聞きください。

いかがですか?
バッハになってますね。

生成の様子を視覚的に確認できる様にするとこの様な処理が行われている様です。
グレーは入力のメロディーです。
それに合わせてAIがバッハ曲から超高速で音程を予測(赤やオレンジの動き)、ハーモニーを黒の描画の様に生成していきます。


同時にリリースされた音楽生成ウェブアプリcoucou

今回coconetと同時により実践的な音楽制作に使えそうなcoucouというウェブアプリもリリースされています。
http://coconet.glitch.me/

スケール選択やパートの選択など、より高度な機能も追加されいていてこれは使えそうです!
実際に生成してみた動画をご覧ください。

こちらもMIDIファイルのダウンロード可能(saveをクリック)なので是非作成してみてください?


coconetはどの様に動作しているのか?

coconetはバッハの合唱曲を、4つの声部、ソプラノ、アルト、テナー、ベースに分けて学習します。
音の処理は他のMagentaモデル同様(Melody RNNなど)メロディーをOne-Hot表現を使用しています。
One-Hot表現とは、有効な音だけを1として表わし、他は全てゼロとして表す表現方法です。
例えばメロディーだと2次元の0と1だけの行列。
バッハの四声合唱曲はパート数が4つになるため0と1だけを使用した3次元のテンソルとして扱われます。
それにより作られた楽譜データからランダムに音符を消去。
その消去された部分に正しい音を埋めて楽曲生成できる様に学習させてあるとの事。

この学習によりcoconetモデルは使用できる音の確率分布を作ります。
その結果、どんな音の配列や重なりの時には、どんな音がどのくらいの確率で使用できるのかを理解しているのだそうです。
この確率を理解しているために、未知の楽曲、例えばユーザーの入力した新たなメロディーに対しても、確率の高い音を選択して整合性のある楽曲生成ができるという事ですね。

さてプログラムの実行、自身で独自のモデルの開発を行うにはbazel(tensorflowのコンパイルツール)が必要の様です。
現在のMagentaでは必要ではないのですが、、、
このあたり現在のMagenta環境で開発や実行を行う人にはハードルになりますね。
いずれ他のMagenta同様、bazelは不要になるかもしれませんが。(と予測はします)