Wizard Notes

Python, JavaScript を使った音楽信号分析の技術録、作曲活動に関する雑記

東方プロジェクトの音楽をデータ分析:テンポ特徴+主成分分析+類似度行列で楽曲推薦

前回、東方プロジェクト原曲(紅魔郷~輝針城)のBPM(テンポ)分析では、近年の作品ほどテンポが速くなっている傾向があるなど、いくつも興味深い結果が得られました。

今回は、BPMではなく、テンポ特徴(サイクリックテンポグラム)という最近の手法を使うことで、もう少し踏み込んだテンポ分析を行いたいと思います。

使用楽曲

東方プロジェクト原曲(紅魔郷~輝針城)のBPM(テンポ)分析と同じく、紅魔郷~輝針城の原曲を分析しています。計148楽曲です。

www.wizard-notes.com

テンポ特徴を主成分分析

Perfume The Best "P Cubed" の全52曲をテンポ特徴でクラスタ分析 と同じように、各楽曲ごとにサイクリックテンポグラムの時間平均(CTG-HIST)をテンポ特徴として利用しています。これは、24次元の特徴量となっています。

また、全楽曲のCTG-HISTを算出後、主成分分析を使って寄与率の高い主成分(10次元目まで)を使って分析します。

www.wizard-notes.com

分析結果

各主成分の寄与率

f:id:Kurene:20191112053325p:plain
寄与率・累積寄与率

主成分の寄与率と累積寄与率です。

この結果から、今回のデータでは、主成分ベクトル10次元程度で元のテンポ特徴(24次元のCTG-HIST)を95%表すことができていると考えられます。

そこで、今回は第1~10主成分ベクトルを使って楽曲分析を行います((楽曲特徴量で主成分分析を適用すると、寄与率の低い次元で、いい感じに特徴を表現できていることが結構あるので、どの次元まで使うかはデータとユースケース次第です)。

各主成分と楽曲のプロット

第1主成分、第2主成分

f:id:Kurene:20191112060327p:plain
第1,2主成分

横軸が第1主成分、縦軸が第2主成分です。

環状にも見え、興味深い分布となっています。これは、特徴量であるサイクリックテンポグラムがBPMに基づいて循環する構造であるためだと予想しています(例:サイクリックテンポグラムの0次元目は、BPM={30, 60, 120, 240, ...} の成分を集約している)。

www.wizard-notes.com

第3主成分、第4主成分

f:id:Kurene:20191112060431p:plain
第3主成分、第4主成分

第1、第2主成分と比較すると、ばらつきは少なくなっており、外れ値のような楽曲が見て取れます。

第3、第4主成分合わせて、BPMの小さい、テンポのゆるやかな曲では成分が大きくなっている傾向があります。

第5主成分、第6主成分

f:id:Kurene:20191112060510p:plain
第5主成分、第6主成分

第3、第4主成分よりも顕著に、外れ値のような楽曲が見て取れます。テンポの速い/遅い楽曲を示している可能性があります。

主成分と類似度行列で、似ている楽曲を探す

第1~10主成分と自己類似度行列(コサイン類似度)を使って、テンポの似ている楽曲を確認します。

以下では、この第1~10主成分をテンポ特徴と呼びます。

f:id:Kurene:20191112062043p:plain
自己類似度行列

縦軸・横軸ともに同じ楽曲名です。ただし、BPMが低い(テンポが遅い)順にソートしています。

値が大きい(赤い)ほど、2つの楽曲は似ていることを示しています。

これを見ると、2曲間のテンポ特徴が近いほどBPMも近い傾向があることがわかります。

ただし例外もあります。図の自己類似度行列で、「メイドと血の懐中時計」や「聖徳伝説 ~ True Administrator」とかは、もう少し遅いBPMの楽曲と類似しているという結果になっています。

こういった楽曲は、楽曲内でテンポチェンジや拍子が変わったりしています。なので、それを利用してテンポチェンジがある曲を探すこともできるかもしれません。

楽曲推薦(似た楽曲を探す)

類似度行列では、縦横が楽曲となっています。つまり、値が大きいほど2つの楽曲は似ていることを示します。

これをデータベース化してみました。

www.wizard-notes.com

自身の感想は、「確かに雰囲気やテンポは似てるなー」という感じです。

例えば、

f:id:Kurene:20191112084516p:plain

は実際聞いてみると結構いい感じです。

他にも、

f:id:Kurene:20191112084737p:plain

f:id:Kurene:20191112085156p:plain

は、類似度の算出のされ方が良さげです。

148曲をこちらに掲載しているので、もしよければじっくり見て(+聞いて)みてください。

まとめ

東方プロジェクトの音楽をデータ分析として、テンポ特徴を主成分分析しました。

また、類似度行列を使って似た楽曲を列挙(楽曲推薦)しました。

まだまだ考察の余地はあり、また、クラスタ分析(e.g. k-means)もやってみようかと思いましたが、この記事では一旦ここまでにします。

付録

第1主成分、第2主成分、第3主成分の3Dプロット

f:id:Kurene:20191112060245p:plain