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();