Mercurial > hg > svcore
comparison transform/FeatureExtractionModelTransformer.cpp @ 1713:978c143c767f
Merge from branch single-point
author | Chris Cannam |
---|---|
date | Fri, 17 May 2019 10:02:43 +0100 |
parents | 5b7b01da430a |
children | 565575463752 |
comparison
equal
deleted
inserted
replaced
1709:ab4fd193262b | 1713:978c143c767f |
---|---|
26 #include "data/model/SparseOneDimensionalModel.h" | 26 #include "data/model/SparseOneDimensionalModel.h" |
27 #include "data/model/SparseTimeValueModel.h" | 27 #include "data/model/SparseTimeValueModel.h" |
28 #include "data/model/EditableDenseThreeDimensionalModel.h" | 28 #include "data/model/EditableDenseThreeDimensionalModel.h" |
29 #include "data/model/DenseTimeValueModel.h" | 29 #include "data/model/DenseTimeValueModel.h" |
30 #include "data/model/NoteModel.h" | 30 #include "data/model/NoteModel.h" |
31 #include "data/model/FlexiNoteModel.h" | |
32 #include "data/model/RegionModel.h" | 31 #include "data/model/RegionModel.h" |
33 #include "data/model/FFTModel.h" | 32 #include "data/model/FFTModel.h" |
34 #include "data/model/WaveFileModel.h" | 33 #include "data/model/WaveFileModel.h" |
35 #include "rdf/PluginRDFDescription.h" | 34 #include "rdf/PluginRDFDescription.h" |
36 | 35 |
408 // If we had a "sparse 3D model", we would have the additional | 407 // If we had a "sparse 3D model", we would have the additional |
409 // problem of determining whether to use that here (if bin | 408 // problem of determining whether to use that here (if bin |
410 // count > 1). But we don't. | 409 // count > 1). But we don't. |
411 | 410 |
412 QSettings settings; | 411 QSettings settings; |
413 settings.beginGroup("Transformer"); | 412 |
414 bool flexi = settings.value("use-flexi-note-model", false).toBool(); | 413 if (isNoteModel) { |
415 settings.endGroup(); | |
416 | |
417 cerr << "flexi = " << flexi << endl; | |
418 | |
419 if (isNoteModel && !flexi) { | |
420 | 414 |
421 NoteModel *model; | 415 NoteModel *model; |
422 if (haveExtents) { | 416 if (haveExtents) { |
423 model = new NoteModel | 417 model = new NoteModel |
424 (modelRate, modelResolution, minValue, maxValue, false); | 418 (modelRate, modelResolution, minValue, maxValue, false); |
425 } else { | 419 } else { |
426 model = new NoteModel | 420 model = new NoteModel |
427 (modelRate, modelResolution, false); | |
428 } | |
429 model->setScaleUnits(m_descriptors[n]->unit.c_str()); | |
430 out = model; | |
431 | |
432 } else if (isNoteModel && flexi) { | |
433 | |
434 FlexiNoteModel *model; | |
435 if (haveExtents) { | |
436 model = new FlexiNoteModel | |
437 (modelRate, modelResolution, minValue, maxValue, false); | |
438 } else { | |
439 model = new FlexiNoteModel | |
440 (modelRate, modelResolution, false); | 421 (modelRate, modelResolution, false); |
441 } | 422 } |
442 model->setScaleUnits(m_descriptors[n]->unit.c_str()); | 423 model->setScaleUnits(m_descriptors[n]->unit.c_str()); |
443 out = model; | 424 out = model; |
444 | 425 |
994 | 975 |
995 SparseOneDimensionalModel *model = | 976 SparseOneDimensionalModel *model = |
996 getConformingOutput<SparseOneDimensionalModel>(n); | 977 getConformingOutput<SparseOneDimensionalModel>(n); |
997 if (!model) return; | 978 if (!model) return; |
998 | 979 |
999 model->addPoint(SparseOneDimensionalModel::Point | 980 model->add(Event(frame, feature.label.c_str())); |
1000 (frame, feature.label.c_str())); | |
1001 | 981 |
1002 } else if (isOutput<SparseTimeValueModel>(n)) { | 982 } else if (isOutput<SparseTimeValueModel>(n)) { |
1003 | 983 |
1004 SparseTimeValueModel *model = | 984 SparseTimeValueModel *model = |
1005 getConformingOutput<SparseTimeValueModel>(n); | 985 getConformingOutput<SparseTimeValueModel>(n); |
1021 if (!targetModel) targetModel = model; | 1001 if (!targetModel) targetModel = model; |
1022 // std::cerr << "adding point to model " << targetModel | 1002 // std::cerr << "adding point to model " << targetModel |
1023 // << " for output " << n << " bin " << i << std::endl; | 1003 // << " for output " << n << " bin " << i << std::endl; |
1024 } | 1004 } |
1025 | 1005 |
1026 targetModel->addPoint | 1006 targetModel->add(Event(frame, value, label)); |
1027 (SparseTimeValueModel::Point(frame, value, label)); | 1007 } |
1028 } | 1008 |
1029 | 1009 } else if (isOutput<NoteModel>(n) || isOutput<RegionModel>(n)) { |
1030 } else if (isOutput<FlexiNoteModel>(n) || isOutput<NoteModel>(n) || isOutput<RegionModel>(n)) { //GF: Added Note Model | |
1031 | 1010 |
1032 int index = 0; | 1011 int index = 0; |
1033 | 1012 |
1034 float value = 0.0; | 1013 float value = 0.0; |
1035 if ((int)feature.values.size() > index) { | 1014 if ((int)feature.values.size() > index) { |
1043 if (in_range_for(feature.values, index)) { | 1022 if (in_range_for(feature.values, index)) { |
1044 duration = lrintf(feature.values[index++]); | 1023 duration = lrintf(feature.values[index++]); |
1045 } | 1024 } |
1046 } | 1025 } |
1047 | 1026 |
1048 if (isOutput<FlexiNoteModel>(n)) { // GF: added for flexi note model | 1027 if (isOutput<NoteModel>(n)) { |
1049 | 1028 |
1050 float velocity = 100; | 1029 float velocity = 100; |
1051 if ((int)feature.values.size() > index) { | 1030 if ((int)feature.values.size() > index) { |
1052 velocity = feature.values[index++]; | 1031 velocity = feature.values[index++]; |
1053 } | 1032 } |
1054 if (velocity < 0) velocity = 127; | 1033 if (velocity < 0) velocity = 127; |
1055 if (velocity > 127) velocity = 127; | 1034 if (velocity > 127) velocity = 127; |
1056 | 1035 |
1057 FlexiNoteModel *model = getConformingOutput<FlexiNoteModel>(n); | |
1058 if (!model) return; | |
1059 model->addPoint(FlexiNoteModel::Point(frame, | |
1060 value, // value is pitch | |
1061 duration, | |
1062 velocity / 127.f, | |
1063 feature.label.c_str())); | |
1064 // GF: end -- added for flexi note model | |
1065 } else if (isOutput<NoteModel>(n)) { | |
1066 | |
1067 float velocity = 100; | |
1068 if ((int)feature.values.size() > index) { | |
1069 velocity = feature.values[index++]; | |
1070 } | |
1071 if (velocity < 0) velocity = 127; | |
1072 if (velocity > 127) velocity = 127; | |
1073 | |
1074 NoteModel *model = getConformingOutput<NoteModel>(n); | 1036 NoteModel *model = getConformingOutput<NoteModel>(n); |
1075 if (!model) return; | 1037 if (!model) return; |
1076 model->addPoint(NoteModel::Point(frame, value, // value is pitch | 1038 model->add(Event(frame, value, // value is pitch |
1077 duration, | 1039 duration, |
1078 velocity / 127.f, | 1040 velocity / 127.f, |
1079 feature.label.c_str())); | 1041 feature.label.c_str())); |
1080 } else { | 1042 } else { |
1081 | 1043 |
1082 RegionModel *model = getConformingOutput<RegionModel>(n); | 1044 RegionModel *model = getConformingOutput<RegionModel>(n); |
1083 if (!model) return; | 1045 if (!model) return; |
1084 | 1046 |
1091 QString label = feature.label.c_str(); | 1053 QString label = feature.label.c_str(); |
1092 if (feature.values.size() > 1) { | 1054 if (feature.values.size() > 1) { |
1093 label = QString("[%1] %2").arg(i+1).arg(label); | 1055 label = QString("[%1] %2").arg(i+1).arg(label); |
1094 } | 1056 } |
1095 | 1057 |
1096 model->addPoint(RegionModel::Point(frame, | 1058 model->add(Event(frame, |
1097 value, | 1059 value, |
1098 duration, | 1060 duration, |
1099 label)); | 1061 label)); |
1100 } | 1062 } |
1101 } else { | 1063 } else { |
1102 | 1064 |
1103 model->addPoint(RegionModel::Point(frame, | 1065 model->add(Event(frame, |
1104 value, | 1066 value, |
1105 duration, | 1067 duration, |
1106 feature.label.c_str())); | 1068 feature.label.c_str())); |
1107 } | 1069 } |
1108 } | 1070 } |
1109 | 1071 |
1110 } else if (isOutput<EditableDenseThreeDimensionalModel>(n)) { | 1072 } else if (isOutput<EditableDenseThreeDimensionalModel>(n)) { |
1111 | 1073 |
1158 NoteModel *model = getConformingOutput<NoteModel>(n); | 1120 NoteModel *model = getConformingOutput<NoteModel>(n); |
1159 if (!model) return; | 1121 if (!model) return; |
1160 if (model->isAbandoning()) abandon(); | 1122 if (model->isAbandoning()) abandon(); |
1161 model->setCompletion(completion, true); | 1123 model->setCompletion(completion, true); |
1162 | 1124 |
1163 } else if (isOutput<FlexiNoteModel>(n)) { | |
1164 | |
1165 FlexiNoteModel *model = getConformingOutput<FlexiNoteModel>(n); | |
1166 if (!model) return; | |
1167 if (model->isAbandoning()) abandon(); | |
1168 model->setCompletion(completion, true); | |
1169 | |
1170 } else if (isOutput<RegionModel>(n)) { | 1125 } else if (isOutput<RegionModel>(n)) { |
1171 | 1126 |
1172 RegionModel *model = getConformingOutput<RegionModel>(n); | 1127 RegionModel *model = getConformingOutput<RegionModel>(n); |
1173 if (!model) return; | 1128 if (!model) return; |
1174 if (model->isAbandoning()) abandon(); | 1129 if (model->isAbandoning()) abandon(); |