データが実際に何を表すかのゼロドキュメントがあるように思われるので、私はWebKitのの、関連するソースコードに見えた:RealtimeAnalyser.cpp
短い答え:取得するFloat32Arrayのすべての値からanalyser.minDecibelsを引きます(analyser.maxDecibels - analyser.minDecibels)と掛け合わせると、getByteFrequencyDataと同様の表現を得ることができます。
長い答え:
getByteFrequencyDataとgetFloatFrequencyDataの両方があなたのデシベル単位で大きさを与えます。それはちょうど異なったスケールだとgetByteFrequencyDataためminDecibels定数が減算さ:WebKitの中
関連するコードをgetByteFrequencyDataため:
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;
関連するコードをWebKitのにgetFloatFrequencyDataのために:
float linearValue = source[i];
double dbMag = !linearValue ? minDecibels : AudioUtilities::linearToDecibels(linearValue);
destination[i] = float(dbMag);
ので、ポジティブ取得します値を指定すると、あなたはminDecibelsを単に差し引くことができます。これは、analyzer nodeに公開されています。
//The minimum power value in the scaling range for the FFT analysis data for conversion to unsigned byte values.
attribute double minDecibels;
デフォルトでは、アナライザノードは時間平滑化を行います。これは、smoothingTimeConstantをゼロに設定することで無効にすることができます。WebKitの中
デフォルト値は次のとおりです。
const double RealtimeAnalyser::DefaultSmoothingTimeConstant = 0.8;
const double RealtimeAnalyser::DefaultMinDecibels = -100;
const double RealtimeAnalyser::DefaultMaxDecibels = -30;
悲しいことに、アナライザノードは複素FFTを計算していても、それはそれだけの大きさ、複雑な表現へのアクセス権を与えるものではありません。
float値からminDecibelsを引くと、正の数が得られないことがあります。私の場合、minDecibelsの値を設定しても実際には何も制限されません。何かご意見は? – nevos