annotate layer/VerticalBinLayer.h @ 1127:9fb8dfd7ce4c spectrogram-minor-refactor

Fix threshold in spectrogram -- it wasn't working in the last release. There is a new protocol for this. Formerly the threshold parameter had a range from -50dB to 0 with the default at -50, and -50 treated internally as "no threshold". However, there was a hardcoded, hidden internal threshold for spectrogram colour mapping at -80dB with anything below this being rounded to zero. Now the threshold parameter has range -81 to -1 with the default at -80, -81 is treated internally as "no threshold", and there is no hidden internal threshold. So the default behaviour is the same as before, an effective -80dB threshold, but it is now possible to change this in both directions. Sessions reloaded from prior versions may look slightly different because, if the session says there should be no threshold, there will now actually be no threshold instead of having the hidden internal one. Still need to do something in the UI to make it apparent that the -81dB setting removes the threshold entirely. This is at least no worse than the previous, also obscured, magic -50dB setting.
author Chris Cannam
date Mon, 01 Aug 2016 16:21:01 +0100
parents 261a00010918
children 4eafe5a1b655
rev   line source
Chris@1082 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@1082 2
Chris@1082 3 /*
Chris@1082 4 Sonic Visualiser
Chris@1082 5 An audio file viewer and annotation editor.
Chris@1082 6 Centre for Digital Music, Queen Mary, University of London.
Chris@1082 7 This file copyright 2006-2016 Chris Cannam and QMUL.
Chris@1082 8
Chris@1082 9 This program is free software; you can redistribute it and/or
Chris@1082 10 modify it under the terms of the GNU General Public License as
Chris@1082 11 published by the Free Software Foundation; either version 2 of the
Chris@1082 12 License, or (at your option) any later version. See the file
Chris@1082 13 COPYING included with this distribution for more information.
Chris@1082 14 */
Chris@1082 15
Chris@1082 16 #ifndef VERTICAL_BIN_LAYER_H
Chris@1082 17 #define VERTICAL_BIN_LAYER_H
Chris@1082 18
Chris@1110 19 #include "SliceableLayer.h"
Chris@1110 20
Chris@1082 21 /**
Chris@1082 22 * Interface for layers in which the Y axis corresponds to bin number
Chris@1082 23 * rather than scale value. Colour3DPlotLayer is the obvious example.
Chris@1111 24 * Conceptually these are always SliceableLayers as well, and this
Chris@1111 25 * subclasses from SliceableLayer to avoid a big inheritance mess.
Chris@1082 26 */
Chris@1110 27 class VerticalBinLayer : public SliceableLayer
Chris@1082 28 {
Chris@1082 29 public:
Chris@1082 30 /**
Chris@1082 31 * Return the y coordinate at which the given bin "starts"
Chris@1082 32 * (i.e. at the bottom of the bin, if the given bin is an integer
Chris@1082 33 * and the vertical scale is the usual way up). Bin number may be
Chris@1082 34 * fractional, to obtain a position part-way through a bin.
Chris@1082 35 */
Chris@1113 36 virtual double getYForBin(const LayerGeometryProvider *, double bin) const = 0;
Chris@1082 37
Chris@1082 38 /**
Chris@1082 39 * As getYForBin, but rounding to integer values.
Chris@1082 40 */
Chris@1113 41 virtual int getIYForBin(const LayerGeometryProvider *v, int bin) const {
Chris@1085 42 return int(round(getYForBin(v, bin)));
Chris@1085 43 }
Chris@1082 44
Chris@1082 45 /**
Chris@1082 46 * Return the bin number, possibly fractional, at the given y
Chris@1082 47 * coordinate. Note that the whole numbers occur at the positions
Chris@1082 48 * at which the bins "start" (i.e. the bottom of the visible bin,
Chris@1082 49 * if the vertical scale is the usual way up).
Chris@1082 50 */
Chris@1113 51 virtual double getBinForY(const LayerGeometryProvider *, double y) const = 0;
Chris@1082 52
Chris@1082 53 /**
Chris@1082 54 * As getBinForY, but rounding to integer values.
Chris@1082 55 */
Chris@1113 56 virtual int getIBinForY(const LayerGeometryProvider *v, int y) const {
Chris@1085 57 return int(floor(getBinForY(v, y)));
Chris@1085 58 }
Chris@1082 59 };
Chris@1082 60
Chris@1082 61 #endif
Chris@1082 62