changeset 241:2b40f83e7627

* Make audio file reader factory try for a reader based on the file's extension, before trying all readers * Remove some debug output
author Chris Cannam
date Thu, 01 Mar 2007 12:15:08 +0000
parents 8133ae938704
children 2f7d27648806
files base/RangeMapper.cpp data/fileio/AudioFileReaderFactory.cpp plugin/FeatureExtractionPluginFactory.cpp
diffstat 3 files changed, 85 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/base/RangeMapper.cpp	Wed Feb 28 11:20:14 2007 +0000
+++ b/base/RangeMapper.cpp	Thu Mar 01 12:15:08 2007 +0000
@@ -41,8 +41,8 @@
                * (m_maxpos - m_minpos));
     if (position < m_minpos) position = m_minpos;
     if (position > m_maxpos) position = m_maxpos;
-    std::cerr << "LinearRangeMapper::getPositionForValue: " << value << " -> "
-              << position << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", minval " << m_minval << ", maxval " << m_maxval << ")" << std::endl;
+//    std::cerr << "LinearRangeMapper::getPositionForValue: " << value << " -> "
+//              << position << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", minval " << m_minval << ", maxval " << m_maxval << ")" << std::endl;
     return position;
 }
 
@@ -54,8 +54,8 @@
          * (m_maxval - m_minval));
     if (value < m_minval) value = m_minval;
     if (value > m_maxval) value = m_maxval;
-    std::cerr << "LinearRangeMapper::getValueForPosition: " << position << " -> "
-              << value << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", minval " << m_minval << ", maxval " << m_maxval << ")" << std::endl;
+//    std::cerr << "LinearRangeMapper::getValueForPosition: " << position << " -> "
+//              << value << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", minval " << m_minval << ", maxval " << m_maxval << ")" << std::endl;
     return value;
 }
 
@@ -81,8 +81,8 @@
                           * (m_maxpos - m_minpos));
     if (position < m_minpos) position = m_minpos;
     if (position > m_maxpos) position = m_maxpos;
-    std::cerr << "LogRangeMapper::getPositionForValue: " << value << " -> "
-              << position << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", ratio " << m_ratio << ", minlog " << m_minlog << ")" << std::endl;
+//    std::cerr << "LogRangeMapper::getPositionForValue: " << value << " -> "
+//              << position << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", ratio " << m_ratio << ", minlog " << m_minlog << ")" << std::endl;
     return position;
 }
 
@@ -90,8 +90,8 @@
 LogRangeMapper::getValueForPosition(int position) const
 {
     float value = powf(10, (position - m_minpos) / m_ratio + m_minlog);
-    std::cerr << "LogRangeMapper::getValueForPosition: " << position << " -> "
-              << value << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", ratio " << m_ratio << ", minlog " << m_minlog << ")" << std::endl;
+//    std::cerr << "LogRangeMapper::getValueForPosition: " << position << " -> "
+//              << value << " (minpos " << m_minpos << ", maxpos " << m_maxpos << ", ratio " << m_ratio << ", minlog " << m_minlog << ")" << std::endl;
     return value;
 }
 
--- a/data/fileio/AudioFileReaderFactory.cpp	Wed Feb 28 11:20:14 2007 +0000
+++ b/data/fileio/AudioFileReaderFactory.cpp	Thu Mar 01 12:15:08 2007 +0000
@@ -20,6 +20,7 @@
 #include "MP3FileReader.h"
 
 #include <QString>
+#include <QFileInfo>
 #include <iostream>
 
 QString
@@ -54,45 +55,95 @@
 
     AudioFileReader *reader = 0;
 
