読者です 読者をやめる 読者になる 読者になる

渋谷で働くSEのブログ

渋谷で働くSEのお粗末なブログです

中南米音楽の形を見てみたい(2)音にも距離があるの?

今回は、音と音の間の「距離」の話をしようと思います。
詳しい内容は

これ([1307.1201] Topology of Musical Data)とか
これ([1602.00739] Towards a topological fingerprint of music)とかを参考にしてください。

えーとですね…

まずリズムにおける距離から。

ボンボを叩いたり、リズムを刻む何かが発生した2つの箇所をa,\,bとして、距離を
 d_N(a,\,b) = \min(s,\,1-s)\text{ where } s = |a - b|\mod 1
と定義します。
これは、例えば
f:id:kyosuu1:20160903072433p:plain
こんなリズムの中で、小節内の最後のボンボと最初のボンボとの間の距離を求めるとするならば、
「最初のボンボ」じゃなくて「次の小節の最初のボンボ」考えて距離を求める、ということになります。

実際これに従って距離を求めてみると、最初のボンボと最後のボンボの間の距離は1/4になります。


次に、二つの音(周波数)の距離を考えてみます。

前回、1オクターブは周波数がちょうど2倍になるところで、
オクターブ違いは同じものとして扱いたいという話をしました。

というわけで、二つの周波数 f,\,gについて、音の距離を次のように定義します。

 d_{PC}(f,\,g) = \min(s,\,1-s) \text{ where } s = |\log _2 f - \log_2 g| \mod 1

ここで、s1-sのうち小さい方をとっているのは、例えばこんなやつを同じものとしてみなしたいからです。
例えば、「ドレ」と「ドラ#」とか。
後者って、ドを1オクターブあげて「ラ#ド」にしちゃうと、「ドレ」と同じ長2度となるんですね。
このような操作をするために設けているのが1-sなんです。

そして、ハーモニーの距離は、上で定義した距離を用いて次のように表します。
ハーモニーf = (f_1,\,f_2,\,\cdots,\,f_n),\,g = (g_1,\,g_2,\,\cdots,\,g_n)について、距離を

 d_{CC}(f,\,g) = \min \displaystyle\sum _{i=1} ^{n} d_{PC} (f_i,\,\sigma(g_i)),

(ただし\sigmaはサイズnの順列すべて)と定めます。

fは固定していて、gの中の音たちが入れ替わってるような感じですね。

例えば、 f = (\text{ド, ミ, ソ}),\,g=(\text{ミ, ソ, ド})
(ドとかミとかソとかは、適当なところの周波数だと思ってください)
の距離を求めるのであれば、fはそのままにし、gの中の音たちは1オクターブ上とか下とかに動かしてみるわけですね。

このとき、gの中の「ド」を一番はじめに持って来ると、fと一致しますね。

コート(chord)というのは、根音が違っても構成している音がすべて同じであれば同じものとみなせるので、それを実現するために「最小値」を取っているということです。

数式をあまり入れたくなかったんですが、数式なしでは説明がしづらかったです。

次回は、実際Rでpersistent homologyを求めてみようと思います。