annotate data/model/DenseTimeValueModel.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents 59e7fe1b1003
children cc27f35aa75c
rev   line source
Chris@147 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@147 2
Chris@147 3 /*
Chris@147 4 Sonic Visualiser
Chris@147 5 An audio file viewer and annotation editor.
Chris@147 6 Centre for Digital Music, Queen Mary, University of London.
Chris@147 7 This file copyright 2006 Chris Cannam.
Chris@147 8
Chris@147 9 This program is free software; you can redistribute it and/or
Chris@147 10 modify it under the terms of the GNU General Public License as
Chris@147 11 published by the Free Software Foundation; either version 2 of the
Chris@147 12 License, or (at your option) any later version. See the file
Chris@147 13 COPYING included with this distribution for more information.
Chris@147 14 */
Chris@147 15
Chris@147 16 #ifndef _DENSE_TIME_VALUE_MODEL_H_
Chris@147 17 #define _DENSE_TIME_VALUE_MODEL_H_
Chris@147 18
Chris@147 19 #include <QObject>
Chris@147 20
Chris@150 21 #include "Model.h"
Chris@147 22
Chris@147 23 /**
Chris@147 24 * Base class for models containing dense two-dimensional data (value
Chris@863 25 * against time). For example, audio waveform data. Other time-value
Chris@863 26 * plot data, especially if editable, will normally go into a
Chris@863 27 * SparseTimeValueModel instead even if regularly sampled.
Chris@147 28 */
Chris@147 29
Chris@179 30 class DenseTimeValueModel : public Model
Chris@147 31 {
Chris@147 32 Q_OBJECT
Chris@147 33
Chris@147 34 public:
Chris@147 35 DenseTimeValueModel();
Chris@147 36
Chris@391 37 virtual ~DenseTimeValueModel();
Chris@391 38
Chris@147 39 /**
Chris@147 40 * Return the minimum possible value found in this model type.
Chris@147 41 * (That is, the minimum that would be valid, not the minimum
Chris@147 42 * actually found in a particular model).
Chris@147 43 */
Chris@147 44 virtual float getValueMinimum() const = 0;
Chris@147 45
Chris@147 46 /**
Chris@147 47 * Return the minimum possible value found in this model type.
Chris@147 48 * (That is, the minimum that would be valid, not the minimum
Chris@147 49 * actually found in a particular model).
Chris@147 50 */
Chris@147 51 virtual float getValueMaximum() const = 0;
Chris@147 52
Chris@147 53 /**
Chris@147 54 * Return the number of distinct channels for this model.
Chris@147 55 */
Chris@929 56 virtual int getChannelCount() const = 0;
Chris@147 57
Chris@147 58 /**
Chris@147 59 * Get the specified set of samples from the given channel of the
Chris@147 60 * model in single-precision floating-point format. Return the
Chris@147 61 * number of samples actually retrieved.
Chris@147 62 * If the channel is given as -1, mix all available channels and
Chris@147 63 * return the result.
Chris@147 64 */
Chris@929 65 virtual int getData(int channel, int start, int count,
Chris@300 66 float *buffer) const = 0;
Chris@147 67
Chris@147 68 /**
Chris@147 69 * Get the specified set of samples from the given channel of the
Chris@147 70 * model in double-precision floating-point format. Return the
Chris@147 71 * number of samples actually retrieved.
Chris@147 72 * If the channel is given as -1, mix all available channels and
Chris@147 73 * return the result.
Chris@147 74 */
Chris@929 75 virtual int getData(int channel, int start, int count,
Chris@300 76 double *buffer) const = 0;
Chris@345 77
Chris@363 78 /**
Chris@363 79 * Get the specified set of samples from given contiguous range
Chris@363 80 * of channels of the model in single-precision floating-point
Chris@363 81 * format. Return the number of sample frames actually retrieved.
Chris@363 82 */
Chris@929 83 virtual int getData(int fromchannel, int tochannel,
Chris@929 84 int start, int count,
Chris@363 85 float **buffers) const = 0;
Chris@363 86
Chris@391 87 virtual bool canPlay() const { return true; }
Chris@866 88 virtual QString getDefaultPlayClipId() const { return ""; }
Chris@391 89
Chris@929 90 virtual QString toDelimitedDataStringSubset(QString delimiter, int f0, int f1) const;
Chris@838 91
Chris@345 92 QString getTypeName() const { return tr("Dense Time-Value"); }
Chris@147 93 };
Chris@147 94
Chris@147 95 #endif