mirror of
https://github.com/cookiengineer/audacity
synced 2025-10-26 07:13:49 +01:00
reassignment, internals, implementing frequency correction only
This commit is contained in:
@@ -56,6 +56,7 @@ SpectrogramSettings::Globals
|
||||
SpectrogramSettings::SpectrogramSettings()
|
||||
: hFFT(0)
|
||||
, window(0)
|
||||
, dWindow(0)
|
||||
{
|
||||
LoadPrefs();
|
||||
}
|
||||
@@ -92,6 +93,10 @@ SpectrogramSettings::SpectrogramSettings(const SpectrogramSettings &other)
|
||||
// Do not copy these!
|
||||
, hFFT(0)
|
||||
, window(0)
|
||||
#if 0
|
||||
, tWindow(0)
|
||||
#endif
|
||||
, dWindow(0)
|
||||
{
|
||||
}
|
||||
|
||||
@@ -388,6 +393,10 @@ void SpectrogramSettings::DestroyWindows()
|
||||
delete[] window;
|
||||
window = NULL;
|
||||
}
|
||||
if (dWindow != NULL) {
|
||||
delete[] dWindow;
|
||||
dWindow = NULL;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -405,7 +414,11 @@ namespace
|
||||
window = new float[fftLen];
|
||||
int ii;
|
||||
|
||||
const bool extra = padding > 0;
|
||||
wxASSERT(windowSize % 2 == 0);
|
||||
if (extra)
|
||||
// For windows that do not go to 0 at the edges, this improves symmetry
|
||||
++windowSize;
|
||||
const int endOfWindow = padding + windowSize;
|
||||
// Left and right padding
|
||||
for (ii = 0; ii < padding; ++ii) {
|
||||
@@ -418,25 +431,19 @@ namespace
|
||||
// Overwrite middle as needed
|
||||
switch (which) {
|
||||
case WINDOW:
|
||||
WindowFunc(windowType, windowSize, window + padding);
|
||||
// NewWindowFunc(windowType, windowSize, extra, window + padding);
|
||||
NewWindowFunc(windowType, windowSize, extra, window + padding);
|
||||
break;
|
||||
case TWINDOW:
|
||||
wxASSERT(false);
|
||||
#if 0
|
||||
// Future, reassignment
|
||||
case TWINDOW:
|
||||
NewWindowFunc(windowType, windowSize, extra, window + padding);
|
||||
for (int ii = padding, multiplier = -windowSize / 2; ii < endOfWindow; ++ii, ++multiplier)
|
||||
window[ii] *= multiplier;
|
||||
break;
|
||||
#endif
|
||||
case DWINDOW:
|
||||
wxASSERT(false);
|
||||
#if 0
|
||||
// Future, reassignment
|
||||
DerivativeOfWindowFunc(windowType, windowSize, extra, window + padding);
|
||||
break;
|
||||
#endif
|
||||
default:
|
||||
wxASSERT(false);
|
||||
}
|
||||
@@ -466,6 +473,12 @@ void SpectrogramSettings::CacheWindows() const
|
||||
EndFFT(hFFT);
|
||||
hFFT = InitializeFFT(fftLen);
|
||||
RecreateWindow(window, WINDOW, fftLen, padding, windowType, windowSize, scale);
|
||||
if (algorithm == algReassignment) {
|
||||
#if 0
|
||||
RecreateWindow(tWindow, TWINDOW, fftLen, padding, windowType, windowSize, scale);
|
||||
#endif
|
||||
RecreateWindow(dWindow, DWINDOW, fftLen, padding, windowType, windowSize, scale);
|
||||
}
|
||||
}
|
||||
#endif // EXPERIMENTAL_USE_REALFFTF
|
||||
}
|
||||
|
||||
@@ -154,6 +154,13 @@ public:
|
||||
// Variables used for computing the spectrum
|
||||
mutable FFTParam *hFFT;
|
||||
mutable float *window;
|
||||
|
||||
// Two other windows for computing reassigned spectrogram
|
||||
#if 0
|
||||
mutable float *tWindow; // Window times time parameter
|
||||
#endif
|
||||
mutable float *dWindow; // Derivative of window
|
||||
|
||||
#endif
|
||||
};
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user