1
0
mirror of https://github.com/cookiengineer/audacity synced 2025-10-26 23:33:49 +01:00

reassignment, internals, implementing frequency correction only

This commit is contained in:
Paul Licameli
2015-05-31 14:58:10 -04:00
parent 1f94d99c43
commit 7113d533fb
3 changed files with 172 additions and 53 deletions

View File

@@ -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
}