第12回: 音反応 2
前回の授業では主にレコーディングれたものやライブの音声の、音量をビジュアライズすることにフォーカスして紹介しました。
今回はもう1次元あがって、音声の周波数帯ごとの音量をスペクトラム解析を使って取得し、それをビジュアライズするサンプルを紹介していきたいと思います。
スペクトラム解析
/project1/AUDIO_SPECTRUM
スペクトラム解析をするのは非常に簡単で、前回 Audio Analyze CHOP
を入れていたような所を Audio Spectrum CHOP
に変更するだけです。これで入力された音声のスペクトラムが解析されます。
Audio Spectrum CHOP
のパラメーター
/project1/SPECTRUM_PARAMS
Audio Spectrum CHOP
を使うにあたって重要なパラメーターがいくつかあるので解説します。
FFT Size
- スペクトラム解析の計算に使うサンプルのサイズ。高くすると解析の精度は上がるがレスポンスが悪くなる
Frequency <-> Logarithmic Scaling
- スペクトラムのグラフを表示する際の音量 / 周波数の比率を変える。
1に近付くほど高温側の周波数を圧縮して、低音側がちゃんと見れるようなグラフになる High Frequency Boost
- 高温側のボリュームを上げる
これらのパラメーターを解析する音に応じて調整することで、よりよいビジュアライズが得られます。
スペクトルを使ったインスタンシング
/project1/SPECTRUM_INSTANCE
解析したスペクトルはCHOPのデータになるので、もちろんインスタンシングのパラメーターとして使うことができます。
一点注意しなければいけないのは、Audio Spectrum CHOP
から出力されるデータは非常にサンプル数の多いオーディオ的なデータになっている所です。
これをインスタンシングなどをする時にも使いやすいサンプル数の短いデータにするには、Output Length
のパラメーターを Set Length Manually
に変更して欲しいだけのサンプルの長さを入力します。
または、 Audio Spectrum CHOP
の後に Resample CHOP
をつなげて、
Method
をNew Rate, New Interval
にUnit Value
をAbsolute
にStart
,End
の値を変更して欲しいサンプル数にする
といった手順で任意のサンプル数、フレームレートに変換できます。
Audio Spectrum CHOP
の Output Length
を変更するほうが一見簡単にみえますが、その場合だとサンプルレートはオーディオと同じままになってしまい、後々 Lag CHOP
や Filter CHOP
を使おうとした時に何故か動かない… みたいな感じになってしまうので、多少めんどくさくてもResample CHOP
を使って丁寧にフォーマット変換をするのがオススメです。
変換ができれば、いつものようにCHOPで好きなパラメーターを作って Geometry COMP
で動かしていくと周波数に反応するジオメトリのアニメーションができます。
やってみよう
先週やったようにオペレーターを追加したり、パラメーターを変更したりしてアニメーションがどう変化するかを見てみてください。
Resample CHOP
の後、CHOPレベルで変化を加えたり、Geometry COMP
にアサインするインスタンスのパラメーターを変更していくと色々な表現が作れます!
スペクトラムのTrail
/project1/SPECTRUM_TRAIL
Audio Spectrum CHOP
の出力を CHOP to TOP
で変換したものと Feedback TOP
を組み合わせると Trail CHOP
の画像版のようなものを作ることができます。
僕はこのおじさんのチュートリアルで知りました
このスペクトラムのTOP画像は音に反応したものを作る時に非常によく使うのですが、Feedback TOP
のややこしさから、一から作るとなると非常にめんどくさいです。なので、使いたい時は以前に作ったものをコピペしてきたり、zipの中に入っている SPECTRUM_TRAIL.tox
のような形でモジュール化して使いたい時に素早く使えるようにしています。
やってみよう
CHOPやTOPのレベルで色々試して、映像のニュアンスをなるべく音に寄せてみてください。
オーディオファイルを変えてみるのもいいかもしれません。
解析結果が低音域や高音域に偏ってしまっている場合、 Trim CHOP
などを使ってデータ的に変化のない部分をカットしたほうがいい結果になる時があります。
/project1/SPECTRUM_TRAIL2
にも別で作ってみたものがあるので見てみてください。