Help us understand the problem. What is going on with this article?

NSynth と LSTM で作曲に挑戦してみた

More than 1 year has passed since last update.

NSynthとは

 アートや音楽を機械学習で作り出す事を目指す「Magenta」プロジェクトは、そのソースコードがGitHubで公開されています。「Magenta」はリカレントニューラルネットワークを利用して音楽を学習し、学習済みのモデルから新しい音楽を生み出そうとしているようです。「Magenta」の入力形式はMIDIファイルであり、通常のCD音源では学習することができません。しかしながら「Magenta」レポジトリの中にひっそりと置かれる「NSynth」は、WaveNet(※)を利用した音のオートエンコーダーで16次元の特徴空間にエンコードすることが可能です。
※DeepMindが提案した生音を生成するニューラルネットワークのモデル。グーグルアシスタントに搭載されている。詳しくはWeb pageをご参照ください。

生音とNsynthでエンコード・デコードした音楽を比較のために掲載します。
(元の音源) https://soundcloud.com/yu-suzuki-8/skoz-04-skoz-sympho-nick
(デコード後) https://soundcloud.com/yu-suzuki-8/gen-skoz-04-skoz-sympho-nick-embeddings
元の音源は4分30秒ほど、デコード後の音源は20秒ほどですが、初めの20秒のみ比較してお聞きください。

データセット

 学習用の音楽データセットは著作権があったり、有償のものだったりで、無料でライセンスがフリーなものはなかなか良いものが見つかりませんでしたが、今回は下記のデータベースを使用しました。

項目
データベース名 FMA datasets
曲数 106,574
ジャンル 161
URL http://freemusicarchive.org/music/Devil_Music/
GitHub https://github.com/mdeff/fma

FMAデータベースはアメリカのネットラジオ 「WFMU」のアーカイブを基に作成されています。
クリエイティブコモンズ4.0ライセンスであるため、改変したり、再配布が可能です。
GitHubにはSVMやディープラーニング等を利用した、ジャンル分類の分析例が紹介されています。
この中から学習のしやすそうな、ブレイクビートの音楽を27曲ダウンロードし学習を行いました。また、学習したモデルに入力するシードとして1曲ダウンロードしました。

曲生成の方針

以下に曲生成の方針をポン知恵で示します。NSynthでエンコードし、特徴空間の中でLSTMによる学習を行い、最後にNSynthでデコードを行います。
NSynth+LSTM.png

LSTMのモデル

LSTMのネットワークの構成は以下のようになります。
LSTMmodel.png
入力ユニット数、および出力ユニット数の16はNSynthのデコード次元を表しています。
GRUVというライブラリを参考にしました。

結果

生成された音楽は以下です。シードの約3秒間はブレークビートが聞こえますが、それ以降は前衛音楽のようです。。。
Sound Cloud

感想

 NSynthでエンコードした次元を、そのまま時系列として学習し、そのモデルで音楽を生成することは難しいのかもしれません。しかしながら、生音から学習し、音楽の生成に成功した例は沢山あります。今回、私の試みは上手くいきませんでしたが、是非、皆さんは音楽生成にトライして観てください。google wavenet により生成された音楽はプロが作曲し演奏しているようで素晴らしいです。

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away