# HG changeset patch # User Chris Cannam # Date 1530193786 -3600 # Node ID 53fa8d57b7287356ec28c98a11675546df0867fd # Parent 71202259002d4e0fcdcd3c9020a397b42fa6b2b1 Add wave model as possible target for CSV import diff -r 71202259002d -r 53fa8d57b728 data/fileio/CSVFileReader.cpp --- a/data/fileio/CSVFileReader.cpp Mon Jun 25 14:12:27 2018 +0100 +++ b/data/fileio/CSVFileReader.cpp Thu Jun 28 14:49:46 2018 +0100 @@ -23,6 +23,7 @@ #include "model/EditableDenseThreeDimensionalModel.h" #include "model/RegionModel.h" #include "model/NoteModel.h" +#include "model/WritableWaveFileModel.h" #include "DataFileReaderFactory.h" #include @@ -184,6 +185,7 @@ RegionModel *model2a = 0; NoteModel *model2b = 0; EditableDenseThreeDimensionalModel *model3 = 0; + WritableWaveFileModel *modelW = 0; Model *model = 0; QTextStream in(m_device); @@ -268,6 +270,12 @@ EditableDenseThreeDimensionalModel::NoCompression); model = model3; break; + + case CSVFormat::WaveFileModel: + modelW = new WritableWaveFileModel + (sampleRate, valueColumns); + model = modelW; + break; } if (model) { @@ -402,8 +410,42 @@ // << frameNo << ", time " << RealTime::frame2RealTime(frameNo, sampleRate) << endl; model3->setColumn(lineno, values); + + } else if (modelType == CSVFormat::WaveFileModel) { + + int channels = modelW->getChannelCount(); + + float **samples = + breakfastquay::allocate_and_zero_channels + (channels, 1); + + for (int i = 0; i < list.size() && i < channels; ++i) { + + if (m_format.getColumnPurpose(i) != CSVFormat::ColumnValue) { + continue; + } + + bool ok = false; + float value = list[i].toFloat(&ok); + + samples[i][0] = value; + } + + bool ok = modelW->addSamples(samples, 1); + + breakfastquay::deallocate_channels(samples, channels); + + if (!ok) { + if (warnings < warnLimit) { + SVCERR << "WARNING: CSVFileReader::load: " + << "Unable to add sample to wave-file model" + << endl; + SVCERR << line << endl; + ++warnings; + } + } } - + ++lineno; if (timingType == CSVFormat::ImplicitTiming || list.size() == 0) { diff -r 71202259002d -r 53fa8d57b728 data/fileio/CSVFileReader.h --- a/data/fileio/CSVFileReader.h Mon Jun 25 14:12:27 2018 +0100 +++ b/data/fileio/CSVFileReader.h Thu Jun 28 14:49:46 2018 +0100 @@ -35,7 +35,8 @@ * Construct a CSVFileReader to read the CSV file at the given * path, with the given format. */ - CSVFileReader(QString path, CSVFormat format, sv_samplerate_t mainModelSampleRate); + CSVFileReader(QString path, CSVFormat format, + sv_samplerate_t mainModelSampleRate); /** * Construct a CSVFileReader to read from the given @@ -43,7 +44,8 @@ * CSVFileReader will not close or delete it and it must outlive * the CSVFileReader. */ - CSVFileReader(QIODevice *device, CSVFormat format, sv_samplerate_t mainModelSampleRate); + CSVFileReader(QIODevice *device, CSVFormat format, + sv_samplerate_t mainModelSampleRate); virtual ~CSVFileReader(); diff -r 71202259002d -r 53fa8d57b728 data/fileio/CSVFormat.h --- a/data/fileio/CSVFormat.h Mon Jun 25 14:12:27 2018 +0100 +++ b/data/fileio/CSVFormat.h Thu Jun 28 14:49:46 2018 +0100 @@ -29,7 +29,8 @@ TwoDimensionalModel, TwoDimensionalModelWithDuration, TwoDimensionalModelWithDurationAndPitch, - ThreeDimensionalModel + ThreeDimensionalModel, + WaveFileModel }; enum TimingType {