sonograph
flight404の人がmagnetosphereというiTunesのビジュアライザを作っており、これが大変美しく、音の微細な変化に敏感に反応して様子を変えていきます。ここまではいかずとも、音の種類を判断して、なにか演出を出し分けたりしたいものです。
いろいろ調べて引っかかったのが、sonographというものです。音の周波数分布を、時系列に並べて眺めることができます。
SoundMixer.computeSpectrumで音の高低のデータを取り出し、強く鳴っている音程ほど赤く着色して1列に並べます。下の方が低音で上に行くほど高音です。この列がどんどん左に流れていくようにしています。
なんとなく、メロディにあわせて赤いラインが上下しているのが分かるでしょうか。
一番下の音程のところがやけに縦に伸びて見えると思いますが、これにはわけがあります。
人間の聴覚は低音ほど敏感で、高音はどうでもいいという特性があり、そのため、低音から高音までを等間隔で並べると、なんか全部の成分が低音に偏って見えるのです。(参考:音の説明)
その聴覚の感覚とグラフの分布が自然に対応するように、低音域の表示領域を拡大し、高音域ほど小さく表示するよう、対数というフィルターを使って描画したのが、上記の図になります。
ただ、悲しい哉、馬場は対数という言葉が出てきた時点で、実は理解の及ばぬ地点に踏み込んでいます。一応、ソースを上げますが、細かい数式については決して信用なさらぬよう。
しかしそれにしても今回のサンプルでは解像度が粗すぎる気がします。magnetosphereはもっと細かいデータを取ってる気がする。FlashPlayer9だとこれ以上やりようがなさそうなので、astroでおんなじことをやったほうがいいか、いっそProcessingを覚えるか。
それに、こうやって視覚化しても、ここからどうやって音の種類の判断に結びつけるのか、謎は深まる一方です。