音楽データ分析(2)

島岡氏の和声の本のサンプルやら,図書館で借りてきた本の解答を手動でノーテーションソフトに入力して,music21等を使い、4声になっていない部分を補完。

和音の声部の横の流れはとりあえず考えないで、入力した音の基準で和音の縦の響きの「良さ」を計算してみる。 最大エントロピー法で、Xを和音,x_i∈Xを音程と(鍵盤の距離で0-34して
{p(X)=\frac{e^{\sum_{k} \omega * f_k(x) }}{Z} }
というモデルを考える。 素性fは音程があれば1そうでなければ0。重みωは35次元で、L2ノルムの制約つき(ω2=1)。 和音に出てくる2音の音程(つまり4音なら4C2=6パターン)のXω/(2度のパターン数)をスコアとしました。 入力した和音は4音350くらい。全部C-major。

f:id:biones:20160219174009p:plain 音程のスコアの分布。x軸はMIDIの距離(オクターブ→12)

無事オクターブ(12),5度(7),3度(3,4)あたりが高くなった。

本当は音程ではなく音そのものでやりたかったのだけど(低いド-ミと高いド-ミの意味はだいぶ違うと思うから)、思っていたよりかなりデータが手に入りにくいので、低次元な方向でやりたいと思う。 次は隣り合った2和音について、「台形」の(前の和音の2声部の縦の音程、下の声部が変化分,上の声部の変化分)を素性としてやりたいと思う。これだと連続・平達5度等が考慮される・・・ハズ。

XTを教師データの音,x0∈XTを探索を開始する和音,Xを探索パラメータωに基づいて生成された音, scoreωをXに対するωで評価したスコアとして scoreω(X(x0,ω))とscore_ω(XT)の差をlossとしてωを最適化する、探索を組み込んだ将棋のボナンザメソッドみたいな事できないだろーか。。。

転調は調を隠れ変数、転移音は転移音用の素性を用意すれば、大分実際の曲のデータを使えるようになる・・・と思う。

pandas,numpy.matrix,listの行き来はまだまだ慣れないですorz