post Image
楽曲生成ニューラルネットワークを作った話

自作のMIDIパーサとLSTMを使って楽曲生成ニューラルネットワークを作りました。最近ではMagentaのようなプロジェクトもありn番煎じ感はありますが、出力される確率分布からのサンプリング方法に手を加えたところちょっと面白い結果が得られたので共有します。

デモ (※即時再生のため音量注意)

レポジトリ


LSTM

シーケンシャルなデータの持つ文脈を学習することができるニューラルネットワークの一種です。詳細については良記事が山ほどあるのそちらに譲ります。以下が詳しいです。


MIDI(SMF)

演奏データが音高、音量、時間情報等を持つチャンクのシーケンスとして表現されたフォーマットです。このシーケンス(の一部)をLSTMの入力として利用します。


処理の流れ

  1. 学習対象のMIDIファイルをパースし、チャンクを文字列に変換
  2. 変換後のチャンクのシーケンスを使い、モデルを訓練
  3. 作成したモデルと適当なチャンクのシーケンスを元にMIDIデータを表現するテキストデータを生成。モデルからの出力の都度、確率分布からのサンプリングに使うパラメータを変更することでランダム性を付加。
  4. 出力結果をMIDIに変換


結果

発生確率の低い要素を一定の頻度で出力するようにしたところ、原曲を若干アレンジした風の楽曲が生成されました。


備考

自作MIDIパーサが現状なかなか簡易的で、処理していないチャンク、情報もあるためもうちょっと作り込めば出力の質も上がると思われます。


『 Python 』Article List