Chris@147: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*-  vi:set ts=8 sts=4 sw=4: */
Chris@147: 
Chris@147: /*
Chris@147:     Sonic Visualiser
Chris@147:     An audio file viewer and annotation editor.
Chris@147:     Centre for Digital Music, Queen Mary, University of London.
Chris@147:     This file copyright 2006 Chris Cannam.
Chris@147:     
Chris@147:     This program is free software; you can redistribute it and/or
Chris@147:     modify it under the terms of the GNU General Public License as
Chris@147:     published by the Free Software Foundation; either version 2 of the
Chris@147:     License, or (at your option) any later version.  See the file
Chris@147:     COPYING included with this distribution for more information.
Chris@147: */
Chris@147: 
Chris@147: #ifndef _DENSE_TIME_VALUE_MODEL_H_
Chris@147: #define _DENSE_TIME_VALUE_MODEL_H_
Chris@147: 
Chris@147: #include <QObject>
Chris@147: 
Chris@150: #include "Model.h"
Chris@147: 
Chris@147: /**
Chris@147:  * Base class for models containing dense two-dimensional data (value
Chris@863:  * against time).  For example, audio waveform data.  Other time-value
Chris@863:  * plot data, especially if editable, will normally go into a
Chris@863:  * SparseTimeValueModel instead even if regularly sampled.
Chris@147:  */
Chris@147: 
Chris@179: class DenseTimeValueModel : public Model
Chris@147: {
Chris@147:     Q_OBJECT
Chris@147: 
Chris@147: public:
Chris@147:     DenseTimeValueModel();
Chris@147: 
Chris@391:     virtual ~DenseTimeValueModel();
Chris@391: 
Chris@147:     /**
Chris@147:      * Return the minimum possible value found in this model type.
Chris@147:      * (That is, the minimum that would be valid, not the minimum
Chris@147:      * actually found in a particular model).
Chris@147:      */
Chris@147:     virtual float getValueMinimum() const = 0;
Chris@147: 
Chris@147:     /**
Chris@147:      * Return the minimum possible value found in this model type.
Chris@147:      * (That is, the minimum that would be valid, not the minimum
Chris@147:      * actually found in a particular model).
Chris@147:      */
Chris@147:     virtual float getValueMaximum() const = 0;
Chris@147: 
Chris@147:     /**
Chris@147:      * Return the number of distinct channels for this model.
Chris@147:      */
Chris@929:     virtual int getChannelCount() const = 0;
Chris@147: 
Chris@147:     /**
Chris@147:      * Get the specified set of samples from the given channel of the
Chris@1096:      * model in single-precision floating-point format. Returned
Chris@1096:      * vector may have fewer samples than requested, if the end of
Chris@1096:      * file was reached.
Chris@1096:      *
Chris@147:      * If the channel is given as -1, mix all available channels and
Chris@147:      * return the result.
Chris@147:      */
Chris@1096:     virtual std::vector<float> getData(int channel, sv_frame_t start, sv_frame_t count) const = 0;
Chris@147: 
Chris@147:     /**
Chris@1096:      * Get the specified set of samples from given contiguous range of
Chris@1096:      * channels of the model in single-precision floating-point
Chris@1096:      * format. Returned vector may have fewer samples than requested,
Chris@1096:      * if the end of file was reached.
Chris@363:      */
Chris@1096:     virtual std::vector<std::vector<float>> getMultiChannelData(int fromchannel, int tochannel, sv_frame_t start, sv_frame_t count) const = 0;
Chris@363: 
Chris@391:     virtual bool canPlay() const { return true; }
Chris@866:     virtual QString getDefaultPlayClipId() const { return ""; }
Chris@391: 
Chris@1038:     virtual QString toDelimitedDataStringSubset(QString delimiter, sv_frame_t f0, sv_frame_t f1) const;
Chris@838: 
Chris@345:     QString getTypeName() const { return tr("Dense Time-Value"); }
Chris@147: };
Chris@147: 
Chris@147: #endif