annotate data/fileio/AudioFileReaderFactory.cpp @ 0:fc9323a41f5a

start base : Sonic Visualiser sv1-1.0rc1
author lbajardsilogic
date Fri, 11 May 2007 09:08:14 +0000
parents
children c8186c4942d6
rev   line source
lbajardsilogic@0 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@0 2
lbajardsilogic@0 3 /*
lbajardsilogic@0 4 Sonic Visualiser
lbajardsilogic@0 5 An audio file viewer and annotation editor.
lbajardsilogic@0 6 Centre for Digital Music, Queen Mary, University of London.
lbajardsilogic@0 7 This file copyright 2006 Chris Cannam and QMUL.
lbajardsilogic@0 8
lbajardsilogic@0 9 This program is free software; you can redistribute it and/or
lbajardsilogic@0 10 modify it under the terms of the GNU General Public License as
lbajardsilogic@0 11 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@0 12 License, or (at your option) any later version. See the file
lbajardsilogic@0 13 COPYING included with this distribution for more information.
lbajardsilogic@0 14 */
lbajardsilogic@0 15
lbajardsilogic@0 16 #include "AudioFileReaderFactory.h"
lbajardsilogic@0 17
lbajardsilogic@0 18 #include "WavFileReader.h"
lbajardsilogic@0 19 #include "OggVorbisFileReader.h"
lbajardsilogic@0 20 #include "MP3FileReader.h"
lbajardsilogic@0 21
lbajardsilogic@0 22 #include <QString>
lbajardsilogic@0 23 #include <QFileInfo>
lbajardsilogic@0 24 #include <iostream>
lbajardsilogic@0 25
lbajardsilogic@0 26 QString
lbajardsilogic@0 27 AudioFileReaderFactory::getKnownExtensions()
lbajardsilogic@0 28 {
lbajardsilogic@0 29 std::set<QString> extensions;
lbajardsilogic@0 30
lbajardsilogic@0 31 WavFileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 32 #ifdef HAVE_MAD
lbajardsilogic@0 33 MP3FileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 34 #endif
lbajardsilogic@0 35 #ifdef HAVE_OGGZ
lbajardsilogic@0 36 #ifdef HAVE_FISHSOUND
lbajardsilogic@0 37 OggVorbisFileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 38 #endif
lbajardsilogic@0 39 #endif
lbajardsilogic@0 40
lbajardsilogic@0 41 QString rv;
lbajardsilogic@0 42 for (std::set<QString>::const_iterator i = extensions.begin();
lbajardsilogic@0 43 i != extensions.end(); ++i) {
lbajardsilogic@0 44 if (i != extensions.begin()) rv += " ";
lbajardsilogic@0 45 rv += "*." + *i;
lbajardsilogic@0 46 }
lbajardsilogic@0 47
lbajardsilogic@0 48 return rv;
lbajardsilogic@0 49 }
lbajardsilogic@0 50
lbajardsilogic@0 51 AudioFileReader *
lbajardsilogic@0 52 AudioFileReaderFactory::createReader(QString path)
lbajardsilogic@0 53 {
lbajardsilogic@0 54 QString err;
lbajardsilogic@0 55
lbajardsilogic@0 56 AudioFileReader *reader = 0;
lbajardsilogic@0 57
lbajardsilogic@0 58 // First try to construct a preferred reader based on the
lbajardsilogic@0 59 // extension. If we can't identify one or it fails to load the
lbajardsilogic@0 60 // file, fall back to trying all readers in no particular order.
lbajardsilogic@0 61
lbajardsilogic@0 62 QString ext = QFileInfo(path).suffix().toLower();
lbajardsilogic@0 63 std::set<QString> extensions;
lbajardsilogic@0 64
lbajardsilogic@0 65 WavFileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 66 if (extensions.find(ext) != extensions.end()) {
lbajardsilogic@0 67 reader = new WavFileReader(path);
lbajardsilogic@0 68 }
lbajardsilogic@0 69
lbajardsilogic@0 70 #ifdef HAVE_MAD
lbajardsilogic@0 71 if (!reader) {
lbajardsilogic@0 72 extensions.clear();
lbajardsilogic@0 73 MP3FileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 74 if (extensions.find(ext) != extensions.end()) {
lbajardsilogic@0 75 reader = new MP3FileReader
lbajardsilogic@0 76 (path, true, MP3FileReader::CacheInTemporaryFile);
lbajardsilogic@0 77 }
lbajardsilogic@0 78 }
lbajardsilogic@0 79 #endif
lbajardsilogic@0 80 #ifdef HAVE_OGGZ
lbajardsilogic@0 81 #ifdef HAVE_FISHSOUND
lbajardsilogic@0 82 if (!reader) {
lbajardsilogic@0 83 extensions.clear();
lbajardsilogic@0 84 OggVorbisFileReader::getSupportedExtensions(extensions);
lbajardsilogic@0 85 if (extensions.find(ext) != extensions.end()) {
lbajardsilogic@0 86 reader = new OggVorbisFileReader
lbajardsilogic@0 87 (path, true, OggVorbisFileReader::CacheInTemporaryFile);
lbajardsilogic@0 88 }
lbajardsilogic@0 89 }
lbajardsilogic@0 90 #endif
lbajardsilogic@0 91 #endif
lbajardsilogic@0 92
lbajardsilogic@0 93 if (reader) {
lbajardsilogic@0 94 if (reader->isOK()) return reader;
lbajardsilogic@0 95 if (reader->getError() != "") {
lbajardsilogic@0 96 std::cerr << "AudioFileReaderFactory: Preferred reader for "
lbajardsilogic@0 97 << "extension \"" << ext.toStdString() << "\" failed: \""
lbajardsilogic@0 98 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@0 99 } else {
lbajardsilogic@0 100 std::cerr << "AudioFileReaderFactory: Preferred reader for "
lbajardsilogic@0 101 << "extension \"" << ext.toStdString() << "\" failed"
lbajardsilogic@0 102 << std::endl;
lbajardsilogic@0 103 }
lbajardsilogic@0 104 delete reader;
lbajardsilogic@0 105 reader = 0;
lbajardsilogic@0 106 }
lbajardsilogic@0 107
lbajardsilogic@0 108 reader = new WavFileReader(path);
lbajardsilogic@0 109 if (reader->isOK()) return reader;
lbajardsilogic@0 110 if (reader->getError() != "") {
lbajardsilogic@0 111 std::cerr << "AudioFileReaderFactory: WAV file reader error: \""
lbajardsilogic@0 112 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@0 113 } else {
lbajardsilogic@0 114 std::cerr << "AudioFileReaderFactory: WAV file reader failed"
lbajardsilogic@0 115 << std::endl;
lbajardsilogic@0 116 }
lbajardsilogic@0 117 delete reader;
lbajardsilogic@0 118
lbajardsilogic@0 119 #ifdef HAVE_OGGZ
lbajardsilogic@0 120 #ifdef HAVE_FISHSOUND
lbajardsilogic@0 121 reader = new OggVorbisFileReader
lbajardsilogic@0 122 (path, true, OggVorbisFileReader::CacheInTemporaryFile);
lbajardsilogic@0 123 if (reader->isOK()) return reader;
lbajardsilogic@0 124 if (reader->getError() != "") {
lbajardsilogic@0 125 std::cerr << "AudioFileReaderFactory: Ogg file reader error: \""
lbajardsilogic@0 126 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@0 127 } else {
lbajardsilogic@0 128 std::cerr << "AudioFileReaderFactory: Ogg file reader failed"
lbajardsilogic@0 129 << std::endl;
lbajardsilogic@0 130 }
lbajardsilogic@0 131 delete reader;
lbajardsilogic@0 132 #endif
lbajardsilogic@0 133 #endif
lbajardsilogic@0 134
lbajardsilogic@0 135 #ifdef HAVE_MAD
lbajardsilogic@0 136 reader = new MP3FileReader
lbajardsilogic@0 137 (path, true, MP3FileReader::CacheInTemporaryFile);
lbajardsilogic@0 138 if (reader->isOK()) return reader;
lbajardsilogic@0 139 if (reader->getError() != "") {
lbajardsilogic@0 140 std::cerr << "AudioFileReaderFactory: MP3 file reader error: \""
lbajardsilogic@0 141 << reader->getError().toStdString() << "\"" << std::endl;
lbajardsilogic@0 142 } else {
lbajardsilogic@0 143 std::cerr << "AudioFileReaderFactory: MP3 file reader failed"
lbajardsilogic@0 144 << std::endl;
lbajardsilogic@0 145 }
lbajardsilogic@0 146 delete reader;
lbajardsilogic@0 147 #endif
lbajardsilogic@0 148
lbajardsilogic@0 149 return 0;
lbajardsilogic@0 150 }
lbajardsilogic@0 151