Mercurial > hg > sonic-annotator
comparison runner/FeatureExtractionManager.cpp @ 21:9a4e410bda7a
* Add --force option, and throw/catch exceptions for failure cases rather
than exiting directly
| author | Chris Cannam |
|---|---|
| date | Tue, 07 Jul 2009 10:34:27 +0000 |
| parents | bd1deebe1129 |
| children | 4ab7c925f7ac |
comparison
equal
deleted
inserted
replaced
| 20:7d87bf308509 | 21:9a4e410bda7a |
|---|---|
| 19 #include <vamp-hostsdk/PluginBufferingAdapter.h> | 19 #include <vamp-hostsdk/PluginBufferingAdapter.h> |
| 20 #include <vamp-hostsdk/PluginInputDomainAdapter.h> | 20 #include <vamp-hostsdk/PluginInputDomainAdapter.h> |
| 21 #include <vamp-hostsdk/PluginSummarisingAdapter.h> | 21 #include <vamp-hostsdk/PluginSummarisingAdapter.h> |
| 22 #include <vamp-hostsdk/PluginWrapper.h> | 22 #include <vamp-hostsdk/PluginWrapper.h> |
| 23 #include <vamp-hostsdk/PluginLoader.h> | 23 #include <vamp-hostsdk/PluginLoader.h> |
| 24 | |
| 25 #include "base/Exceptions.h" | |
| 24 | 26 |
| 25 #include <iostream> | 27 #include <iostream> |
| 26 | 28 |
| 27 using namespace std; | 29 using namespace std; |
| 28 | 30 |
| 371 | 373 |
| 372 FileSource source(audioSource, &retrievalProgress); | 374 FileSource source(audioSource, &retrievalProgress); |
| 373 if (!source.isAvailable()) { | 375 if (!source.isAvailable()) { |
| 374 cerr << "ERROR: File or URL \"" << audioSource.toStdString() | 376 cerr << "ERROR: File or URL \"" << audioSource.toStdString() |
| 375 << "\" could not be located" << endl; | 377 << "\" could not be located" << endl; |
| 376 exit(1); | 378 throw FileNotFound(audioSource); |
| 377 } | 379 } |
| 378 | 380 |
| 379 source.waitForData(); | 381 source.waitForData(); |
| 380 | 382 |
| 381 if (QFileInfo(audioSource).suffix().toLower() == "m3u") { | 383 if (QFileInfo(audioSource).suffix().toLower() == "m3u") { |
| 387 } | 389 } |
| 388 return; | 390 return; |
| 389 } else { | 391 } else { |
| 390 cerr << "ERROR: Playlist \"" << audioSource.toStdString() | 392 cerr << "ERROR: Playlist \"" << audioSource.toStdString() |
| 391 << "\" could not be opened" << endl; | 393 << "\" could not be opened" << endl; |
| 392 exit(1); | 394 throw FileNotFound(audioSource); |
| 393 } | 395 } |
| 394 } | 396 } |
| 395 | 397 |
| 396 if (m_sampleRate == 0) { | 398 if (m_sampleRate == 0) { |
| 397 cerr << "ERROR: Internal error in FeatureExtractionManager::extractFeatures: Plugin list is non-empty, but no sample rate set" << endl; | 399 cerr << "ERROR: Internal error in FeatureExtractionManager::extractFeatures: Plugin list is non-empty, but no sample rate set" << endl; |
| 400 | 402 |
| 401 AudioFileReader *reader = | 403 AudioFileReader *reader = |
| 402 AudioFileReaderFactory::createReader(source, m_sampleRate, &retrievalProgress); | 404 AudioFileReaderFactory::createReader(source, m_sampleRate, &retrievalProgress); |
| 403 | 405 |
| 404 if (!reader) { | 406 if (!reader) { |
| 405 cerr << "ERROR: File or URL \"" << audioSource.toStdString() | 407 throw FailedToOpenFile(audioSource); |
| 406 << "\" could not be opened" << endl; | |
| 407 exit(1); | |
| 408 } | 408 } |
| 409 | 409 |
| 410 size_t channels = reader->getChannelCount(); | 410 size_t channels = reader->getChannelCount(); |
| 411 | 411 |
| 412 retrievalProgress.done(); | 412 retrievalProgress.done(); |
| 413 | 413 |
| 414 cerr << "Opened " << channels << "-channel file or URL \"" << audioSource.toStdString() << "\"" << endl; | 414 cerr << "Opened " << channels << "-channel file or URL \"" << audioSource.toStdString() << "\"" << endl; |
| 415 | 415 |
| 416 // reject file if it has too few channels, plugin will handle if it has too many | 416 // reject file if it has too few channels, plugin will handle if it has too many |
| 417 if ((int)channels < m_channels) { | 417 if ((int)channels < m_channels) { |
| 418 //!!! should not be terminating here! | 418 throw FileOperationFailed |
| 419 cerr << "ERROR: File or URL \"" << audioSource.toStdString() << "\" has less than " << m_channels << " channels" << endl; | 419 (audioSource, |
| 420 exit(1); | 420 QString("read sufficient channels (found %1, require %2)") |
| 421 .arg(channels).arg(m_channels)); | |
| 421 } | 422 } |
| 422 | 423 |
| 423 // allocate audio buffers | 424 // allocate audio buffers |
| 424 float **data = new float *[m_channels]; | 425 float **data = new float *[m_channels]; |
| 425 for (int c = 0; c < m_channels; ++c) { | 426 for (int c = 0; c < m_channels; ++c) { |
