svcore
1.9
|
00001 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ 00002 00003 /* 00004 Sonic Visualiser 00005 An audio file viewer and annotation editor. 00006 Centre for Digital Music, Queen Mary, University of London. 00007 This file copyright 2006 Chris Cannam. 00008 00009 This program is free software; you can redistribute it and/or 00010 modify it under the terms of the GNU General Public License as 00011 published by the Free Software Foundation; either version 2 of the 00012 License, or (at your option) any later version. See the file 00013 COPYING included with this distribution for more information. 00014 */ 00015 00016 #include "DataFileReaderFactory.h" 00017 #include "MIDIFileReader.h" 00018 #include "CSVFileReader.h" 00019 00020 #include "model/Model.h" 00021 00022 #include <QString> 00023 00024 QString 00025 DataFileReaderFactory::getKnownExtensions() 00026 { 00027 return "*.svl *.csv *.lab *.mid *.txt"; 00028 } 00029 00030 DataFileReader * 00031 DataFileReaderFactory::createReader(QString path, 00032 bool csv, 00033 MIDIFileImportPreferenceAcquirer *acquirer, 00034 CSVFormat format, 00035 int mainModelSampleRate) 00036 { 00037 QString err; 00038 00039 DataFileReader *reader = 0; 00040 00041 if (!csv) { 00042 reader = new MIDIFileReader(path, acquirer, mainModelSampleRate); 00043 if (reader->isOK()) return reader; 00044 if (reader->getError() != "") err = reader->getError(); 00045 delete reader; 00046 } 00047 00048 if (csv) { 00049 reader = new CSVFileReader(path, format, mainModelSampleRate); 00050 if (reader->isOK()) return reader; 00051 if (reader->getError() != "") err = reader->getError(); 00052 delete reader; 00053 } 00054 00055 return 0; 00056 } 00057 00058 DataFileReader * 00059 DataFileReaderFactory::createReader(QString path, 00060 MIDIFileImportPreferenceAcquirer *acquirer, 00061 int mainModelSampleRate) 00062 { 00063 DataFileReader *reader = createReader 00064 (path, false, acquirer, CSVFormat(), mainModelSampleRate); 00065 if (reader) return reader; 00066 00067 reader = createReader 00068 (path, true, acquirer, CSVFormat(path), mainModelSampleRate); 00069 if (reader) return reader; 00070 00071 return 0; 00072 } 00073 00074 Model * 00075 DataFileReaderFactory::load(QString path, 00076 MIDIFileImportPreferenceAcquirer *acquirer, 00077 int mainModelSampleRate) 00078 { 00079 DataFileReader *reader = createReader(path, 00080 acquirer, 00081 mainModelSampleRate); 00082 if (!reader) return NULL; 00083 00084 try { 00085 Model *model = reader->load(); 00086 delete reader; 00087 return model; 00088 } catch (Exception) { 00089 delete reader; 00090 throw; 00091 } 00092 } 00093 00094 Model * 00095 DataFileReaderFactory::loadNonCSV(QString path, 00096 MIDIFileImportPreferenceAcquirer *acquirer, 00097 int mainModelSampleRate) 00098 { 00099 DataFileReader *reader = createReader(path, false, 00100 acquirer, 00101 CSVFormat(), 00102 mainModelSampleRate); 00103 if (!reader) return NULL; 00104 00105 try { 00106 Model *model = reader->load(); 00107 delete reader; 00108 return model; 00109 } catch (Exception) { 00110 delete reader; 00111 throw; 00112 } 00113 } 00114 00115 Model * 00116 DataFileReaderFactory::loadCSV(QString path, CSVFormat format, 00117 int mainModelSampleRate) 00118 { 00119 DataFileReader *reader = createReader(path, true, 0, format, 00120 mainModelSampleRate); 00121 if (!reader) return NULL; 00122 00123 try { 00124 Model *model = reader->load(); 00125 delete reader; 00126 return model; 00127 } catch (Exception) { 00128 delete reader; 00129 throw; 00130 } 00131 } 00132