mirror of
https://github.com/cookiengineer/audacity
synced 2025-11-23 17:30:17 +01:00
Move SpectrumAnalyst into its own files...
... It's the pure calculation common to the Plot Spectrum window and to spectral editing This removes some dependencies on FreqWindow
This commit is contained in:
82
src/SpectrumAnalyst.h
Normal file
82
src/SpectrumAnalyst.h
Normal file
@@ -0,0 +1,82 @@
|
||||
/**********************************************************************
|
||||
|
||||
Audacity: A Digital Audio Editor
|
||||
|
||||
SpectrumAnalyst.h
|
||||
|
||||
Dominic Mazzoni
|
||||
Paul Licameli split from FreqWindow.h
|
||||
|
||||
**********************************************************************/
|
||||
|
||||
#ifndef __AUDACITY_SPECTRUM_ANALYST__
|
||||
#define __AUDACITY_SPECTRUM_ANALYST__
|
||||
|
||||
#include <vector>
|
||||
#include <wx/statusbr.h>
|
||||
|
||||
class FreqGauge;
|
||||
|
||||
class SpectrumAnalyst
|
||||
{
|
||||
public:
|
||||
|
||||
enum Algorithm {
|
||||
Spectrum,
|
||||
Autocorrelation,
|
||||
CubeRootAutocorrelation,
|
||||
EnhancedAutocorrelation,
|
||||
Cepstrum,
|
||||
|
||||
NumAlgorithms
|
||||
};
|
||||
|
||||
SpectrumAnalyst();
|
||||
~SpectrumAnalyst();
|
||||
|
||||
// Return true iff successful
|
||||
bool Calculate(Algorithm alg,
|
||||
int windowFunc, // see FFT.h for values
|
||||
size_t windowSize, double rate,
|
||||
const float *data, size_t dataLen,
|
||||
float *pYMin = NULL, float *pYMax = NULL, // outputs
|
||||
FreqGauge *progress = NULL);
|
||||
|
||||
const float *GetProcessed() const;
|
||||
int GetProcessedSize() const;
|
||||
|
||||
float GetProcessedValue(float freq0, float freq1) const;
|
||||
float FindPeak(float xPos, float *pY) const;
|
||||
|
||||
private:
|
||||
float CubicInterpolate(float y0, float y1, float y2, float y3, float x) const;
|
||||
float CubicMaximize(float y0, float y1, float y2, float y3, float * max) const;
|
||||
|
||||
private:
|
||||
Algorithm mAlg;
|
||||
double mRate;
|
||||
size_t mWindowSize;
|
||||
std::vector<float> mProcessed;
|
||||
};
|
||||
|
||||
class FreqGauge final : public wxStatusBar
|
||||
{
|
||||
public:
|
||||
FreqGauge(wxWindow * parent, wxWindowID winid);
|
||||
|
||||
void SetRange(int range, int bar = 12, int gap = 3);
|
||||
void SetValue(int value);
|
||||
void Reset();
|
||||
|
||||
private:
|
||||
wxRect mRect;
|
||||
int mRange;
|
||||
int mCur;
|
||||
int mLast;
|
||||
int mInterval;
|
||||
int mBar;
|
||||
int mGap;
|
||||
int mMargin;
|
||||
};
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user