Mercurial > hg > tony
comparison src/Analyser.cpp @ 162:cc9aa8f4fceb
Some CQ spectrogram parameters; add experimental candidate plugin process
author | Chris Cannam |
---|---|
date | Tue, 28 Jan 2014 18:34:11 +0000 |
parents | afaa4af03b22 |
children | ec196bd2f068 |
comparison
equal
deleted
inserted
replaced
161:afaa4af03b22 | 162:cc9aa8f4fceb |
---|---|
84 if (error != "") return error; | 84 if (error != "") return error; |
85 | 85 |
86 error = addAnalyses(); | 86 error = addAnalyses(); |
87 if (error != "") return error; | 87 if (error != "") return error; |
88 | 88 |
89 error = addTestCandidates(); | |
90 if (error != "") return error; | |
91 | |
89 loadState(Audio); | 92 loadState(Audio); |
90 loadState(PitchTrack); | 93 loadState(PitchTrack); |
91 loadState(Notes); | 94 loadState(Notes); |
92 loadState(Spectrogram); | 95 loadState(Spectrogram); |
93 | 96 |
113 return notFound.arg(base + out).arg(name); | 116 return notFound.arg(base + out).arg(name); |
114 } | 117 } |
115 | 118 |
116 Transform transform = tf->getDefaultTransformFor | 119 Transform transform = tf->getDefaultTransformFor |
117 (base + out, m_fileModel->getSampleRate()); | 120 (base + out, m_fileModel->getSampleRate()); |
121 transform.setParameter("bpo", 36); | |
118 | 122 |
119 Colour3DPlotLayer *spectrogram = qobject_cast<Colour3DPlotLayer *> | 123 Colour3DPlotLayer *spectrogram = qobject_cast<Colour3DPlotLayer *> |
120 (m_document->createDerivedLayer(transform, m_fileModel)); | 124 (m_document->createDerivedLayer(transform, m_fileModel)); |
121 | 125 |
122 if (!spectrogram) return tr("Transform \"%1\" did not run correctly (no layer or wrong layer type returned)").arg(base + out); | 126 if (!spectrogram) return tr("Transform \"%1\" did not run correctly (no layer or wrong layer type returned)").arg(base + out); |
124 /* | 128 /* |
125 SpectrogramLayer *spectrogram = qobject_cast<SpectrogramLayer *> | 129 SpectrogramLayer *spectrogram = qobject_cast<SpectrogramLayer *> |
126 (m_document->createMainModelLayer(LayerFactory::MelodicRangeSpectrogram)); | 130 (m_document->createMainModelLayer(LayerFactory::MelodicRangeSpectrogram)); |
127 */ | 131 */ |
128 spectrogram->setColourMap((int)ColourMapper::BlackOnWhite); | 132 spectrogram->setColourMap((int)ColourMapper::BlackOnWhite); |
133 spectrogram->setNormalizeHybrid(true); | |
134 spectrogram->setSmooth(true); | |
135 spectrogram->setGain(0.5); //!!! arbitrary at this point | |
129 m_document->addLayerToView(m_pane, spectrogram); | 136 m_document->addLayerToView(m_pane, spectrogram); |
130 spectrogram->setLayerDormant(m_pane, true); | 137 spectrogram->setLayerDormant(m_pane, true); |
131 | 138 |
132 m_layers[Spectrogram] = spectrogram; | 139 m_layers[Spectrogram] = spectrogram; |
133 | 140 |
200 transforms.push_back(t); | 207 transforms.push_back(t); |
201 | 208 |
202 std::vector<Layer *> layers = | 209 std::vector<Layer *> layers = |
203 m_document->createDerivedLayers(transforms, m_fileModel); | 210 m_document->createDerivedLayers(transforms, m_fileModel); |
204 | 211 |
205 if (!layers.empty()) { | 212 for (int i = 0; i < (int)layers.size(); ++i) { |
206 | 213 |
207 for (int i = 0; i < (int)layers.size(); ++i) { | 214 FlexiNoteLayer *f = qobject_cast<FlexiNoteLayer *>(layers[i]); |
208 | 215 TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]); |
209 FlexiNoteLayer *f = qobject_cast<FlexiNoteLayer *>(layers[i]); | 216 |
210 TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]); | 217 if (f) m_layers[Notes] = f; |
211 | 218 if (t) m_layers[PitchTrack] = t; |
212 if (f) m_layers[Notes] = f; | 219 |
213 if (t) m_layers[PitchTrack] = t; | 220 m_document->addLayerToView(m_pane, layers[i]); |
214 | 221 } |
215 m_document->addLayerToView(m_pane, layers[i]); | 222 |
216 } | 223 ColourDatabase *cdb = ColourDatabase::getInstance(); |
217 | 224 |
218 ColourDatabase *cdb = ColourDatabase::getInstance(); | 225 TimeValueLayer *pitchLayer = |
219 | 226 qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]); |
220 TimeValueLayer *pitchLayer = | 227 if (pitchLayer) { |
221 qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]); | 228 pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black"))); |
222 if (pitchLayer) { | 229 PlayParameters *params = pitchLayer->getPlayParameters(); |
223 pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black"))); | 230 if (params) params->setPlayPan(1); |
224 PlayParameters *params = pitchLayer->getPlayParameters(); | 231 } |
225 if (params) params->setPlayPan(1); | 232 |
226 } | 233 FlexiNoteLayer *flexiNoteLayer = |
227 | 234 qobject_cast<FlexiNoteLayer *>(m_layers[Notes]); |
228 FlexiNoteLayer *flexiNoteLayer = | 235 if (flexiNoteLayer) { |
229 qobject_cast<FlexiNoteLayer *>(m_layers[Notes]); | 236 flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue"))); |
230 if (flexiNoteLayer) { | 237 PlayParameters *params = flexiNoteLayer->getPlayParameters(); |
231 flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue"))); | 238 if (params) params->setPlayPan(1); |
232 PlayParameters *params = flexiNoteLayer->getPlayParameters(); | 239 } |
233 if (params) params->setPlayPan(1); | 240 |
234 } | 241 return ""; |
235 } | 242 } |
236 | 243 |
244 QString | |
245 Analyser::addTestCandidates() | |
246 { | |
247 TransformFactory *tf = TransformFactory::getInstance(); | |
248 | |
249 QString plugname = "pYIN"; | |
250 QString base = "vamp:pyin:localcandidatepyin:"; | |
251 QString out = "pitchtrackcandidates"; | |
252 | |
253 Transforms transforms; | |
254 | |
255 QString notFound = tr("Transform \"%1\" not found. Unable to perform interactive analysis.<br><br>Is the %2 Vamp plugin correctly installed?"); | |
256 if (!tf->haveTransform(base + out)) { | |
257 return notFound.arg(base + out).arg(plugname); | |
258 } | |
259 | |
260 Transform t = tf->getDefaultTransformFor | |
261 (base + out, m_fileModel->getSampleRate()); | |
262 t.setStepSize(256); | |
263 t.setBlockSize(2048); | |
264 | |
265 t.setStartTime(RealTime::fromSeconds(10.785)); | |
266 t.setDuration(RealTime::fromSeconds(1.2)); | |
267 | |
268 transforms.push_back(t); | |
269 | |
270 std::vector<Layer *> layers = | |
271 m_document->createDerivedLayers(transforms, m_fileModel); | |
272 | |
273 std::cerr << "Analyser::addTestCandidates: Have " << layers.size() << " layer(s)" << std::endl; | |
274 | |
275 for (int i = 0; i < (int)layers.size(); ++i) { | |
276 TimeValueLayer *t = qobject_cast<TimeValueLayer *>(layers[i]); | |
277 if (t) m_document->addLayerToView(m_pane, t); | |
278 } | |
279 | |
237 return ""; | 280 return ""; |
238 } | 281 } |
239 | 282 |
240 void | 283 void |
241 Analyser::getEnclosingSelectionScope(size_t f, size_t &f0, size_t &f1) | 284 Analyser::getEnclosingSelectionScope(size_t f, size_t &f0, size_t &f1) |