Chris@297: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ Chris@297: Chris@297: /* Chris@297: Sonic Visualiser Chris@297: An audio file viewer and annotation editor. Chris@297: Centre for Digital Music, Queen Mary, University of London. Chris@297: This file copyright 2007 QMUL. Chris@297: Chris@297: This program is free software; you can redistribute it and/or Chris@297: modify it under the terms of the GNU General Public License as Chris@297: published by the Free Software Foundation; either version 2 of the Chris@297: License, or (at your option) any later version. See the file Chris@297: COPYING included with this distribution for more information. Chris@297: */ Chris@297: Chris@1581: #ifndef SV_ALIGNMENT_MODEL_H Chris@1581: #define SV_ALIGNMENT_MODEL_H Chris@297: Chris@297: #include "Model.h" Chris@1738: #include "Path.h" Chris@338: #include "base/RealTime.h" Chris@338: Chris@338: #include Chris@338: #include Chris@297: Chris@297: class SparseTimeValueModel; Chris@297: Chris@297: class AlignmentModel : public Model Chris@297: { Chris@297: Q_OBJECT Chris@297: Chris@297: public: Chris@1735: AlignmentModel(ModelId reference /* any model */, Chris@1735: ModelId aligned /* any model */, Chris@1735: ModelId path /* a SparseTimeValueModel */); Chris@297: ~AlignmentModel(); Chris@297: Chris@1580: bool isOK() const override; Chris@1705: Chris@1705: void setError(QString error) { m_error = error; } Chris@1705: QString getError() const { return m_error; } Chris@1705: Chris@1580: sv_frame_t getStartFrame() const override; Chris@1725: sv_frame_t getTrueEndFrame() const override; Chris@1580: sv_samplerate_t getSampleRate() const override; Chris@1580: bool isReady(int *completion = 0) const override; Chris@1671: int getCompletion() const override { Chris@1671: int c = 0; Chris@1671: (void)isReady(&c); Chris@1671: return c; Chris@1671: } Chris@1580: const ZoomConstraint *getZoomConstraint() const override; Chris@297: Chris@1580: QString getTypeName() const override { return tr("Alignment"); } Chris@345: Chris@1735: ModelId getReferenceModel() const; Chris@1735: ModelId getAlignedModel() const; Chris@297: Chris@1862: void setCompletion(int completion); Chris@1862: Chris@1038: sv_frame_t toReference(sv_frame_t frame) const; Chris@1038: sv_frame_t fromReference(sv_frame_t frame) const; Chris@297: Chris@1735: void setPathFrom(ModelId pathSource); // a SparseTimeValueModel Chris@1738: void setPath(const Path &path); Chris@407: Chris@1774: /** Chris@1774: * Set the calculated pitch relative to a reference. This is Chris@1774: * purely metadata. Chris@1774: */ Chris@1774: void setRelativePitch(int cents) { m_relativePitch = cents; } Chris@1774: Chris@1774: /** Chris@1774: * Get the value set with setRelativePitch. Chris@1774: */ Chris@1774: int getRelativePitch() const { return m_relativePitch; } Chris@1774: Chris@1580: void toXml(QTextStream &stream, Chris@1752: QString indent = "", Chris@1752: QString extraAttributes = "") const override; Chris@407: Chris@1833: QVector Chris@1833: getStringExportHeaders(DataExportOptions) const override { Chris@1833: return {}; Chris@1815: } Chris@1833: Chris@1833: QVector> Chris@1833: toStringExportRows(DataExportOptions, sv_frame_t, sv_frame_t) const override { Chris@1833: return {}; Chris@1679: } Chris@1679: Chris@297: signals: Chris@1752: void completionChanged(ModelId); Chris@297: Chris@297: protected slots: Chris@1752: void pathSourceChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame); Chris@1752: void pathSourceCompletionChanged(ModelId); Chris@297: Chris@297: protected: Chris@1735: ModelId m_reference; Chris@1735: ModelId m_aligned; Chris@297: Chris@1761: ModelId m_pathSource; // a SparseTimeValueModel, which we need a Chris@1761: // handle on only while it's still being generated Chris@1735: Chris@1738: mutable std::unique_ptr m_path; Chris@1738: mutable std::unique_ptr m_reversePath; Chris@323: bool m_pathBegun; Chris@297: bool m_pathComplete; Chris@1705: QString m_error; Chris@1774: int m_relativePitch; Chris@1862: int m_explicitlySetCompletion; Chris@297: Chris@338: void constructPath() const; Chris@297: void constructReversePath() const; Chris@297: Chris@1738: sv_frame_t performAlignment(const Path &path, sv_frame_t frame) const; Chris@297: }; Chris@297: Chris@297: #endif