Mercurial > hg > svapp
comparison framework/Align.h @ 670:0960e27c3232 tuning-difference
Experiment with optionally taking tuning difference into account for alignment
author | Chris Cannam |
---|---|
date | Wed, 15 May 2019 17:52:22 +0100 |
parents | 06db8f3ceb95 |
children | b6cafe05017d |
comparison
equal
deleted
inserted
replaced
669:331be52cd473 | 670:0960e27c3232 |
---|---|
17 #define ALIGN_H | 17 #define ALIGN_H |
18 | 18 |
19 #include <QString> | 19 #include <QString> |
20 #include <QObject> | 20 #include <QObject> |
21 #include <QProcess> | 21 #include <QProcess> |
22 #include <QMutex> | |
22 #include <set> | 23 #include <set> |
23 | 24 |
24 class Model; | 25 class Model; |
25 class AlignmentModel; | 26 class AlignmentModel; |
27 class SparseTimeValueModel; | |
28 class AggregateWaveModel; | |
26 class Document; | 29 class Document; |
27 | 30 |
28 class Align : public QObject | 31 class Align : public QObject |
29 { | 32 { |
30 Q_OBJECT | 33 Q_OBJECT |
31 | 34 |
32 public: | 35 public: |
33 Align() : m_error("") { } | 36 Align() { } |
34 | 37 |
35 /** | 38 /** |
36 * Align the "other" model to the reference, attaching an | 39 * Align the "other" model to the reference, attaching an |
37 * AlignmentModel to it. Alignment is carried out by the method | 40 * AlignmentModel to it. Alignment is carried out by the method |
38 * configured in the user preferences (either a plugin transform | 41 * configured in the user preferences (either a plugin transform |
39 * or an external process) and is done asynchronously. | 42 * or an external process) and is done asynchronously. |
43 * | |
44 * The return value indicates whether the alignment procedure | |
45 * started successfully. If it is true, then an AlignmentModel has | |
46 * been constructed and attached to the toAlign model, and you can | |
47 * query that model to discover the alignment progress, eventual | |
48 * outcome, and any error message generated during alignment. (The | |
49 * AlignmentModel is subsequently owned by the toAlign model.) | |
50 * Conversely if alignModel returns false, no AlignmentModel has | |
51 * been created, and the error return argument will contain an | |
52 * error report about whatever problem prevented this from | |
53 * happening. | |
40 * | 54 * |
41 * A single Align object may carry out many simultanous alignment | 55 * A single Align object may carry out many simultanous alignment |
42 * calls -- you do not need to create a new Align object each | 56 * calls -- you do not need to create a new Align object each |
43 * time, nor to wait for an alignment to be complete before | 57 * time, nor to wait for an alignment to be complete before |
44 * starting a new one. | 58 * starting a new one. |
48 * Align object will simply share the process or document | 62 * Align object will simply share the process or document |
49 * lifespan. | 63 * lifespan. |
50 */ | 64 */ |
51 bool alignModel(Document *doc, | 65 bool alignModel(Document *doc, |
52 Model *reference, | 66 Model *reference, |
53 Model *other); // via user preference | 67 Model *toAlign, |
68 QString &error); | |
54 | 69 |
55 bool alignModelViaTransform(Document *doc, | 70 bool alignModelViaTransform(Document *doc, |
56 Model *reference, | 71 Model *reference, |
57 Model *other); | 72 Model *toAlign, |
73 QString &error); | |
58 | 74 |
59 bool alignModelViaProgram(Document *doc, | 75 bool alignModelViaProgram(Document *doc, |
60 Model *reference, | 76 Model *reference, |
61 Model *other, | 77 Model *toAlign, |
62 QString program); | 78 QString program, |
79 QString &error); | |
63 | 80 |
64 /** | 81 /** |
65 * Return true if the alignment facility is available (relevant | 82 * Return true if the alignment facility is available (relevant |
66 * plugin installed, etc). | 83 * plugin installed, etc). |
67 */ | 84 */ |
68 static bool canAlign(); | 85 static bool canAlign(); |
69 | |
70 QString getError() const { return m_error; } | |
71 | 86 |
72 signals: | 87 signals: |
73 /** | 88 /** |
74 * Emitted when an alignment is successfully completed. The | 89 * Emitted when an alignment is successfully completed. The |
75 * reference and other models can be queried from the alignment | 90 * reference and other models can be queried from the alignment |
77 */ | 92 */ |
78 void alignmentComplete(AlignmentModel *alignment); | 93 void alignmentComplete(AlignmentModel *alignment); |
79 | 94 |
80 private slots: | 95 private slots: |
81 void alignmentCompletionChanged(); | 96 void alignmentCompletionChanged(); |
97 void tuningDifferenceCompletionChanged(); | |
82 void alignmentProgramFinished(int, QProcess::ExitStatus); | 98 void alignmentProgramFinished(int, QProcess::ExitStatus); |
83 | 99 |
84 private: | 100 private: |
85 static QString getAlignmentTransformName(); | 101 static QString getAlignmentTransformName(); |
86 | 102 static QString getTuningDifferenceTransformName(); |
87 QString m_error; | 103 |
88 std::map<QProcess *, AlignmentModel *> m_processModels; | 104 bool beginTransformDrivenAlignment(AggregateWaveModel *, |
105 AlignmentModel *, | |
106 float tuningFrequency = 0.f); | |
107 | |
108 QMutex m_mutex; | |
109 std::map<QProcess *, AlignmentModel *> m_pendingProcesses; | |
110 std::map<SparseTimeValueModel *, | |
111 std::pair<AggregateWaveModel *, | |
112 AlignmentModel *>> m_pendingTuningDiffs; | |
89 }; | 113 }; |
90 | 114 |
91 #endif | 115 #endif |
92 | 116 |