annotate data/model/DenseTimeValueModel.h @ 1305:9f9f55a8af92 mp3-gapless

Add gapless flag to MP3FileReader, and implement trimming the delay samples from the start (padding is not yet trimmed from end)
author Chris Cannam
date Tue, 29 Nov 2016 11:35:56 +0000
parents 4d9816ba0ebe
children 54af1e21705c
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@1096 60 * model in single-precision floating-point format. Returned
Chris@1096 61 * vector may have fewer samples than requested, if the end of
Chris@1096 62 * file was reached.
Chris@1096 63 *
Chris@147 64 * If the channel is given as -1, mix all available channels and
Chris@147 65 * return the result.
Chris@147 66 */
Chris@1096 67 virtual std::vector<float> getData(int channel, sv_frame_t start, sv_frame_t count) const = 0;
Chris@147 68
Chris@147 69 /**
Chris@1096 70 * Get the specified set of samples from given contiguous range of
Chris@1096 71 * channels of the model in single-precision floating-point
Chris@1096 72 * format. Returned vector may have fewer samples than requested,
Chris@1096 73 * if the end of file was reached.
Chris@363 74 */
Chris@1096 75 virtual std::vector<std::vector<float>> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const = 0;
Chris@363 76
Chris@391 77 virtual bool canPlay() const { return true; }
Chris@866 78 virtual QString getDefaultPlayClipId() const { return ""; }
Chris@391 79
Chris@1038 80 virtual QString toDelimitedDataStringSubset(QString delimiter, sv_frame_t f0, sv_frame_t f1) const;
Chris@838 81
Chris@345 82 QString getTypeName() const { return tr("Dense Time-Value"); }
Chris@147 83 };
Chris@147 84
Chris@147 85 #endif