Mercurial > hg > tony
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 } |