comparison data/fileio/CSVFileReader.cpp @ 1793:f0ffc88a36b3 time-frequency-boxes

Add duration-and-extent type, which corresponds to a box model
author Chris Cannam
date Wed, 25 Sep 2019 11:06:59 +0100
parents d484490cdf69
children 2654bf447a84
comparison
equal deleted inserted replaced
1792:cb45c0a1dfe1 1793:f0ffc88a36b3
23 #include "model/SparseOneDimensionalModel.h" 23 #include "model/SparseOneDimensionalModel.h"
24 #include "model/SparseTimeValueModel.h" 24 #include "model/SparseTimeValueModel.h"
25 #include "model/EditableDenseThreeDimensionalModel.h" 25 #include "model/EditableDenseThreeDimensionalModel.h"
26 #include "model/RegionModel.h" 26 #include "model/RegionModel.h"
27 #include "model/NoteModel.h" 27 #include "model/NoteModel.h"
28 #include "model/BoxModel.h"
28 #include "model/WritableWaveFileModel.h" 29 #include "model/WritableWaveFileModel.h"
29 #include "DataFileReaderFactory.h" 30 #include "DataFileReaderFactory.h"
30 31
31 #include <QFile> 32 #include <QFile>
32 #include <QDir> 33 #include <QDir>
199 200
200 SparseOneDimensionalModel *model1 = nullptr; 201 SparseOneDimensionalModel *model1 = nullptr;
201 SparseTimeValueModel *model2 = nullptr; 202 SparseTimeValueModel *model2 = nullptr;
202 RegionModel *model2a = nullptr; 203 RegionModel *model2a = nullptr;
203 NoteModel *model2b = nullptr; 204 NoteModel *model2b = nullptr;
205 BoxModel *model2c = nullptr;
204 EditableDenseThreeDimensionalModel *model3 = nullptr; 206 EditableDenseThreeDimensionalModel *model3 = nullptr;
205 WritableWaveFileModel *modelW = nullptr; 207 WritableWaveFileModel *modelW = nullptr;
206 Model *model = nullptr; 208 Model *model = nullptr;
207 209
208 QTextStream in(m_device); 210 QTextStream in(m_device);
331 case CSVFormat::TwoDimensionalModelWithDurationAndPitch: 333 case CSVFormat::TwoDimensionalModelWithDurationAndPitch:
332 model2b = new NoteModel(sampleRate, windowSize, false); 334 model2b = new NoteModel(sampleRate, windowSize, false);
333 model = model2b; 335 model = model2b;
334 break; 336 break;
335 337
338 case CSVFormat::TwoDimensionalModelWithDurationAndExtent:
339 model2c = new BoxModel(sampleRate, windowSize, false);
340 model = model2c;
341 break;
342
336 case CSVFormat::ThreeDimensionalModel: 343 case CSVFormat::ThreeDimensionalModel:
337 model3 = new EditableDenseThreeDimensionalModel 344 model3 = new EditableDenseThreeDimensionalModel
338 (sampleRate, windowSize, valueColumns); 345 (sampleRate, windowSize, valueColumns);
339 model = model3; 346 model = model3;
340 break; 347 break;
366 SVCERR << "Failed to create model to load CSV file into" 373 SVCERR << "Failed to create model to load CSV file into"
367 << endl; 374 << endl;
368 if (model) { 375 if (model) {
369 delete model; 376 delete model;
370 model = nullptr; 377 model = nullptr;
371 model1 = nullptr; model2 = nullptr; model2a = nullptr; model2b = nullptr; 378 model1 = nullptr; model2 = nullptr;
379 model2a = nullptr; model2b = nullptr; model2c = nullptr;
372 model3 = nullptr; modelW = nullptr; 380 model3 = nullptr; modelW = nullptr;
373 } 381 }
374 abandoned = true; 382 abandoned = true;
375 break; 383 break;
376 } 384 }
377 385
378 float value = 0.f; 386 float value = 0.f;
387 float otherValue = 0.f;
379 float pitch = 0.f; 388 float pitch = 0.f;
380 QString label = ""; 389 QString label = "";
381 390
382 duration = 0.f; 391 duration = 0.f;
383 haveEndTime = false; 392 haveEndTime = false;
405 case CSVFormat::ColumnDuration: 414 case CSVFormat::ColumnDuration:
406 duration = convertTimeValue(s, lineno, sampleRate, windowSize); 415 duration = convertTimeValue(s, lineno, sampleRate, windowSize);
407 break; 416 break;
408 417
409 case CSVFormat::ColumnValue: 418 case CSVFormat::ColumnValue:
419 if (haveAnyValue) {
420 otherValue = value;
421 }
410 value = s.toFloat(); 422 value = s.toFloat();
411 haveAnyValue = true; 423 haveAnyValue = true;
412 break; 424 break;
413 425
414 case CSVFormat::ColumnPitch: 426 case CSVFormat::ColumnPitch:
450 } else if (modelType == CSVFormat::TwoDimensionalModelWithDurationAndPitch) { 462 } else if (modelType == CSVFormat::TwoDimensionalModelWithDurationAndPitch) {
451 463
452 float level = ((value >= 0.f && value <= 1.f) ? value : 1.f); 464 float level = ((value >= 0.f && value <= 1.f) ? value : 1.f);
453 Event note(frameNo, pitch, duration, level, label); 465 Event note(frameNo, pitch, duration, level, label);
454 model2b->add(note); 466 model2b->add(note);
467
468 } else if (modelType == CSVFormat::TwoDimensionalModelWithDurationAndExtent) {
469
470 float level = 0.f;
471 if (value > otherValue) {
472 level = value - otherValue;
473 value = otherValue;
474 } else {
475 level = otherValue - value;
476 }
477 Event box(frameNo, value, duration, level, label);
478 model2c->add(box);
455 479
456 } else if (modelType == CSVFormat::ThreeDimensionalModel) { 480 } else if (modelType == CSVFormat::ThreeDimensionalModel) {
457 481
458 DenseThreeDimensionalModel::Column values; 482 DenseThreeDimensionalModel::Column values;
459 483