音楽データ分析

昔、マルコフ連鎖インベンションみたいな事をやったり、ルールベースの対位法もどきみたいな事をやって放置していたけどようやく再開。

やり方は,楽譜ソフトに音を入力して music21: a Toolkit for Computer-Aided Musicology というPythonのライブラリで読み込み、足りない音の補完など形を整えてcsvで出力→Rで解析。

ちなみにmusic21の日本語の紹介記事 [楽譜][可視化]Pythonで音楽学 d.hatena.ne.jp

目的は、4声帯(大体)の音の予測。 i番目の和音を{C_i}として、{C_i-1,C_i-2,C_i-{y_i}}から目的の音(ソプラノとか){y_i}を予測するモデル。

線形分離とは無縁だと思われるのでとりあえずてきとーにランダムフォレストしてみたらC-majorのみの50和音程度で(島岡和声の1巻より)error rate27%くらい。これはデータを増やせば行けるのでは!?

隠れマルコフモデルで、コード(とか緊張度とか)を潜在変数として、具体的な音はその実現値とする思想がしっくりきていたけど、クラシックだと何となく違うような気もするのですお。iステップ目のサイコロの出目からi+1ステップ目の和音選択への影響が大きい、とかむしろ調もコードも無しでいいのかなぁ・・・とか。

例えば   ω: C→Dm7→G7
tk1→t(k+1)1→t(k+2)1・・・
tk2
tk3
tk4
↑ kステップ目の音,声部(max4)

みたいなモデルで
P(t_k1 | t_k-1,H_k-1,ω_k-1)  H_k={ ∪i t_ki}

P(ωk|ωk-1)  コードの遷移
P(t_k2|t_k1,H_k-1,ω_k-1)  音の出力
みたいな。

自己回帰とか多段のマルコフモデルもある様ですね。

ベートーヴェンスクリャービンの楽譜を混ぜて生成した音を使って作った曲をドヤ顔で弾くのが夢。