データが実際に何を表しているかについてのドキュメントがないように思われるので、関連する webkit のソース コードを調べました: RealtimeAnalyser.cpp
簡単な答え: Float32Array のすべての値からanalyser.minDecibels を減算して正の数を取得し、(analyser.maxDecibels -analyser.minDecibels) を掛けて getByteFrequencyData と同様の表現を取得しますが、解像度が高くなります。
長い答え:
getByteFrequencyData と getFloatFrequencyData はどちらもデシベル単位で大きさを示します。スケーリングが異なるだけで、getByteFrequencyData の場合は minDecibels 定数が減算されます。
getByteFrequencyData の Webkit 内の関連コード:
const double rangeScaleFactor = m_maxDecibels == m_minDecibels ? 1 : 1 / (m_maxDecibels - m_minDecibels);
float linearValue = source[i];
double dbMag = !linearValue ? minDecibels : AudioUtilities::linearToDecibels(linearValue);
// The range m_minDecibels to m_maxDecibels will be scaled to byte values from 0 to UCHAR_MAX.
double scaledValue = UCHAR_MAX * (dbMag - minDecibels) * rangeScaleFactor;
getFloatFrequencyData の Webkit 内の関連コード:
float linearValue = source[i];
double dbMag = !linearValue ? minDecibels : AudioUtilities::linearToDecibels(linearValue);
destination[i] = float(dbMag);
したがって、正の値を取得するには、アナライザー ノードで公開されている minDecibels を自分で差し引くだけです。
//The minimum power value in the scaling range for the FFT analysis data for conversion to unsigned byte values.
attribute double minDecibels;
もう 1 つの詳細は、デフォルトでアナライザー ノードが時間平滑化を行うことです。これは、smoothingTimeConstant をゼロに設定することで無効にできます。
Webkit のデフォルト値は次のとおりです。
const double RealtimeAnalyser::DefaultSmoothingTimeConstant = 0.8;
const double RealtimeAnalyser::DefaultMinDecibels = -100;
const double RealtimeAnalyser::DefaultMaxDecibels = -30;
悲しいことに、アナライザー ノードは複雑な fft を計算しますが、複雑な表現にはアクセスできず、その大きさだけにアクセスできます。