+    // First try to construct a preferred reader based on the
+    // extension.  If we can't identify one or it fails to load the
+    // file, fall back to trying all readers in no particular order.
+
+    QString ext = QFileInfo(path).suffix().toLower();
+    std::set<QString> extensions;
+
+    WavFileReader::getSupportedExtensions(extensions);
+    if (extensions.find(ext) != extensions.end()) {
+        reader = new WavFileReader(path);
+    }
+    
+#ifdef HAVE_MAD
+    if (!reader) {
+        extensions.clear();
+        MP3FileReader::getSupportedExtensions(extensions);
+        if (extensions.find(ext) != extensions.end()) {
+            reader = new MP3FileReader
+                (path, true, MP3FileReader::CacheInTemporaryFile);
+        }
+    }
+#endif
+#ifdef HAVE_OGGZ
+#ifdef HAVE_FISHSOUND
+    if (!reader) {
+        extensions.clear();
+        OggVorbisFileReader::getSupportedExtensions(extensions);
+        if (extensions.find(ext) != extensions.end()) {
+            reader = new OggVorbisFileReader
+                (path, true, OggVorbisFileReader::CacheInTemporaryFile);
+        }
+    }
+#endif
+#endif
+
+    if (reader) {
+        if (reader->isOK()) return reader;
+        if (reader->getError() != "") {
+            std::cerr << "AudioFileReaderFactory: Preferred reader for "
+                      << "extension \"" << ext.toStdString() << "\" failed: \""
+                      << reader->getError().toStdString() << "\"" << std::endl;
+        } else {
+            std::cerr << "AudioFileReaderFactory: Preferred reader for "
+                      << "extension \"" << ext.toStdString() << "\" failed"
+                      << std::endl;
+        }            
+        delete reader;
+        reader = 0;
+    }
+
     reader = new WavFileReader(path);
     if (reader->isOK()) return reader;
-    if (reader->getError() != "") err = reader->getError();
+    if (reader->getError() != "") {
+	std::cerr << "AudioFileReaderFactory: WAV file reader error: \""
+                  << reader->getError().toStdString() << "\"" << std::endl;
+    } else {
+	std::cerr << "AudioFileReaderFactory: WAV file reader failed"
+                  << std::endl;
+    }        
     delete reader;
 
-	if (err != "") {
-	std::cerr << "AudioFileReaderFactory: WAV file reader error: \""
-			<< err.toStdString() << "\"" << std::endl;
-	}
-
-
 #ifdef HAVE_OGGZ
 #ifdef HAVE_FISHSOUND
-    reader = new OggVorbisFileReader(path, true,
-                                     OggVorbisFileReader::CacheInTemporaryFile);
+    reader = new OggVorbisFileReader
+        (path, true, OggVorbisFileReader::CacheInTemporaryFile);
     if (reader->isOK()) return reader;
-    if (reader->getError() != "") err = reader->getError();
+    if (reader->getError() != "") {
+	std::cerr << "AudioFileReaderFactory: Ogg file reader error: \""
+                  << reader->getError().toStdString() << "\"" << std::endl;
+    } else {
+	std::cerr << "AudioFileReaderFactory: Ogg file reader failed"
+                  << std::endl;
+    }        
     delete reader;
-
-	if (err != "") {
-	std::cerr << "AudioFileReaderFactory: Ogg file reader error: \""
-			<< err.toStdString() << "\"" << std::endl;
-	}
-
 #endif
 #endif
  
 #ifdef HAVE_MAD
-    reader = new MP3FileReader(path, true,
-                               MP3FileReader::CacheInTemporaryFile);
+    reader = new MP3FileReader
+        (path, true, MP3FileReader::CacheInTemporaryFile);
     if (reader->isOK()) return reader;
-    if (reader->getError() != "") err = reader->getError();
+    if (reader->getError() != "") {
+	std::cerr << "AudioFileReaderFactory: MP3 file reader error: \""
+                  << reader->getError().toStdString() << "\"" << std::endl;
+    } else {
+	std::cerr << "AudioFileReaderFactory: MP3 file reader failed"
+                  << std::endl;
+    }        
     delete reader;
-
-	if (err != "") {
-	std::cerr << "AudioFileReaderFactory: mp3 file reader error: \""
-			<< err.toStdString() << "\"" << std::endl;
-	}
-
 #endif
 
     return 0;
--- a/plugin/FeatureExtractionPluginFactory.cpp	Wed Feb 28 11:20:14 2007 +0000
+++ b/plugin/FeatureExtractionPluginFactory.cpp	Thu Mar 01 12:15:08 2007 +0000
@@ -125,7 +125,7 @@
                 QString id = PluginIdentifier::createIdentifier
                     ("vamp", soname, descriptor->identifier);
                 rv.push_back(id);
-                std::cerr << "Found id " << id.toStdString() << std::endl;
+//                std::cerr << "Found id " << id.toStdString() << std::endl;
                 ++index;
             }