annotate data/model/AlignmentModel.h @ 1777:d484490cdf69

Split EditableDenseThreeDimensionalModel into explicitly compressed and uncompressed variants. Simplifies the uncompressed version, and we may want to consider whether we need the compressed one at all.
author Chris Cannam
date Tue, 10 Sep 2019 16:34:47 +0100
parents f19711ab7074
children c546429d4c2f
rev   line source
Chris@297 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
Chris@297 2
Chris@297 3 /*
Chris@297 4 Sonic Visualiser
Chris@297 5 An audio file viewer and annotation editor.
Chris@297 6 Centre for Digital Music, Queen Mary, University of London.
Chris@297 7 This file copyright 2007 QMUL.
Chris@297 8
Chris@297 9 This program is free software; you can redistribute it and/or
Chris@297 10 modify it under the terms of the GNU General Public License as
Chris@297 11 published by the Free Software Foundation; either version 2 of the
Chris@297 12 License, or (at your option) any later version. See the file
Chris@297 13 COPYING included with this distribution for more information.
Chris@297 14 */
Chris@297 15
Chris@1581 16 #ifndef SV_ALIGNMENT_MODEL_H
Chris@1581 17 #define SV_ALIGNMENT_MODEL_H
Chris@297 18
Chris@297 19 #include "Model.h"
Chris@1738 20 #include "Path.h"
Chris@338 21 #include "base/RealTime.h"
Chris@338 22
Chris@338 23 #include <QString>
Chris@338 24 #include <QStringList>
Chris@297 25
Chris@297 26 class SparseTimeValueModel;
Chris@297 27
Chris@297 28 class AlignmentModel : public Model
Chris@297 29 {
Chris@297 30 Q_OBJECT
Chris@297 31
Chris@297 32 public:
Chris@1735 33 AlignmentModel(ModelId reference /* any model */,
Chris@1735 34 ModelId aligned /* any model */,
Chris@1735 35 ModelId path /* a SparseTimeValueModel */);
Chris@297 36 ~AlignmentModel();
Chris@297 37
Chris@1580 38 bool isOK() const override;
Chris@1705 39
Chris@1705 40 void setError(QString error) { m_error = error; }
Chris@1705 41 QString getError() const { return m_error; }
Chris@1705 42
Chris@1580 43 sv_frame_t getStartFrame() const override;
Chris@1725 44 sv_frame_t getTrueEndFrame() const override;
Chris@1580 45 sv_samplerate_t getSampleRate() const override;
Chris@1580 46 bool isReady(int *completion = 0) const override;
Chris@1671 47 int getCompletion() const override {
Chris@1671 48 int c = 0;
Chris@1671 49 (void)isReady(&c);
Chris@1671 50 return c;
Chris@1671 51 }
Chris@1580 52 const ZoomConstraint *getZoomConstraint() const override;
Chris@297 53
Chris@1580 54 QString getTypeName() const override { return tr("Alignment"); }
Chris@345 55
Chris@1735 56 ModelId getReferenceModel() const;
Chris@1735 57 ModelId getAlignedModel() const;
Chris@297 58
Chris@1038 59 sv_frame_t toReference(sv_frame_t frame) const;
Chris@1038 60 sv_frame_t fromReference(sv_frame_t frame) const;
Chris@297 61
Chris@1735 62 void setPathFrom(ModelId pathSource); // a SparseTimeValueModel
Chris@1738 63 void setPath(const Path &path);
Chris@407 64
Chris@1774 65 /**
Chris@1774 66 * Set the calculated pitch relative to a reference. This is
Chris@1774 67 * purely metadata.
Chris@1774 68 */
Chris@1774 69 void setRelativePitch(int cents) { m_relativePitch = cents; }
Chris@1774 70
Chris@1774 71 /**
Chris@1774 72 * Get the value set with setRelativePitch.
Chris@1774 73 */
Chris@1774 74 int getRelativePitch() const { return m_relativePitch; }
Chris@1774 75
Chris@1580 76 void toXml(QTextStream &stream,
Chris@1752 77 QString indent = "",
Chris@1752 78 QString extraAttributes = "") const override;
Chris@407 79
Chris@1679 80 QString toDelimitedDataString(QString, DataExportOptions,
Chris@1679 81 sv_frame_t, sv_frame_t) const override {
Chris@1679 82 return "";
Chris@1679 83 }
Chris@1679 84
Chris@297 85 signals:
Chris@1752 86 void completionChanged(ModelId);
Chris@297 87
Chris@297 88 protected slots:
Chris@1752 89 void pathSourceChangedWithin(ModelId, sv_frame_t startFrame, sv_frame_t endFrame);
Chris@1752 90 void pathSourceCompletionChanged(ModelId);
Chris@297 91
Chris@297 92 protected:
Chris@1735 93 ModelId m_reference;
Chris@1735 94 ModelId m_aligned;
Chris@297 95
Chris@1761 96 ModelId m_pathSource; // a SparseTimeValueModel, which we need a
Chris@1761 97 // handle on only while it's still being generated
Chris@1735 98
Chris@1738 99 mutable std::unique_ptr<Path> m_path;
Chris@1738 100 mutable std::unique_ptr<Path> m_reversePath;
Chris@323 101 bool m_pathBegun;
Chris@297 102 bool m_pathComplete;
Chris@1705 103 QString m_error;
Chris@1774 104 int m_relativePitch;
Chris@297 105
Chris@338 106 void constructPath() const;
Chris@297 107 void constructReversePath() const;
Chris@297 108
Chris@1738 109 sv_frame_t performAlignment(const Path &path, sv_frame_t frame) const;
Chris@297 110 };
Chris@297 111
Chris@297 112 #endif