comparison layer/SpectrogramLayer.h @ 37:21d061e66177

* Make the frequency estimation mode in the spectrogram layer actually useful, and make sure it gets mostly the right results... Still some tidying to do in here.
author Chris Cannam
date Wed, 22 Feb 2006 17:45:18 +0000
parents c28ebb4ba4de
children beb801473743
comparison
equal deleted inserted replaced
36:c28ebb4ba4de 37:21d061e66177
37 public PowerOfSqrtTwoZoomConstraint 37 public PowerOfSqrtTwoZoomConstraint
38 { 38 {
39 Q_OBJECT 39 Q_OBJECT
40 40
41 public: 41 public:
42 enum Configuration { FullRangeDb, MelodicRange }; 42 enum Configuration { FullRangeDb, MelodicRange, MelodicPeaks };
43 43
44 SpectrogramLayer(View *w, Configuration = FullRangeDb); 44 SpectrogramLayer(View *w, Configuration = FullRangeDb);
45 ~SpectrogramLayer(); 45 ~SpectrogramLayer();
46 46
47 virtual const ZoomConstraint *getZoomConstraint() const { return this; } 47 virtual const ZoomConstraint *getZoomConstraint() const { return this; }
92 * The default is 1.0. 92 * The default is 1.0.
93 */ 93 */
94 void setGain(float gain); 94 void setGain(float gain);
95 float getGain() const; 95 float getGain() const;
96 96
97 /**
98 * Set the threshold for sample values to be shown in the FFT,
99 * in voltage units.
100 *
101 * The default is 0.0.
102 */
103 void setThreshold(float threshold);
104 float getThreshold() const;
105
106 void setMinFrequency(size_t);
107 size_t getMinFrequency() const;
108
97 void setMaxFrequency(size_t); // 0 -> no maximum 109 void setMaxFrequency(size_t); // 0 -> no maximum
98 size_t getMaxFrequency() const; 110 size_t getMaxFrequency() const;
99 111
100 enum ColourScale { LinearColourScale, MeterColourScale, dBColourScale, 112 enum ColourScale {
101 PhaseColourScale }; 113 LinearColourScale,
114 MeterColourScale,
115 dBColourScale,
116 PhaseColourScale
117 };
102 118
103 /** 119 /**
104 * Specify the scale for sample levels. See WaveformLayer for 120 * Specify the scale for sample levels. See WaveformLayer for
105 * details of meter and dB scaling. The default is dBColourScale. 121 * details of meter and dB scaling. The default is dBColourScale.
106 */ 122 */
116 * Specify the scale for the y axis. 132 * Specify the scale for the y axis.
117 */ 133 */
118 void setFrequencyScale(FrequencyScale); 134 void setFrequencyScale(FrequencyScale);
119 FrequencyScale getFrequencyScale() const; 135 FrequencyScale getFrequencyScale() const;
120 136
121 enum FrequencyAdjustment { 137 enum BinDisplay {
122 RawFrequency, 138 AllBins,
123 PhaseAdjustedFrequency, 139 PeakBins,
124 PhaseAdjustedPeaks 140 PeakFrequencies
125 }; 141 };
126 142
127 /** 143 /**
128 * Specify the processing of frequency bins for the y axis. 144 * Specify the processing of frequency bins for the y axis.
129 */ 145 */
130 void setFrequencyAdjustment(FrequencyAdjustment); 146 void setBinDisplay(BinDisplay);
131 FrequencyAdjustment getFrequencyAdjustment() const; 147 BinDisplay getBinDisplay() const;
132 148
133 void setNormalizeColumns(bool n); 149 void setNormalizeColumns(bool n);
134 bool getNormalizeColumns() const; 150 bool getNormalizeColumns() const;
135 151
136 enum ColourScheme { DefaultColours, WhiteOnBlack, BlackOnWhite, 152 enum ColourScheme { DefaultColours, WhiteOnBlack, BlackOnWhite,
172 int m_channel; 188 int m_channel;
173 size_t m_windowSize; 189 size_t m_windowSize;
174 WindowType m_windowType; 190 WindowType m_windowType;
175 size_t m_windowOverlap; 191 size_t m_windowOverlap;
176 float m_gain; 192 float m_gain;
193 float m_threshold;
177 int m_colourRotation; 194 int m_colourRotation;
195 size_t m_minFrequency;
178 size_t m_maxFrequency; 196 size_t m_maxFrequency;
179 ColourScale m_colourScale; 197 ColourScale m_colourScale;
180 ColourScheme m_colourScheme; 198 ColourScheme m_colourScheme;
181 FrequencyScale m_frequencyScale; 199 FrequencyScale m_frequencyScale;
182 FrequencyAdjustment m_frequencyAdjustment; 200 BinDisplay m_binDisplay;
183 bool m_normalizeColumns; 201 bool m_normalizeColumns;
184 202
203 enum { NO_VALUE = 0 };
204
185 // A QImage would do just as well here, and we originally used 205 // A QImage would do just as well here, and we originally used
186 // one: the problem is that we want to munlock() the memory it 206 // one: the problem is that we want to munlock() the memory it
187 // uses, and it's much easier to do that if we control it. This 207 // uses, and it's much easier to do that if we control it. This
188 // cache is hardwired to an effective 8-bit colour mapped layout. 208 // cache is hardwired to an effective 8-bit colour mapped layout.
189 class Cache { 209 class Cache {