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)