DataFileReaderFactory.cpp
Go to the documentation of this file.
1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
2 
3 /*
4  Sonic Visualiser
5  An audio file viewer and annotation editor.
6  Centre for Digital Music, Queen Mary, University of London.
7  This file copyright 2006 Chris Cannam.
8 
9  This program is free software; you can redistribute it and/or
10  modify it under the terms of the GNU General Public License as
11  published by the Free Software Foundation; either version 2 of the
12  License, or (at your option) any later version. See the file
13  COPYING included with this distribution for more information.
14 */
15 
16 #include "DataFileReaderFactory.h"
17 #include "MIDIFileReader.h"
18 #include "CSVFileReader.h"
19 
20 #include "model/Model.h"
21 
22 #include <QString>
23 
24 QString
26 {
27  return "*.svl *.csv *.lab *.mid *.txt";
28 }
29 
32  bool csv,
34  CSVFormat format,
35  sv_samplerate_t mainModelSampleRate,
36  ProgressReporter *reporter)
37 {
38  QString err;
39 
40  DataFileReader *reader = nullptr;
41 
42  if (!csv) {
43  reader = new MIDIFileReader(path,
44  acquirer,
45  mainModelSampleRate,
46  reporter);
47  if (reader->isOK()) return reader;
48  if (reader->getError() != "") err = reader->getError();
49  delete reader;
50  }
51 
52  if (csv) {
53  reader = new CSVFileReader(path,
54  format,
55  mainModelSampleRate,
56  reporter);
57  if (reader->isOK()) return reader;
58  if (reader->getError() != "") err = reader->getError();
59  delete reader;
60  }
61 
62  return nullptr;
63 }
64 
68  sv_samplerate_t mainModelSampleRate,
69  ProgressReporter *reporter)
70 {
72  (path, false, acquirer, CSVFormat(), mainModelSampleRate, reporter);
73  if (reader) return reader;
74 
75  reader = createReader
76  (path, true, acquirer, CSVFormat(path), mainModelSampleRate, reporter);
77  if (reader) return reader;
78 
79  return nullptr;
80 }
81 
82 Model *
85  sv_samplerate_t mainModelSampleRate,
86  ProgressReporter *reporter)
87 {
88  DataFileReader *reader = createReader(path,
89  acquirer,
90  mainModelSampleRate,
91  reporter);
92  if (!reader) return nullptr;
93 
94  try {
95  Model *model = reader->load();
96  delete reader;
97  return model;
98  } catch (Exception) {
99  delete reader;
100  throw;
101  }
102 }
103 
104 Model *
107  sv_samplerate_t mainModelSampleRate,
108  ProgressReporter *reporter)
109 {
110  DataFileReader *reader = createReader(path, false,
111  acquirer,
112  CSVFormat(),
113  mainModelSampleRate,
114  reporter);
115  if (!reader) return nullptr;
116 
117  try {
118  Model *model = reader->load();
119  delete reader;
120  return model;
121  } catch (Exception) {
122  delete reader;
123  throw;
124  }
125 }
126 
127 Model *
129  sv_samplerate_t mainModelSampleRate,
130  ProgressReporter *reporter)
131 {
132  DataFileReader *reader = createReader(path, true, nullptr, format,
133  mainModelSampleRate,
134  reporter);
135  if (!reader) return nullptr;
136 
137  try {
138  Model *model = reader->load();
139  delete reader;
140  return model;
141  } catch (Exception) {
142  delete reader;
143  throw;
144  }
145 }
146 
static QString getKnownExtensions()
Return the file extensions that we have data file readers for, in a format suitable for use with QFil...
double sv_samplerate_t
Sample rate.
Definition: BaseTypes.h:51
virtual bool isOK() const =0
Return true if the file appears to be of the correct type.
static Model * loadNonCSV(QString path, MIDIFileImportPreferenceAcquirer *acquirer, sv_samplerate_t mainModelSampleRate, ProgressReporter *reporter=0)
Read the given path, if a suitable reader is available.
virtual Model * load() const =0
Read the file and return the corresponding data model.
static Model * loadCSV(QString path, CSVFormat format, sv_samplerate_t mainModelSampleRate, ProgressReporter *reporter=0)
Read the given path using the CSV reader with the given format.
static Model * load(QString path, MIDIFileImportPreferenceAcquirer *acquirer, sv_samplerate_t mainModelSampleRate, ProgressReporter *reporter=0)
Read the given path, if a suitable reader is available.
Model is the base class for all data models that represent any sort of data on a time scale based on ...
Definition: Model.h:51
virtual QString getError() const
static DataFileReader * createReader(QString path, MIDIFileImportPreferenceAcquirer *, sv_samplerate_t mainModelSampleRate, ProgressReporter *reporter=0)
Return a data file reader initialised to the file at the given path, or NULL if no suitable reader fo...