音声ファイルから動画ファイルを生成する(34) – スペアナ表示を作る

公開:2014-01-02 07:02
更新:2020-02-15 04:37
カテゴリ:音声動画出力プログラム,windows,c++,audio

昨日までのプログラムでは8192サンプルをFFTして、画面に表示していた。8192サンプルをFFTすると、4096段階の周波数スペクトルが得られる。つまり22050/4096≒5Hz刻みの振幅データが得られる。これを横軸に周波数、縦軸に振幅というグラフ表示をするわけであるが、そのまま表示すると、楽曲で一番周波数の多い帯域(30Hz~4KHz)くらいが左の1/4くらいのところに偏ってしまう(参考:歌声と楽器の周波数帯域)。結果振幅が動くところが左端のみとなってしまい視覚的に面白くない。

なのでたいていのスペアナ表示は表示周波数の刻みを工夫してダイナミックに動くようになっている。Wavespectraというソフトもそういう表示になっている。

なので4KHz位までのところを中心に表示できるようにしてみたのが下記の結果である。表示の刻みであるが、「MIDI Tuning Standard」の下記の数式で求めることにした。

結果、下記の動画になった。

しかしそうすると低域のほうは周波数の動きが小さいのでブロック状に表示されてしまう。これは4096段階では表現するのに少し段階が足りないのではないかということでサンプル数を4倍、16384サンプルにしてみたのが下記である。確かに低域の段階は細かくなったのだが、その代わりに1回あたりのサンプル数が多くなったので時間粒度が粗くなってしまい、動きが楽曲についていっていない。時間粒度と周波数粒度を両立させるのは今やっているサンプル位置をずらしながらFFTを行うという処理方法ではちょっと無理かもしれない。

やっぱりここらでウェーブレットの出番であろうか。