computeSpectrum(FFT)のstretchFactorについて

(フーリエ変換を使用した時の)SoundMixer.computeSpectrumメソッドのstretchFactor引数と出力されるスペクトラムデータ(ByteArray)の関係性を視覚化するwonderflのコードを作ってみました。

Adobeのリファレンス「flash.media.SoundMixer - Adobe® Flash® Platform 用 ActionScript® 3.0 リファレンスガイド」によると、stretchFactorはサンプリング解像度を表し、値が0の場合は44.1KHzでサンプリングされ、1の場合は22.05KHz、2の場合は11.025KHz、…となると書いてあります。
そこで、stretchFactorを2^n(0、1、2、4、8、16、…)の範囲で値を増やしていくと、出力されるByteArrayのデータが段々と粗くなって同じ値が連続して現れるようになります。最初は256個全てに異なる値が入っていたものが、2個、4個、8個、…、と同じ値が連続し、最終的には256個全てが同じ値となります。

しかし、よく見ると右端に半端なデータが見受けられます。例えば、stretchFactorを256にすると、255個のデータが同じとなり、最後の1個のデータが別の値になっていました。
そこで色々と試したところ、stretchFactorを0 or 1 or (2^n)+1 (0、1、2、3、5、8、…)にすると、ByteArrayのデータがきれいに並ぶようになりました。
stretchFactorが3の時は2個ずつ同じ値が連続して128種類、5の時は4個ずつ同じ値が連続して64種類、…といった具合に異なる値が半分ずつ減っていきます。

正直、どうしてこうなるのかはよく分かっていませんが、データがきれいに返ってくる(2^n)+1の方が使いやすいので、私はこの方法を使用するようにしています。
ちなみに、「Ripple Beat」では、stretchFactorを65にして使っています。この場合は4種類のデータが得られ、一番最初の値を波紋エフェクトのパラメータにしています。試行錯誤した結果、この方法がサウンドのキックにシンクロしやすかったので。

PRIVATE WORKS

CATEGORIES

ARCHIVES

RELATED

META