Mercurial > hg > svcore
comparison rdf/RDFImporter.cpp @ 522:76f6971c8433
* Use FileFinder to find audio source referred to in an RDF document,
if it isn't where the document indicates
author | Chris Cannam |
---|---|
date | Fri, 12 Dec 2008 14:38:10 +0000 |
parents | e340b2fb9471 |
children | 3ccf48fb81d6 |
comparison
equal
deleted
inserted
replaced
521:5ebcf099dab0 | 522:76f6971c8433 |
---|---|
35 #include "data/model/WaveFileModel.h" | 35 #include "data/model/WaveFileModel.h" |
36 | 36 |
37 #include "data/fileio/FileSource.h" | 37 #include "data/fileio/FileSource.h" |
38 #include "data/fileio/CachedFile.h" | 38 #include "data/fileio/CachedFile.h" |
39 | 39 |
40 #ifndef NO_SV_GUI | |
41 #include "widgets/FileFinder.h" | |
42 #endif | |
43 | |
40 using std::cerr; | 44 using std::cerr; |
41 using std::endl; | 45 using std::endl; |
42 | 46 |
43 class RDFImporterImpl | 47 class RDFImporterImpl |
44 { | 48 { |
154 return models; | 158 return models; |
155 } | 159 } |
156 | 160 |
157 QString error; | 161 QString error; |
158 | 162 |
159 if (!isOK()) error = m_errorString; | 163 if (m_errorString != "") { |
164 error = m_errorString; | |
165 } | |
160 m_errorString = ""; | 166 m_errorString = ""; |
161 | 167 |
162 getDataModelsDense(models, reporter); | 168 getDataModelsDense(models, reporter); |
163 | 169 |
164 if (!isOK()) error = m_errorString; | 170 if (m_errorString != "") { |
171 error = m_errorString; | |
172 } | |
165 m_errorString = ""; | 173 m_errorString = ""; |
166 | 174 |
167 getDataModelsSparse(models, reporter); | 175 getDataModelsSparse(models, reporter); |
168 | 176 |
169 if (isOK()) m_errorString = error; | 177 if (m_errorString == "" && error != "") { |
178 m_errorString = error; | |
179 } | |
170 | 180 |
171 return models; | 181 return models; |
172 } | 182 } |
173 | 183 |
174 void | 184 void |
190 for (int i = 0; i < results.size(); ++i) { | 200 for (int i = 0; i < results.size(); ++i) { |
191 | 201 |
192 QString signal = results[i]["signal"].value; | 202 QString signal = results[i]["signal"].value; |
193 QString source = results[i]["source"].value; | 203 QString source = results[i]["source"].value; |
194 | 204 |
195 FileSource fs(source, reporter); | 205 FileSource *fs = new FileSource(source, reporter); |
196 if (fs.isAvailable()) { | 206 #ifdef NO_SV_GUI |
197 if (reporter) { | 207 if (!fs->isAvailable()) { |
198 reporter->setMessage(RDFImporter::tr("Importing audio referenced in RDF...")); | 208 m_errorString = QString("Signal source \"%1\" is not available").arg(source); |
199 } | 209 delete fs; |
200 fs.waitForData(); | 210 continue; |
201 WaveFileModel *newModel = new WaveFileModel(fs, m_sampleRate); | 211 } |
202 if (newModel->isOK()) { | 212 #else |
203 std::cerr << "Successfully created wave file model from source at \"" << source.toStdString() << "\"" << std::endl; | 213 if (!fs->isAvailable()) { |
204 models.push_back(newModel); | 214 FileFinder *ff = FileFinder::getInstance(); |
205 m_audioModelMap[signal] = newModel; | 215 QString path = ff->find(FileFinder::AudioFile, |
206 if (m_sampleRate == 0) { | 216 fs->getLocation(), |
207 m_sampleRate = newModel->getSampleRate(); | 217 m_uristring); |
218 if (path != "") { | |
219 delete fs; | |
220 fs = new FileSource(path, reporter); | |
221 if (!fs->isAvailable()) { | |
222 delete fs; | |
223 m_errorString = QString("Signal source \"%1\" is not available").arg(source); | |
224 continue; | |
208 } | 225 } |
209 } else { | 226 } |
210 m_errorString = QString("Failed to create wave file model from source at \"%1\"").arg(source); | 227 } |
211 delete newModel; | 228 #endif |
229 | |
230 if (reporter) { | |
231 reporter->setMessage(RDFImporter::tr("Importing audio referenced in RDF...")); | |
232 } | |
233 fs->waitForData(); | |
234 WaveFileModel *newModel = new WaveFileModel(*fs, m_sampleRate); | |
235 if (newModel->isOK()) { | |
236 std::cerr << "Successfully created wave file model from source at \"" << source.toStdString() << "\"" << std::endl; | |
237 models.push_back(newModel); | |
238 m_audioModelMap[signal] = newModel; | |
239 if (m_sampleRate == 0) { | |
240 m_sampleRate = newModel->getSampleRate(); | |
212 } | 241 } |
213 } else { | 242 } else { |
214 m_errorString = QString("Signal source \"%1\" is not available").arg(source); | 243 m_errorString = QString("Failed to create wave file model from source at \"%1\"").arg(source); |
215 } | 244 delete newModel; |
245 } | |
246 delete fs; | |
216 } | 247 } |
217 } | 248 } |
218 | 249 |
219 void | 250 void |
220 RDFImporterImpl::getDataModelsDense(std::vector<Model *> &models, | 251 RDFImporterImpl::getDataModelsDense(std::vector<Model *> &models, |