田中秀和のコード進行をもとにマルコフ連鎖をしたら結構いい感じになった話

こんにちはシカクドットです。趣味で曲を作っています。

少し前の話を思い出しながらですが、タイトルのがうまくいったので簡単にまとめました。


経緯

1. 歌詞を考えるのが苦手なので楽できないか考え、自動作詞などを調べる。

2. Qiitaの記事をいくつか見ると機械学習でもマルコフ連鎖でも生成文書の完成度は微妙そう。そもそもプログラミング初心者なので複雑なのは作れない。

3. pythonにmarkovifyというライブラリがあり、ライブラリ化されているならできそう。

4. まずは文章より単語数が少ないコード進行で実践してみる。分かち書きなども不要だし比較的簡単そう。


コード

コードはほぼmarkovfyのBasic Usageのコピーです。


テキストファイル読み込み時にエラーがでたのでこちらを参考に解決したほか、括弧でエラーが出る仕様らしいので元テキストから括弧を取り除く記述を加えました。


元データ

ChordWikiからせっせか移しました。(多分ほかの人はスクレイピングとかで自動で収集できるんでしょうね…)

1. 自分が好きな曲を自由にピックアップ

2. wiki側の機能でKey=Cに移調

3. 特殊なコードを執拗に繰り返すような間奏の進行は除く

これでひたすらメモ帳に入れていきます。最終的にはこうなりました。

無題

気持ちいほどの分数コードとaugの数。


生成結果

コード進行を5個出力しました。仕様上括弧が消えています。

CM7 FM7 Eaug/Bb Am7 D79 FM7 Eaug/Bb Am7 D79 FM7 Eaug/Bb Em7 Am7 G7
FM79 E7 Em7/A Am7 Dm7 E7 Am D7 G
FM7 G G/F Em7 A7b9 Dm G Em A Dm Em F F#m7-5 Gsus4 G
Fadd9 G7sus4 Am7 G/B C C#dim7 Dm7 C/G FM7 Eaug/Bb Em7 A7 Dm7 G7 C
F#m7-5 Fm6 Em7 Ebdim7 Dm7 Dm7/G G7b9 CM7 Em7/A Am7 Dm7 E7 Am7 

テンションコード、分数コードも多く、分数augも飛び出してきて結構いい感じに思います。


まとめ

元データの取捨選択が大事だと思いました。

コード進行生成で検索すると、キーをそろえなかった結果不自然なコードが生成された例を見かけたので、この複雑さでもよさげな進行が生成可能になってそこを実感しています。

この記事が気に入ったらサポートをしてみませんか?