音声認識や音楽解析によく使われる指標として 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)ステマ