//#define DEBUG_AUDIOSPEC
#ifdef DEBUG_AUDIOSPEC
#include <fstream>
+#include <QDebug>
bool fileWritten = false;
#endif
m_cfg = kiss_fftr_alloc(ui->windowSize->itemData(ui->windowSize->currentIndex()).toInt(), 0,0,0);
- //m_windowFunctions.insert("tri512", FFTTools::window(FFTTools::Window_Hamming, 8, 0));
- // TODO Window function cache
bool b = true;
QVector<float> window;
float windowScaleFactor = 1;
if (windowType != FFTTools::Window_Rect) {
- window = FFTTools::window(windowType, fftWindow, 0);
+ const QString signature = FFTTools::windowSignature(windowType, fftWindow, 0);
+ if (m_windowFunctions.contains(signature)) {
+#ifdef DEBUG_AUDIOSPEC
+ qDebug() << "Re-using window function with signature " << signature;
+#endif
+ window = m_windowFunctions.value(signature);
+ } else {
+#ifdef DEBUG_AUDIOSPEC
+ qDebug() << "Building new window function with signature " << signature;
+#endif
+ window = FFTTools::window(windowType, fftWindow, 0);
+ m_windowFunctions.insert(signature, window);
+ }
windowScaleFactor = 1.0/window[fftWindow];
- qDebug() << "Using a window scaling factor of " << windowScaleFactor;
}
// Normalize signals to [0,1] to get correct dB values later on
#include <math.h>
+#include <QString>
+
#include "ffttools.h"
//#define DEBUG_FFTTOOLS
{
}
+const QString FFTTools::windowSignature(const WindowType windowType, const int size, const float param)
+{
+ return QString("s%1_t%2_p%3").arg(size).arg(windowType).arg(param, 0, 'f', 3);
+}
+
// http://cplusplus.syntaxerrors.info/index.php?title=Cannot_declare_member_function_%E2%80%98static_int_Foo::bar%28%29%E2%80%99_to_have_static_linkage
-const QVector<float> FFTTools::window(WindowType windowType, const int size, const float param)
+const QVector<float> FFTTools::window(const WindowType windowType, const int size, const float param)
{
// Deliberately avoid converting size to a float
// to keep mid an integer.
default is 0)
* Nothing for the Hamming window
*/
- static const QVector<float> window(WindowType windowType, const int size, const float param);
+ static const QVector<float> window(const WindowType windowType, const int size, const float param);
+
+ static const QString windowSignature(const WindowType windowType, const int size, const float param);
};