annotate data/model/Dense3DModelPeakCache.h @ 1520:954d0cf29ca7 import-audio-data

Switch the normalisation option in WritableWaveFileModel from normalising on read to normalising on write, so that the saved file is already normalised and therefore can be read again without having to remember to normalise it
author Chris Cannam
date Wed, 12 Sep 2018 13:56:56 +0100
parents df59bf0b4236
children c01cbe41aeb5
rev   line source
Chris@545 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@545 2
Chris@545 3 /*
Chris@545 4 Sonic Visualiser
Chris@545 5 An audio file viewer and annotation editor.
Chris@545 6 Centre for Digital Music, Queen Mary, University of London.
Chris@545 7 This file copyright 2009 QMUL.
Chris@545 8
Chris@545 9 This program is free software; you can redistribute it and/or
Chris@545 10 modify it under the terms of the GNU General Public License as
Chris@545 11 published by the Free Software Foundation; either version 2 of the
Chris@545 12 License, or (at your option) any later version. See the file
Chris@545 13 COPYING included with this distribution for more information.
Chris@545 14 */
Chris@545 15
Chris@1191 16 #ifndef DENSE_3D_MODEL_PEAK_CACHE_H
Chris@1191 17 #define DENSE_3D_MODEL_PEAK_CACHE_H
Chris@545 18
Chris@545 19 #include "DenseThreeDimensionalModel.h"
Chris@545 20 #include "EditableDenseThreeDimensionalModel.h"
Chris@545 21
Chris@545 22 class Dense3DModelPeakCache : public DenseThreeDimensionalModel
Chris@545 23 {
Chris@546 24 Q_OBJECT
Chris@546 25
Chris@545 26 public:
Chris@1191 27 Dense3DModelPeakCache(const DenseThreeDimensionalModel *source,
Chris@929 28 int columnsPerPeak);
Chris@545 29 ~Dense3DModelPeakCache();
Chris@545 30
Chris@546 31 virtual bool isOK() const {
Chris@546 32 return m_source && m_source->isOK();
Chris@546 33 }
Chris@546 34
Chris@1040 35 virtual sv_samplerate_t getSampleRate() const {
Chris@546 36 return m_source->getSampleRate();
Chris@546 37 }
Chris@546 38
Chris@1038 39 virtual sv_frame_t getStartFrame() const {
Chris@546 40 return m_source->getStartFrame();
Chris@546 41 }
Chris@546 42
Chris@1038 43 virtual sv_frame_t getEndFrame() const {
Chris@546 44 return m_source->getEndFrame();
Chris@546 45 }
Chris@546 46
Chris@929 47 virtual int getResolution() const {
Chris@1190 48 return m_source->getResolution() * m_columnsPerPeak;
Chris@545 49 }
Chris@545 50
Chris@1190 51 virtual int getColumnsPerPeak() const {
Chris@1190 52 return m_columnsPerPeak;
Chris@1190 53 }
Chris@1190 54
Chris@929 55 virtual int getWidth() const {
Chris@1192 56 int sourceWidth = m_source->getWidth();
Chris@1192 57 if ((sourceWidth % m_columnsPerPeak) == 0) {
Chris@1192 58 return sourceWidth / m_columnsPerPeak;
Chris@1192 59 } else {
Chris@1192 60 return sourceWidth / m_columnsPerPeak + 1;
Chris@1192 61 }
Chris@545 62 }
Chris@545 63
Chris@929 64 virtual int getHeight() const {
Chris@545 65 return m_source->getHeight();
Chris@545 66 }
Chris@545 67
Chris@545 68 virtual float getMinimumLevel() const {
Chris@545 69 return m_source->getMinimumLevel();
Chris@545 70 }
Chris@545 71
Chris@545 72 virtual float getMaximumLevel() const {
Chris@545 73 return m_source->getMaximumLevel();
Chris@545 74 }
Chris@545 75
Chris@1339 76 /**
Chris@1339 77 * Retrieve the peaks column at peak-cache column number col. This
Chris@1339 78 * will consist of the peak values in the underlying model from
Chris@1339 79 * columns (col * getColumnsPerPeak()) to ((col+1) *
Chris@1339 80 * getColumnsPerPeak() - 1) inclusive.
Chris@1339 81 */
Chris@1339 82 virtual Column getColumn(int col) const;
Chris@545 83
Chris@1339 84 virtual float getValueAt(int col, int n) const;
Chris@545 85
Chris@929 86 virtual QString getBinName(int n) const {
Chris@545 87 return m_source->getBinName(n);
Chris@545 88 }
Chris@545 89
Chris@545 90 virtual bool shouldUseLogValueScale() const {
Chris@545 91 return m_source->shouldUseLogValueScale();
Chris@545 92 }
Chris@545 93
Chris@545 94 QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
Chris@545 95
Chris@545 96 virtual int getCompletion() const {
Chris@545 97 return m_source->getCompletion();
Chris@545 98 }
Chris@545 99
Chris@545 100 protected slots:
Chris@545 101 void sourceModelChanged();
Chris@545 102 void sourceModelAboutToBeDeleted();
Chris@545 103
Chris@545 104 private:
Chris@1191 105 const DenseThreeDimensionalModel *m_source;
Chris@545 106 mutable EditableDenseThreeDimensionalModel *m_cache;
Chris@1153 107 mutable std::vector<bool> m_coverage; // must be bool, for space efficiency
Chris@1153 108 // (vector of bool uses 1-bit elements)
Chris@1190 109 int m_columnsPerPeak;
Chris@545 110
Chris@929 111 bool haveColumn(int column) const;
Chris@929 112 void fillColumn(int column) const;
Chris@545 113 };
Chris@545 114
Chris@545 115
Chris@545 116 #endif