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

Zero-crossing rate (ZCR) を使った音楽解析

音声認識や音楽解析によく使われる指標として Zero-crossing rate (ZCR) というのがあるそうだ。これは、音声の波形を描いたとき、波が中央より上(正)から中央より下(負)に、またはその逆に変化する頻度を数えて、その頻度により音声の特徴を表すというもの。ZCRが大きいほどより noisy な音声と捉えられるらしい。


この ZCR を使って様々なジャンルの音楽で分析を行った実例が、Elias Pampalk 氏の Computational Models of Music Similarity and their
Application in Music Information Retrieval という論文で紹介されている。面白そうな上、案外簡単に実装できそうな気がしたので、オイラも早速 perl で作ってみた。


(ソースは GitHub に置いておきました)


今回は分析方法として、楽曲の中央から前後30秒を抜き出し、その間に波が正から負、またはその逆に変化した点の数をカウント。1ms あたりの発生数を最終的な結果とした。

使用した楽曲は、オイラの手持ちの曲から適当に10曲ほど。事前に wav(44.1kHz, 16bit, mono)形式に変換しておいた。


結果は以下の通り。ZCRの小さい順に並べてある。

曲名 アーティスト ZCR
日々 吉田山田 1.21
Bossa Nova at 2:00 AM TOMOYOSHI NAKAMURA QUARTET 1.51
Around Forty Blues TOMOYOSHI NAKAMURA QUARTET 2.21
ごはんはおかず 放課後ティータイム 3.02
divine intervention fhana 3.39
Big City Bright Lights ArtOfficial 3.50
すぱそにっ すーぱーそに子 3.63
S・M・L☆ アフィリア・サーガ 4.16
Believe -天真爛漫 Ver.- すずみ 4.46
Skywalker Collioure 4.47
Brave your truth Daisy×Daisy 5.53


曲名についているリンクの飛び先で、楽曲の一部のみだが試聴することができる。実際に聞きながらZCR値を比較してみると効果が分かりやすいかも。(*1)


ZCR が noisy さを表す指標と考えると、概ね合っているかなぁ、という印象(気のせい?)。吉田山田さんの「日々」とか純朴な曲だし、ZCR が低いのは納得。先に紹介した Elias Pampalk 氏の論文だと、ジャズはおおむね低くなる傾向があるとのことだったけど、上記の実験でも TOMOYOSHI NAKAMURA QUARTET さんの2曲(ジャズ)はともに低い ZCR となっていた。


意外だったのが、Collioure さんの Skywalker。結構爽やかなサウンドで、ZCRも低くなるんじゃないかと予想してたのだが、結果は10曲の中で上から2番目。パーカッションが強いからかなぁ。


あと今回は試せなかったのだが、クラシック音楽はあまり良い結果を得られないらしい。そもそも ZCR の限界として、音の高低にも左右されてしまう(高音=周波数が高い=ZCRが高くなる)という点がある。なので ZCR 単体ではなく、他の手法とも併用するのが良いようだ。


とはいえ、実装が案外簡単な割に良い結果が得られた気がする。時間があったら今回試せなかったジャンルの曲も試してみたい。



(*1)ステマ