comparison src/Analyser.cpp @ 573:5c14493026da by-id

ModelById updates
author Chris Cannam
date Mon, 08 Jul 2019 19:27:49 +0100
parents 3f0b44418a19
children 335fd9b439a0
comparison
equal deleted inserted replaced
572:3f0b44418a19 573:5c14493026da
195 } 195 }
196 196
197 void 197 void
198 Analyser::layerCompletionChanged() 198 Analyser::layerCompletionChanged()
199 { 199 {
200 if (getInitialAnalysisCompletion() == 100) { 200 if (getInitialAnalysisCompletion() < 100) {
201 201 return;
202 emit initialAnalysisCompleted(); 202 }
203 203
204 if (m_layers[Audio]) { 204 emit initialAnalysisCompleted();
205 205
206 // Extend pitch-track and note layers so as to nominally 206 if (!m_layers[Audio]) {
207 // end at the same time as the audio. This affects any 207 return;
208 // time-filling done on export etc. 208 }
209 209
210 sv_frame_t endFrame = m_layers[Audio]->getModel()->getEndFrame(); 210 // Extend pitch-track and note layers so as to nominally end at
211 // the same time as the audio. This affects any time-filling done
212 // on export etc.
213
214 auto audioModel = ModelById::get(m_layers[Audio]->getModel());
215 sv_frame_t endFrame = audioModel->getEndFrame();
211 216
212 if (m_layers[PitchTrack]) { 217 if (m_layers[PitchTrack]) {
213 SparseTimeValueModel *model = qobject_cast<SparseTimeValueModel *> 218 auto model = ModelById::getAs<SparseTimeValueModel>
214 (m_layers[PitchTrack]->getModel()); 219 (m_layers[PitchTrack]->getModel());
215 if (model) { 220 if (model) {
216 model->extendEndFrame(endFrame); 221 model->extendEndFrame(endFrame);
217 } 222 }
218 } 223 }
219 if (m_layers[Notes]) { 224
220 NoteModel *model = qobject_cast<NoteModel *> 225 if (m_layers[Notes]) {
221 (m_layers[Notes]->getModel()); 226 auto model = ModelById::getAs<NoteModel>
222 if (model) { 227 (m_layers[Notes]->getModel());
223 model->extendEndFrame(endFrame); 228 if (model) {
224 } 229 model->extendEndFrame(endFrame);
225 }
226 } 230 }
227 } 231 }
228 } 232 }
229 233
230 QString 234 QString
313 317
314 waveform->setMiddleLineHeight(0.9); 318 waveform->setMiddleLineHeight(0.9);
315 waveform->setShowMeans(false); // too small & pale for this 319 waveform->setShowMeans(false); // too small & pale for this
316 waveform->setBaseColour 320 waveform->setBaseColour
317 (ColourDatabase::getInstance()->getColourIndex(tr("Grey"))); 321 (ColourDatabase::getInstance()->getColourIndex(tr("Grey")));
318 PlayParameters *params = waveform->getPlayParameters(); 322 auto params = waveform->getPlayParameters();
319 if (params) { 323 if (params) {
320 params->setPlayPan(-1); 324 params->setPlayPan(-1);
321 params->setPlayGain(1); 325 params->setPlayGain(1);
322 } 326 }
323 327
461 465
462 TimeValueLayer *pitchLayer = 466 TimeValueLayer *pitchLayer =
463 qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]); 467 qobject_cast<TimeValueLayer *>(m_layers[PitchTrack]);
464 if (pitchLayer) { 468 if (pitchLayer) {
465 pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black"))); 469 pitchLayer->setBaseColour(cdb->getColourIndex(tr("Black")));
466 PlayParameters *params = pitchLayer->getPlayParameters(); 470 auto params = pitchLayer->getPlayParameters();
467 if (params) { 471 if (params) {
468 params->setPlayPan(1); 472 params->setPlayPan(1);
469 params->setPlayGain(0.5); 473 params->setPlayGain(0.5);
470 } 474 }
471 connect(pitchLayer, SIGNAL(modelCompletionChanged()), 475 connect(pitchLayer, SIGNAL(modelCompletionChanged()),
474 478
475 FlexiNoteLayer *flexiNoteLayer = 479 FlexiNoteLayer *flexiNoteLayer =
476 qobject_cast<FlexiNoteLayer *>(m_layers[Notes]); 480 qobject_cast<FlexiNoteLayer *>(m_layers[Notes]);
477 if (flexiNoteLayer) { 481 if (flexiNoteLayer) {
478 flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue"))); 482 flexiNoteLayer->setBaseColour(cdb->getColourIndex(tr("Bright Blue")));
479 PlayParameters *params = flexiNoteLayer->getPlayParameters(); 483 auto params = flexiNoteLayer->getPlayParameters();
480 if (params) { 484 if (params) {
481 params->setPlayPan(1); 485 params->setPlayPan(1);
482 params->setPlayGain(0.5); 486 params->setPlayGain(0.5);
483 } 487 }
484 connect(flexiNoteLayer, SIGNAL(modelCompletionChanged()), 488 connect(flexiNoteLayer, SIGNAL(modelCompletionChanged()),
611 t.setDuration(duration); 615 t.setDuration(duration);
612 616
613 transforms.push_back(t); 617 transforms.push_back(t);
614 618
615 m_currentAsyncHandle = 619 m_currentAsyncHandle =
616 m_document->createDerivedLayersAsync(transforms, ModelId, this); 620 m_document->createDerivedLayersAsync(transforms, m_fileModel, this);
617 621
618 return ""; 622 return "";
619 } 623 }
620 624
621 bool 625 bool
679 } 683 }
680 684
681 for (int i = 0; i < (int)all.size(); ++i) { 685 for (int i = 0; i < (int)all.size(); ++i) {
682 TimeValueLayer *t = qobject_cast<TimeValueLayer *>(all[i]); 686 TimeValueLayer *t = qobject_cast<TimeValueLayer *>(all[i]);
683 if (t) { 687 if (t) {
684 PlayParameters *params = t->getPlayParameters(); 688 auto params = t->getPlayParameters();
685 if (params) { 689 if (params) {
686 params->setPlayAudible(false); 690 params->setPlayAudible(false);
687 } 691 }
688 t->setBaseColour 692 t->setBaseColour
689 (ColourDatabase::getInstance()->getColourIndex(tr("Bright Orange"))); 693 (ColourDatabase::getInstance()->getColourIndex(tr("Bright Orange")));
859 863
860 void 864 void
861 Analyser::takePitchTrackFrom(Layer *otherLayer) 865 Analyser::takePitchTrackFrom(Layer *otherLayer)
862 { 866 {
863 Layer *myLayer = m_layers[PitchTrack]; 867 Layer *myLayer = m_layers[PitchTrack];
864 if (!myLayer) return; 868 if (!myLayer || !otherLayer) return;
869
870 auto myModel = ModelById::get(myLayer->getModel());
871 auto otherModel = ModelById::get(otherLayer->getModel());
872 if (!myModel || !otherModel) return;
865 873
866 Clipboard clip; 874 Clipboard clip;
867 875
868 Selection sel = Selection(myLayer->getModel()->getStartFrame(), 876 Selection sel = Selection(myModel->getStartFrame(),
869 myLayer->getModel()->getEndFrame()); 877 myModel->getEndFrame());
870 myLayer->deleteSelection(sel); 878 myLayer->deleteSelection(sel);
871 879
872 sel = Selection(otherLayer->getModel()->getStartFrame(), 880 sel = Selection(otherModel->getStartFrame(),
873 otherLayer->getModel()->getEndFrame()); 881 otherModel->getEndFrame());
874 otherLayer->copy(m_pane, sel, clip); 882 otherLayer->copy(m_pane, sel, clip);
875 883
876 // Remove all pitches <= 0Hz -- we now save absent pitches as 0Hz 884 // Remove all pitches <= 0Hz -- we now save absent pitches as 0Hz
877 // values when exporting a pitch track, so we need to exclude them 885 // values when exporting a pitch track, so we need to exclude them
878 // here when importing again 886 // here when importing again
984 992
985 bool 993 bool
986 Analyser::isAudible(Component c) const 994 Analyser::isAudible(Component c) const
987 { 995 {
988 if (m_layers[c]) { 996 if (m_layers[c]) {
989 PlayParameters *params = m_layers[c]->getPlayParameters(); 997 auto params = m_layers[c]->getPlayParameters();
990 if (!params) return false; 998 if (!params) return false;
991 return params->isPlayAudible(); 999 return params->isPlayAudible();
992 } else { 1000 } else {
993 return false; 1001 return false;
994 } 1002 }
996 1004
997 void 1005 void
998 Analyser::setAudible(Component c, bool a) 1006 Analyser::setAudible(Component c, bool a)
999 { 1007 {
1000 if (m_layers[c]) { 1008 if (m_layers[c]) {
1001 PlayParameters *params = m_layers[c]->getPlayParameters(); 1009 auto params = m_layers[c]->getPlayParameters();
1002 if (!params) return; 1010 if (!params) return;
1003 params->setPlayAudible(a); 1011 params->setPlayAudible(a);
1004 saveState(c); 1012 saveState(c);
1005 } 1013 }
1006 } 1014 }
1007 1015
1008 float 1016 float
1009 Analyser::getGain(Component c) const 1017 Analyser::getGain(Component c) const
1010 { 1018 {
1011 if (m_layers[c]) { 1019 if (m_layers[c]) {
1012 PlayParameters *params = m_layers[c]->getPlayParameters(); 1020 auto params = m_layers[c]->getPlayParameters();
1013 if (!params) return 1.f; 1021 if (!params) return 1.f;
1014 return params->getPlayGain(); 1022 return params->getPlayGain();
1015 } else { 1023 } else {
1016 return 1.f; 1024 return 1.f;
1017 } 1025 }
1019 1027
1020 void 1028 void
1021 Analyser::setGain(Component c, float gain) 1029 Analyser::setGain(Component c, float gain)
1022 { 1030 {
1023 if (m_layers[c]) { 1031 if (m_layers[c]) {
1024 PlayParameters *params = m_layers[c]->getPlayParameters(); 1032 auto params = m_layers[c]->getPlayParameters();
1025 if (!params) return; 1033 if (!params) return;
1026 params->setPlayGain(gain); 1034 params->setPlayGain(gain);
1027 saveState(c); 1035 saveState(c);
1028 } 1036 }
1029 } 1037 }
1030 1038
1031 float 1039 float
1032 Analyser::getPan(Component c) const 1040 Analyser::getPan(Component c) const
1033 { 1041 {
1034 if (m_layers[c]) { 1042 if (m_layers[c]) {
1035 PlayParameters *params = m_layers[c]->getPlayParameters(); 1043 auto params = m_layers[c]->getPlayParameters();
1036 if (!params) return 1.f; 1044 if (!params) return 1.f;
1037 return params->getPlayPan(); 1045 return params->getPlayPan();
1038 } else { 1046 } else {
1039 return 1.f; 1047 return 1.f;
1040 } 1048 }
1042 1050
1043 void 1051 void
1044 Analyser::setPan(Component c, float pan) 1052 Analyser::setPan(Component c, float pan)
1045 { 1053 {
1046 if (m_layers[c]) { 1054 if (m_layers[c]) {
1047 PlayParameters *params = m_layers[c]->getPlayParameters(); 1055 auto params = m_layers[c]->getPlayParameters();
1048 if (!params) return; 1056 if (!params) return;
1049 params->setPlayPan(pan); 1057 params->setPlayPan(pan);
1050 saveState(c); 1058 saveState(c);
1051 } 1059 }
1052 } 1060 }