annotate data/model/Dense3DModelPeakCache.h @ 823:f0558e69a074

Rename Resampling- to DecodingWavFileReader, and use it whenever we have an audio file that is not quickly seekable using libsndfile. Avoids very slow performance when analysing ogg files.
author Chris Cannam
date Wed, 17 Jul 2013 15:40:01 +0100
parents 95391b480e17
children 59e7fe1b1003
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@545 16 #ifndef _DENSE_3D_MODEL_PEAK_CACHE_H_
Chris@545 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 #include "base/ResizeableBitset.h"
Chris@545 22
Chris@545 23 class Dense3DModelPeakCache : public DenseThreeDimensionalModel
Chris@545 24 {
Chris@546 25 Q_OBJECT
Chris@546 26
Chris@545 27 public:
Chris@545 28 Dense3DModelPeakCache(DenseThreeDimensionalModel *source,
Chris@545 29 size_t columnsPerPeak);
Chris@545 30 ~Dense3DModelPeakCache();
Chris@545 31
Chris@546 32 virtual bool isOK() const {
Chris@546 33 return m_source && m_source->isOK();
Chris@546 34 }
Chris@546 35
Chris@546 36 virtual size_t getSampleRate() const {
Chris@546 37 return m_source->getSampleRate();
Chris@546 38 }
Chris@546 39
Chris@546 40 virtual size_t getStartFrame() const {
Chris@546 41 return m_source->getStartFrame();
Chris@546 42 }
Chris@546 43
Chris@546 44 virtual size_t getEndFrame() const {
Chris@546 45 return m_source->getEndFrame();
Chris@546 46 }
Chris@546 47
Chris@546 48 virtual Model *clone() const {
Chris@546 49 return new Dense3DModelPeakCache(m_source, m_resolution);
Chris@546 50 }
Chris@546 51
Chris@545 52 virtual size_t getResolution() const {
Chris@545 53 return m_source->getResolution() * m_resolution;
Chris@545 54 }
Chris@545 55
Chris@545 56 virtual size_t getWidth() const {
Chris@545 57 return m_source->getWidth() / m_resolution + 1;
Chris@545 58 }
Chris@545 59
Chris@545 60 virtual size_t getHeight() const {
Chris@545 61 return m_source->getHeight();
Chris@545 62 }
Chris@545 63
Chris@545 64 virtual float getMinimumLevel() const {
Chris@545 65 return m_source->getMinimumLevel();
Chris@545 66 }
Chris@545 67
Chris@545 68 virtual float getMaximumLevel() const {
Chris@545 69 return m_source->getMaximumLevel();
Chris@545 70 }
Chris@545 71
Chris@545 72 virtual bool isColumnAvailable(size_t column) const;
Chris@545 73
Chris@545 74 virtual Column getColumn(size_t column) const;
Chris@545 75
Chris@545 76 virtual float getValueAt(size_t column, size_t n) const;
Chris@545 77
Chris@545 78 virtual QString getBinName(size_t n) const {
Chris@545 79 return m_source->getBinName(n);
Chris@545 80 }
Chris@545 81
Chris@545 82 virtual bool shouldUseLogValueScale() const {
Chris@545 83 return m_source->shouldUseLogValueScale();
Chris@545 84 }
Chris@545 85
Chris@545 86 QString getTypeName() const { return tr("Dense 3-D Peak Cache"); }
Chris@545 87
Chris@545 88 virtual int getCompletion() const {
Chris@545 89 return m_source->getCompletion();
Chris@545 90 }
Chris@545 91
Chris@545 92 protected slots:
Chris@545 93 void sourceModelChanged();
Chris@545 94 void sourceModelAboutToBeDeleted();
Chris@545 95
Chris@545 96 private:
Chris@545 97 DenseThreeDimensionalModel *m_source;
Chris@545 98 mutable EditableDenseThreeDimensionalModel *m_cache;
Chris@545 99 mutable ResizeableBitset m_coverage;
Chris@545 100 size_t m_resolution;
Chris@545 101
Chris@545 102 bool haveColumn(size_t column) const;
Chris@545 103 void fillColumn(size_t column) const;
Chris@545 104 };
Chris@545 105
Chris@545 106
Chris@545 107 #endif