Model is the base class for all data models that represent any sort of data on a time scale based on an audio frame rate. More...

#include <Model.h>

Inheritance diagram for Model:
Inheritance graph
Collaboration diagram for Model:
Collaboration graph

Public Types

typedef Id ModelId
 
typedef TypedId< ModelId
 
enum  { NO_ID = -1 }
 
typedef int ExportId
 

Signals

void modelChanged (ModelId myId)
 Emitted when a model has been edited (or more data retrieved from cache, in the case of a cached model that generates slowly) More...
 
void modelChangedWithin (ModelId myId, sv_frame_t startFrame, sv_frame_t endFrame)
 Emitted when a model has been edited (or more data retrieved from cache, in the case of a cached model that generates slowly) More...
 
void completionChanged (ModelId myId)
 Emitted when some internal processing has advanced a stage, but the model has not changed externally. More...
 
void ready (ModelId myId)
 Emitted when internal processing is complete (i.e. More...
 
void alignmentCompletionChanged (ModelId myId)
 Emitted when the completion percentage changes for the calculation of this model's alignment model. More...
 

Public Member Functions

virtual ~Model ()
 
virtual bool isOK () const =0
 Return true if the model was constructed successfully. More...
 
virtual sv_frame_t getStartFrame () const =0
 Return the first audio frame spanned by the model. More...
 
sv_frame_t getEndFrame () const
 Return the audio frame at the end of the model, i.e. More...
 
virtual sv_frame_t getTrueEndFrame () const =0
 Return the audio frame at the end of the model. More...
 
void extendEndFrame (sv_frame_t to)
 Extend the end of the model. More...
 
virtual sv_samplerate_t getSampleRate () const =0
 Return the frame rate in frames per second. More...
 
virtual sv_samplerate_t getNativeRate () const
 Return the frame rate of the underlying material, if the model itself has already been resampled. More...
 
virtual QString getTitle () const
 Return the "work title" of the model, if known. More...
 
virtual QString getMaker () const
 Return the "artist" or "maker" of the model, if known. More...
 
virtual QString getLocation () const
 Return the location of the data in this model (e.g. More...
 
virtual QString getTypeName () const =0
 Return the type of the model. More...
 
virtual bool isSparse () const
 Return true if this is a sparse model. More...
 
virtual bool isReady (int *cp=nullptr) const
 Return true if the model has finished loading or calculating all its data, for a model that is capable of calculating in a background thread. More...
 
virtual int getCompletion () const =0
 Return an estimated percentage value showing how far through any background operation used to calculate or load the model data the model thinks it is. More...
 
virtual const ZoomConstraintgetZoomConstraint () const
 If this model imposes a zoom constraint, i.e. More...
 
virtual ModelId getSourceModel () const
 If this model was derived from another, return the id of the model it was derived from. More...
 
virtual void setSourceModel (ModelId model)
 Set the source model for this model. More...
 
virtual void setAlignment (ModelId alignmentModel)
 Specify an alignment between this model's timeline and that of a reference model. More...
 
virtual const ModelId getAlignment () const
 Retrieve the alignment model for this model. More...
 
virtual const ModelId getAlignmentReference () const
 Return the reference model for the current alignment timeline, if any. More...
 
virtual sv_frame_t alignToReference (sv_frame_t frame) const
 Return the frame number of the reference model that corresponds to the given frame number in this model. More...
 
virtual sv_frame_t alignFromReference (sv_frame_t referenceFrame) const
 Return the frame number in this model that corresponds to the given frame number of the reference model. More...
 
virtual int getAlignmentCompletion () const
 Return the completion percentage for the alignment model: 100 if there is no alignment model or it has been entirely calculated, or less than 100 if it is still being calculated. More...
 
void setRDFTypeURI (QString uri)
 Set the event, feature, or signal type URI for the features contained in this model, according to the Audio Features RDF ontology. More...
 
QString getRDFTypeURI () const
 Retrieve the event, feature, or signal type URI for the features contained in this model, if previously set with setRDFTypeURI. More...
 
void toXml (QTextStream &stream, QString indent="", QString extraAttributes="") const override
 Stream this exportable object out to XML on a text stream. More...
 
virtual QVector< QString > getStringExportHeaders (DataExportOptions options) const =0
 Return a label for each column that would be written by toStringExportRows. More...
 
virtual QVector< QVector< QString > > toStringExportRows (DataExportOptions options, sv_frame_t startFrame, sv_frame_t duration) const =0
 Emit events starting within the given range as string rows ready for conversion to an e.g. More...
 
ExportId getExportId () const
 Return the numerical export identifier for this object. More...
 
virtual QString toXmlString (QString indent="", QString extraAttributes="") const
 Convert this exportable object to XML in a string. More...
 
virtual bool canPlay () const
 
virtual QString getDefaultPlayClipId () const
 
virtual bool getDefaultPlayAudible () const
 

Static Public Member Functions

static QString encodeEntities (QString)
 
static QString encodeColour (int r, int g, int b)
 

Protected Member Functions

 Model ()
 
 Model (const Model &)=delete
 
Modeloperator= (const Model &)=delete
 
Id getId () const
 Return an id for this object. More...
 
int getUntypedId () const
 Return an id for this object. More...
 

Protected Attributes

QMutex m_mutex
 
ModelId m_sourceModel
 
ModelId m_alignmentModel
 
QString m_typeUri
 
std::atomic< sv_frame_tm_extendTo
 

Private Slots

void alignmentModelCompletionChanged (ModelId)
 

Detailed Description

Model is the base class for all data models that represent any sort of data on a time scale based on an audio frame rate.

Model classes are expected to be thread-safe, particularly with regard to content rather than metadata (e.g. populating a model from a transform running in a background thread while displaying it in a UI layer).

Never store a pointer to a model unless it is completely private to the code owning it. Models should be referred to using their ModelId id and looked up from the ById pool when needed. This returns a shared pointer, which ensures a sufficient lifespan for a transient operation locally. See notes in ById.h. The document unregisters models when it is closed, and then they are deleted when the last shared pointer instance expires.

Definition at line 51 of file Model.h.

Member Typedef Documentation

typedef Id Model::ModelId

Definition at line 59 of file Model.h.

typedef TypedId<Model > WithTypedId< Model >::Id
inherited

Definition at line 180 of file ById.h.

typedef int XmlExportable::ExportId
inherited

Definition at line 33 of file XmlExportable.h.

Member Enumeration Documentation

anonymous enum
inherited
Enumerator
NO_ID 

Definition at line 28 of file XmlExportable.h.

Constructor & Destructor Documentation

Model::~Model ( )
virtual

Definition at line 25 of file Model.cpp.

References WithTypedId< Model >::getId(), and SVDEBUG.

Model::Model ( )
inlineprotected

Definition at line 331 of file Model.h.

References operator=().

Model::Model ( const Model )
protecteddelete

Member Function Documentation

virtual bool Model::isOK ( ) const
pure virtual
sv_frame_t Model::getEndFrame ( ) const
inline

Return the audio frame at the end of the model, i.e.

the final frame contained within the model plus 1 (rounded up to the model's "resolution" granularity, if more than 1). The end frame minus the start frame should yield the total duration in frames (as a multiple of the resolution) spanned by the model. This is broadly consistent with the definition of the end frame of a Selection object.

If the end has been extended by extendEndFrame() beyond the true end frame, return the extended end instead. This is usually the behaviour you want.

Definition at line 87 of file Model.h.

References getTrueEndFrame(), and m_extendTo.

Referenced by alignFromReference(), ReadOnlyWaveFileModel::cacheFilled(), WaveformOversampler::getFixedRatioData(), SparseOneDimensionalModel::getNotes(), NoteModel::getNotes(), ReadOnlyWaveFileModel::isReady(), toXml(), CSVFileWriter::write(), CSVStreamWriter::writeInChunks(), and WavFileWriter::writeModel().

virtual sv_frame_t Model::getTrueEndFrame ( ) const
pure virtual
void Model::extendEndFrame ( sv_frame_t  to)
inline

Extend the end of the model.

If this is set to something beyond the true end of the data within the model, then getEndFrame() will return this value instead of the true end. (This is used by the Tony application.)

Definition at line 109 of file Model.h.

References getSampleRate(), and m_extendTo.

virtual sv_samplerate_t Model::getNativeRate ( ) const
inlinevirtual

Return the frame rate of the underlying material, if the model itself has already been resampled.

Reimplemented in WritableWaveFileModel, ReadOnlyWaveFileModel, and WaveFileModel.

Definition at line 122 of file Model.h.

References getLocation(), getMaker(), getSampleRate(), getTitle(), and getTypeName().

QString Model::getTitle ( ) const
virtual

Return the "work title" of the model, if known.

Reimplemented in WritableWaveFileModel, ReadOnlyWaveFileModel, and WaveFileModel.

Definition at line 177 of file Model.cpp.

References TypedById< Item, Id >::get(), m_mutex, and m_sourceModel.

Referenced by getNativeRate().

QString Model::getMaker ( ) const
virtual

Return the "artist" or "maker" of the model, if known.

Reimplemented in WritableWaveFileModel, ReadOnlyWaveFileModel, and WaveFileModel.

Definition at line 186 of file Model.cpp.

References TypedById< Item, Id >::get(), m_mutex, and m_sourceModel.

Referenced by getNativeRate().

QString Model::getLocation ( ) const
virtual

Return the location of the data in this model (e.g.

source URL). This should not normally be returned for editable models that have been edited.

Reimplemented in WritableWaveFileModel, ReadOnlyWaveFileModel, and WaveFileModel.

Definition at line 195 of file Model.cpp.

References TypedById< Item, Id >::get(), m_mutex, and m_sourceModel.

Referenced by getNativeRate().

virtual bool Model::isSparse ( ) const
inlinevirtual

Return true if this is a sparse model.

Reimplemented in NoteModel, SparseTimeValueModel, BoxModel, RegionModel, SparseOneDimensionalModel, ImageModel, and TextModel.

Definition at line 149 of file Model.h.

Referenced by CSVFileWriter::writeSelection().

virtual bool Model::isReady ( int *  cp = nullptr) const
inlinevirtual

Return true if the model has finished loading or calculating all its data, for a model that is capable of calculating in a background thread.

If "completion" is non-NULL, return through it an estimated percentage value showing how far through the background operation it thinks it is (for progress reporting). This should be identical to the value returned by getCompletion().

A model that carries out all its calculation from the constructor or accessor functions would typically return true (and completion == 100) as long as isOK() is true. Other models may make the return value here depend on the internal completion status.

See also getCompletion().

Reimplemented in ReadOnlyWaveFileModel, AlignmentModel, BasicCompressedDenseThreeDimensionalModel, AggregateWaveModel, and EditableDenseThreeDimensionalModel.

Definition at line 169 of file Model.h.

References getCompletion(), and isOK().

virtual int Model::getCompletion ( ) const
pure virtual

Return an estimated percentage value showing how far through any background operation used to calculate or load the model data the model thinks it is.

Must return 100 when the model is complete.

A model that carries out all its calculation from the constructor or accessor functions might return 0 if isOK() is false and 100 if isOK() is true. Other models may make the return value here depend on the internal completion status.

See also isReady().

Implemented in WritableWaveFileModel, NoteModel, DenseThreeDimensionalModel, SparseTimeValueModel, Dense3DModelPeakCache, RegionModel, BoxModel, SparseOneDimensionalModel, ImageModel, TextModel, FFTModel, ReadOnlyWaveFileModel, AlignmentModel, BasicCompressedDenseThreeDimensionalModel, AggregateWaveModel, and EditableDenseThreeDimensionalModel.

Referenced by isReady().

virtual const ZoomConstraint* Model::getZoomConstraint ( ) const
inlinevirtual

If this model imposes a zoom constraint, i.e.

some limit to the set of resolutions at which its data can meaningfully be displayed, then return it.

Reimplemented in WritableWaveFileModel, ReadOnlyWaveFileModel, AggregateWaveModel, and AlignmentModel.

Definition at line 196 of file Model.h.

virtual ModelId Model::getSourceModel ( ) const
inlinevirtual

If this model was derived from another, return the id of the model it was derived from.

The assumption is that the source model's alignment will also apply to this model, unless some other property (such as a specific alignment model set on this model) indicates otherwise.

Definition at line 207 of file Model.h.

References alignFromReference(), alignToReference(), getAlignment(), getAlignmentCompletion(), getAlignmentReference(), m_sourceModel, setAlignment(), and setSourceModel().

void Model::setSourceModel ( ModelId  model)
virtual

Set the source model for this model.

Definition at line 31 of file Model.cpp.

References alignmentCompletionChanged(), TypedById< Item, Id >::get(), m_mutex, and m_sourceModel.

Referenced by RDFImporterImpl::getDataModelsSparse(), and getSourceModel().

void Model::setAlignment ( ModelId  alignmentModel)
virtual

Specify an alignment between this model's timeline and that of a reference model.

The alignment model, of type AlignmentModel, records both the reference and the alignment.

Definition at line 45 of file Model.cpp.

References alignmentModelCompletionChanged(), completionChanged(), TypedById< Item, Id >::get(), m_alignmentModel, m_mutex, and SVDEBUG.

Referenced by getSourceModel().

const ModelId Model::getAlignment ( ) const
virtual

Retrieve the alignment model for this model.

This is not a generally useful function, as the alignment you really want may be performed by the source model instead. You should normally use getAlignmentReference, alignToReference and alignFromReference instead of this. The main intended application for this function is in streaming out alignments to the session file.

Definition at line 72 of file Model.cpp.

References m_alignmentModel, and m_mutex.

Referenced by getSourceModel().

const ModelId Model::getAlignmentReference ( ) const
virtual

Return the reference model for the current alignment timeline, if any.

Definition at line 79 of file Model.cpp.

References m_alignmentModel, and m_mutex.

Referenced by getSourceModel().

sv_frame_t Model::alignToReference ( sv_frame_t  frame) const
virtual

Return the frame number of the reference model that corresponds to the given frame number in this model.

Definition at line 88 of file Model.cpp.

References TypedById< Item, Id >::get(), m_alignmentModel, m_mutex, and m_sourceModel.

Referenced by getSourceModel().

sv_frame_t Model::alignFromReference ( sv_frame_t  referenceFrame) const
virtual

Return the frame number in this model that corresponds to the given frame number of the reference model.

Definition at line 116 of file Model.cpp.

References TypedById< Item, Id >::get(), getEndFrame(), m_alignmentModel, m_mutex, and m_sourceModel.

Referenced by getSourceModel().

int Model::getAlignmentCompletion ( ) const
virtual

Return the completion percentage for the alignment model: 100 if there is no alignment model or it has been entirely calculated, or less than 100 if it is still being calculated.

Definition at line 141 of file Model.cpp.

References TypedById< Item, Id >::get(), m_alignmentModel, m_mutex, m_sourceModel, and SVCERR.

Referenced by getSourceModel().

void Model::setRDFTypeURI ( QString  uri)
inline

Set the event, feature, or signal type URI for the features contained in this model, according to the Audio Features RDF ontology.

Definition at line 264 of file Model.h.

References m_typeUri.

Referenced by FeatureExtractionModelTransformer::getAdditionalModel(), and RDFImporterImpl::getDataModelsSparse().

QString Model::getRDFTypeURI ( ) const
inline

Retrieve the event, feature, or signal type URI for the features contained in this model, if previously set with setRDFTypeURI.

Definition at line 271 of file Model.h.

References alignmentCompletionChanged(), alignmentModelCompletionChanged(), completionChanged(), getStringExportHeaders(), m_typeUri, modelChanged(), modelChangedWithin(), ready(), toStringExportRows(), and toXml().

virtual QVector<QString> Model::getStringExportHeaders ( DataExportOptions  options) const
pure virtual
virtual QVector<QVector<QString> > Model::toStringExportRows ( DataExportOptions  options,
sv_frame_t  startFrame,
sv_frame_t  duration 
) const
pure virtual

Emit events starting within the given range as string rows ready for conversion to an e.g.

comma-separated data format.

Implemented in NoteModel, BoxModel, SparseTimeValueModel, RegionModel, SparseOneDimensionalModel, TextModel, ImageModel, BasicCompressedDenseThreeDimensionalModel, EditableDenseThreeDimensionalModel, Dense3DModelPeakCache, FFTModel, DenseTimeValueModel, and AlignmentModel.

Referenced by getRDFTypeURI(), and CSVStreamWriter::writeInChunks().

void Model::completionChanged ( ModelId  myId)
signal
void Model::ready ( ModelId  myId)
signal

Emitted when internal processing is complete (i.e.

when isReady() would return true, with completion at 100).

Referenced by ReadOnlyWaveFileModel::cacheFilled(), getRDFTypeURI(), AggregateWaveModel::isReady(), and ReadOnlyWaveFileModel::isReady().

void Model::alignmentCompletionChanged ( ModelId  myId)
signal

Emitted when the completion percentage changes for the calculation of this model's alignment model.

(The ModelId provided is that of this model, not the alignment model.)

Referenced by alignmentModelCompletionChanged(), getRDFTypeURI(), and setSourceModel().

void Model::alignmentModelCompletionChanged ( ModelId  )
privateslot

Definition at line 66 of file Model.cpp.

References alignmentCompletionChanged(), and WithTypedId< Model >::getId().

Referenced by getRDFTypeURI(), and setAlignment().

Model& Model::operator= ( const Model )
protecteddelete

Referenced by Model().

Id WithTypedId< Model >::getId ( ) const
inlineprotectedinherited

Return an id for this object.

The id is a unique value for this object among all objects that implement WithId within this single run of the application.

Definition at line 193 of file ById.h.

References TypedId< T >::untyped.

Referenced by BoxModel::add(), RegionModel::add(), SparseTimeValueModel::add(), NoteModel::add(), alignmentModelCompletionChanged(), ReadOnlyWaveFileModel::cacheFilled(), AggregateWaveModel::componentModelChanged(), WritableWaveFileModel::componentModelChanged(), AggregateWaveModel::componentModelChangedWithin(), WritableWaveFileModel::componentModelChangedWithin(), AggregateWaveModel::componentModelCompletionChanged(), ReadOnlyWaveFileModel::fillTimerTimedOut(), ImageModel::getInsertRowCommand(), TextModel::getInsertRowCommand(), SparseOneDimensionalModel::getInsertRowCommand(), RegionModel::getInsertRowCommand(), BoxModel::getInsertRowCommand(), SparseTimeValueModel::getInsertRowCommand(), NoteModel::getInsertRowCommand(), ImageModel::getRemoveRowCommand(), TextModel::getRemoveRowCommand(), SparseOneDimensionalModel::getRemoveRowCommand(), RegionModel::getRemoveRowCommand(), BoxModel::getRemoveRowCommand(), SparseTimeValueModel::getRemoveRowCommand(), NoteModel::getRemoveRowCommand(), ImageModel::getSetDataCommand(), TextModel::getSetDataCommand(), SparseOneDimensionalModel::getSetDataCommand(), RegionModel::getSetDataCommand(), BoxModel::getSetDataCommand(), SparseTimeValueModel::getSetDataCommand(), NoteModel::getSetDataCommand(), WritableWaveFileModel::init(), NoteModel::NoteModel(), AlignmentModel::pathSourceCompletionChanged(), ReadOnlyWaveFileModel::ReadOnlyWaveFileModel(), ImageModel::remove(), TextModel::remove(), SparseOneDimensionalModel::remove(), BoxModel::remove(), RegionModel::remove(), SparseTimeValueModel::remove(), NoteModel::remove(), EditableDenseThreeDimensionalModel::setBinName(), BasicCompressedDenseThreeDimensionalModel::setBinName(), EditableDenseThreeDimensionalModel::setBinNames(), BasicCompressedDenseThreeDimensionalModel::setBinNames(), EditableDenseThreeDimensionalModel::setColumn(), BasicCompressedDenseThreeDimensionalModel::setColumn(), EditableDenseThreeDimensionalModel::setCompletion(), BasicCompressedDenseThreeDimensionalModel::setCompletion(), AlignmentModel::setCompletion(), TextModel::setCompletion(), ImageModel::setCompletion(), SparseOneDimensionalModel::setCompletion(), BoxModel::setCompletion(), RegionModel::setCompletion(), SparseTimeValueModel::setCompletion(), NoteModel::setCompletion(), SparseOneDimensionalModel::SparseOneDimensionalModel(), SparseTimeValueModel::SparseTimeValueModel(), WritableWaveFileModel::writeComplete(), ~Model(), NoteModel::~NoteModel(), ReadOnlyWaveFileModel::~ReadOnlyWaveFileModel(), SparseOneDimensionalModel::~SparseOneDimensionalModel(), SparseTimeValueModel::~SparseTimeValueModel(), and WritableWaveFileModel::~WritableWaveFileModel().

int WithId::getUntypedId ( ) const
inlineprotectedinherited

Return an id for this object.

The id is a unique number for this object among all objects that implement WithId within this single run of the application.

Definition at line 168 of file ById.h.

int XmlExportable::getExportId ( ) const
inherited

Return the numerical export identifier for this object.

It's allocated the first time this is called, so objects on which this is never called do not get allocated one.

Definition at line 71 of file XmlExportable.cpp.

References XmlExportable::m_exportId, and mutex.

Referenced by EditableDenseThreeDimensionalModel::toXml(), BasicCompressedDenseThreeDimensionalModel::toXml(), EventSeries::toXml(), ImageModel::toXml(), TextModel::toXml(), toXml(), SparseOneDimensionalModel::toXml(), RegionModel::toXml(), BoxModel::toXml(), SparseTimeValueModel::toXml(), NoteModel::toXml(), and XmlExportable::~XmlExportable().

QString XmlExportable::toXmlString ( QString  indent = "",
QString  extraAttributes = "" 
) const
virtualinherited

Convert this exportable object to XML in a string.

The default implementation calls toXml and returns the result as a string. Do not override this unless you really know what you're doing.

Definition at line 25 of file XmlExportable.cpp.

References XmlExportable::toXml().

Referenced by ModelTransformerFactory::getConfigurationForTransform(), RDFTransformFactoryImpl::getTransforms(), and XmlExportable::~XmlExportable().

QString XmlExportable::encodeColour ( int  r,
int  g,
int  b 
)
staticinherited

Definition at line 54 of file XmlExportable.cpp.

Referenced by XmlExportable::~XmlExportable().

virtual bool Playable::canPlay ( ) const
inlinevirtualinherited

Reimplemented in NoteModel, SparseTimeValueModel, SparseOneDimensionalModel, and DenseTimeValueModel.

Definition at line 26 of file Playable.h.

virtual QString Playable::getDefaultPlayClipId ( ) const
inlinevirtualinherited

Reimplemented in NoteModel, SparseOneDimensionalModel, and DenseTimeValueModel.

Definition at line 27 of file Playable.h.

Referenced by PlayParameterRepository::addPlayable().

virtual bool Playable::getDefaultPlayAudible ( ) const
inlinevirtualinherited

Reimplemented in SparseTimeValueModel.

Definition at line 28 of file Playable.h.

Referenced by PlayParameterRepository::addPlayable().

Member Data Documentation

ModelId Model::m_sourceModel
protected
ModelId Model::m_alignmentModel
protected
QString Model::m_typeUri
protected

Definition at line 340 of file Model.h.

Referenced by getRDFTypeURI(), and setRDFTypeURI().

std::atomic<sv_frame_t> Model::m_extendTo
protected

Definition at line 341 of file Model.h.

Referenced by extendEndFrame(), and getEndFrame().


The documentation for this class was generated from the following files: