annotate data/model/AlignmentModel.h @ 1008:d9e0e59a1581

When using an aggregate model to pass data to a transform, zero-pad the shorter input to the duration of the longer rather than truncating the longer. (This is better behaviour for e.g. MATCH, and in any case the code was previously truncating incorrectly and ending up with garbage data at the end.)
author Chris Cannam
date Fri, 14 Nov 2014 13:51:33 +0000
parents cd42620e3f40
children 36f79bc5c3d7
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@297 16 #ifndef _ALIGNMENT_MODEL_H_
Chris@297 17 #define _ALIGNMENT_MODEL_H_
Chris@297 18
Chris@297 19 #include "Model.h"
Chris@407 20 #include "PathModel.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@297 33 AlignmentModel(Model *reference,
Chris@297 34 Model *aligned,
Chris@297 35 Model *inputModel, // probably an AggregateWaveModel; I take ownership
Chris@297 36 SparseTimeValueModel *path); // I take ownership
Chris@297 37 ~AlignmentModel();
Chris@297 38
Chris@297 39 virtual bool isOK() const;
Chris@929 40 virtual int getStartFrame() const;
Chris@929 41 virtual int getEndFrame() const;
Chris@929 42 virtual int getSampleRate() const;
Chris@297 43 virtual Model *clone() const;
Chris@297 44 virtual bool isReady(int *completion = 0) const;
Chris@297 45 virtual const ZoomConstraint *getZoomConstraint() const;
Chris@297 46
Chris@345 47 QString getTypeName() const { return tr("Alignment"); }
Chris@345 48
Chris@297 49 const Model *getReferenceModel() const;
Chris@297 50 const Model *getAlignedModel() const;
Chris@297 51
Chris@929 52 int toReference(int frame) const;
Chris@929 53 int fromReference(int frame) const;
Chris@297 54
Chris@407 55 void setPath(PathModel *path);
Chris@407 56
Chris@407 57 virtual void toXml(QTextStream &stream,
Chris@407 58 QString indent = "",
Chris@407 59 QString extraAttributes = "") const;
Chris@407 60
Chris@297 61 signals:
Chris@297 62 void modelChanged();
Chris@947 63 void modelChangedWithin(int startFrame, int endFrame);
Chris@297 64 void completionChanged();
Chris@297 65
Chris@297 66 protected slots:
Chris@297 67 void pathChanged();
Chris@947 68 void pathChangedWithin(int startFrame, int endFrame);
Chris@297 69 void pathCompletionChanged();
Chris@297 70
Chris@297 71 protected:
Chris@297 72 Model *m_reference; // I don't own this
Chris@297 73 Model *m_aligned; // I don't own this
Chris@297 74
Chris@297 75 Model *m_inputModel; // I own this
Chris@338 76
Chris@338 77 SparseTimeValueModel *m_rawPath; // I own this
Chris@338 78 mutable PathModel *m_path; // I own this
Chris@338 79 mutable PathModel *m_reversePath; // I own this
Chris@323 80 bool m_pathBegun;
Chris@297 81 bool m_pathComplete;
Chris@297 82
Chris@338 83 void constructPath() const;
Chris@297 84 void constructReversePath() const;
Chris@297 85
Chris@929 86 int align(PathModel *path, int frame) const;
Chris@297 87 };
Chris@297 88
Chris@297 89 #endif