annotate layer/SliceLayer.h @ 1386:fc3d89f88690 spectrogramparam

Use log-frequency rather than log-bin for calculating x coord in spectrum. This has the advantage that frequency positions don't move when we change the window size or oversampling ratio, but it does give us an unhelpfully large amount of space for very low frequencies - to be considered
author Chris Cannam
date Mon, 12 Nov 2018 11:34:34 +0000
parents 86f319dd6ab9
children 1eb560b363e7
rev   line source
Chris@133 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@133 2
Chris@133 3 /*
Chris@133 4 Sonic Visualiser
Chris@133 5 An audio file viewer and annotation editor.
Chris@133 6 Centre for Digital Music, Queen Mary, University of London.
Chris@182 7 This file copyright 2006 QMUL.
Chris@133 8
Chris@133 9 This program is free software; you can redistribute it and/or
Chris@133 10 modify it under the terms of the GNU General Public License as
Chris@133 11 published by the Free Software Foundation; either version 2 of the
Chris@133 12 License, or (at your option) any later version. See the file
Chris@133 13 COPYING included with this distribution for more information.
Chris@133 14 */
Chris@133 15
Chris@1284 16 #ifndef SV_SLICE_LAYER_H
Chris@1284 17 #define SV_SLICE_LAYER_H
Chris@133 18
Chris@287 19 #include "SingleColourLayer.h"
Chris@133 20
Chris@153 21 #include "base/Window.h"
Chris@153 22
Chris@193 23 #include "data/model/DenseThreeDimensionalModel.h"
Chris@133 24
Chris@133 25 #include <QColor>
Chris@133 26
Chris@287 27 class SliceLayer : public SingleColourLayer
Chris@133 28 {
Chris@133 29 Q_OBJECT
Chris@133 30
Chris@133 31 public:
Chris@193 32 SliceLayer();
Chris@193 33 ~SliceLayer();
Chris@133 34
Chris@193 35 virtual const Model *getModel() const { return 0; }
Chris@193 36
Chris@193 37 void setSliceableModel(const Model *model);
Chris@193 38
Chris@916 39 virtual void paint(LayerGeometryProvider *v, QPainter &paint, QRect rect) const;
Chris@133 40
Chris@918 41 virtual QString getFeatureDescription(LayerGeometryProvider *v, QPoint &) const;
Chris@198 42
Chris@918 43 virtual int getVerticalScaleWidth(LayerGeometryProvider *v, bool, QPainter &) const;
Chris@918 44 virtual void paintVerticalScale(LayerGeometryProvider *v, bool, QPainter &paint, QRect rect) const;
Chris@195 45
Chris@1383 46 virtual int getHorizontalScaleHeight(LayerGeometryProvider *, QPainter &) const { return 0; }
Chris@1383 47
Chris@287 48 virtual ColourSignificance getLayerColourSignificance() const {
Chris@287 49 return ColourAndBackgroundSignificant;
Chris@287 50 }
Chris@287 51
Chris@1281 52 virtual bool hasLightBackground() const;
Chris@1281 53
Chris@153 54 virtual PropertyList getProperties() const;
Chris@153 55 virtual QString getPropertyLabel(const PropertyName &) const;
Chris@335 56 virtual QString getPropertyIconName(const PropertyName &) const;
Chris@153 57 virtual PropertyType getPropertyType(const PropertyName &) const;
Chris@153 58 virtual QString getPropertyGroupName(const PropertyName &) const;
Chris@153 59 virtual int getPropertyRangeAndValue(const PropertyName &,
Chris@216 60 int *min, int *max, int *deflt) const;
Chris@153 61 virtual QString getPropertyValueLabel(const PropertyName &,
Chris@1266 62 int value) const;
Chris@167 63 virtual RangeMapper *getNewPropertyRangeMapper(const PropertyName &) const;
Chris@153 64 virtual void setProperty(const PropertyName &, int value);
Chris@133 65 virtual void setProperties(const QXmlAttributes &);
Chris@133 66
Chris@905 67 virtual bool getValueExtents(double &min, double &max,
Chris@133 68 bool &logarithmic, QString &unit) const;
Chris@133 69
Chris@1238 70 virtual bool getDisplayExtents(double &min, double &max) const;
Chris@1238 71 virtual bool setDisplayExtents(double min, double max);
Chris@1238 72
Chris@1238 73 virtual int getVerticalZoomSteps(int &defaultStep) const;
Chris@1238 74 virtual int getCurrentVerticalZoomStep() const;
Chris@1238 75 virtual void setVerticalZoomStep(int);
Chris@1238 76 virtual RangeMapper *getNewVerticalZoomRangeMapper() const;
Chris@1238 77
Chris@217 78 virtual bool hasTimeXAxis() const { return false; }
Chris@217 79
Chris@918 80 virtual bool isLayerScrollable(const LayerGeometryProvider *) const { return false; }
Chris@133 81
Chris@538 82 enum EnergyScale { LinearScale, MeterScale, dBScale, AbsoluteScale };
Chris@153 83
Chris@193 84 enum SamplingMode { NearestSample, SampleMean, SamplePeak };
Chris@153 85
Chris@197 86 enum PlotStyle { PlotLines, PlotSteps, PlotBlocks, PlotFilledBlocks };
Chris@153 87
Chris@193 88 enum BinScale { LinearBins, LogBins, InvertedLogBins };
Chris@153 89
Chris@1281 90 bool usesSolidColour() const { return m_plotStyle == PlotFilledBlocks; }
Chris@1281 91
Chris@197 92 void setFillColourMap(int);
Chris@197 93 int getFillColourMap() const { return m_colourMap; }
Chris@197 94
Chris@153 95 void setEnergyScale(EnergyScale);
Chris@153 96 EnergyScale getEnergyScale() const { return m_energyScale; }
Chris@153 97
Chris@193 98 void setSamplingMode(SamplingMode);
Chris@193 99 SamplingMode getSamplingMode() const { return m_samplingMode; }
Chris@153 100
Chris@193 101 void setPlotStyle(PlotStyle style);
Chris@193 102 PlotStyle getPlotStyle() const { return m_plotStyle; }
Chris@193 103
Chris@193 104 void setBinScale(BinScale scale);
Chris@193 105 BinScale getBinScale() const { return m_binScale; }
Chris@153 106
Chris@284 107 void setThreshold(float);
Chris@905 108 float getThreshold() const { return m_threshold; }
Chris@284 109
Chris@153 110 void setGain(float gain);
Chris@153 111 float getGain() const;
Chris@153 112
Chris@153 113 void setNormalize(bool n);
Chris@153 114 bool getNormalize() const;
Chris@153 115
Chris@316 116 virtual void toXml(QTextStream &stream, QString indent = "",
Chris@316 117 QString extraAttributes = "") const;
Chris@153 118
Chris@193 119 public slots:
Chris@193 120 void sliceableModelReplaced(const Model *, const Model *);
Chris@193 121 void modelAboutToBeDeleted(Model *);
Chris@133 122
Chris@133 123 protected:
Chris@1386 124 /// Convert a (possibly non-integral) bin into x-coord. May be overridden
Chris@1238 125 virtual double getXForBin(const LayerGeometryProvider *, double bin) const;
Chris@1386 126
Chris@1386 127 /// Convert an x-coord into (possibly non-integral) bin. May be overridden
Chris@1238 128 virtual double getBinForX(const LayerGeometryProvider *, double x) const;
Chris@274 129
Chris@1386 130 /// Convert a point such as a bin number into x-coord, given max &
Chris@1386 131 /// min. For use by getXForBin etc
Chris@1386 132 double getXForScalePoint(const LayerGeometryProvider *,
Chris@1386 133 double p, double pmin, double pmax) const;
Chris@1386 134
Chris@1386 135 /// Convert an x-coord into a point such as a bin number, given
Chris@1386 136 /// max & min. For use by getBinForX etc
Chris@1386 137 double getScalePointForX(const LayerGeometryProvider *,
Chris@1386 138 double x, double pmin, double pmax) const;
Chris@1386 139
Chris@1238 140 virtual double getYForValue(const LayerGeometryProvider *v, double value, double &norm) const;
Chris@1238 141 virtual double getValueForY(const LayerGeometryProvider *v, double y) const;
Chris@198 142
Chris@918 143 virtual QString getFeatureDescriptionAux(LayerGeometryProvider *v, QPoint &,
Chris@805 144 bool includeBinDescription,
Chris@805 145 int &minbin, int &maxbin,
Chris@805 146 int &range) const;
Chris@199 147
Chris@254 148 // This curve may, of course, be flat -- the spectrum uses it for
Chris@254 149 // normalizing the fft results by the fft size (with 1/(fftsize/2)
Chris@254 150 // in each bin).
Chris@254 151 typedef std::vector<float> BiasCurve;
Chris@254 152 virtual void getBiasCurve(BiasCurve &) const { return; }
Chris@254 153
Chris@284 154 virtual float getThresholdDb() const;
Chris@284 155
Chris@287 156 virtual int getDefaultColourHint(bool dark, bool &impose);
Chris@287 157
Chris@193 158 const DenseThreeDimensionalModel *m_sliceableModel;
Chris@197 159 int m_colourMap;
Chris@1362 160 bool m_colourInverted;
Chris@193 161 EnergyScale m_energyScale;
Chris@193 162 SamplingMode m_samplingMode;
Chris@193 163 PlotStyle m_plotStyle;
Chris@193 164 BinScale m_binScale;
Chris@193 165 bool m_normalize;
Chris@284 166 float m_threshold;
Chris@284 167 float m_initialThreshold;
Chris@193 168 float m_gain;
Chris@1238 169 int m_minbin;
Chris@1238 170 int m_maxbin;
Chris@195 171 mutable std::vector<int> m_scalePoints;
Chris@1284 172 mutable int m_scalePaintHeight;
Chris@1238 173 mutable std::map<int, int> m_xorigins; // LayerGeometryProvider id -> x
Chris@1238 174 mutable std::map<int, int> m_yorigins; // LayerGeometryProvider id -> y
Chris@1238 175 mutable std::map<int, int> m_heights; // LayerGeometryProvider id -> h
Chris@906 176 mutable sv_frame_t m_currentf0;
Chris@906 177 mutable sv_frame_t m_currentf1;
Chris@198 178 mutable std::vector<float> m_values;
Chris@133 179 };
Chris@133 180
Chris@133 181 #endif